找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2589|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

用ADC0808實現(xiàn)的PWM信號

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:235200 發(fā)表于 2019-8-2 19:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
2019年電子設(shè)計競賽即將進(jìn)行,其中電機(jī)和舵機(jī)的控制需需要用到PWM,我編寫了一個電位器調(diào)節(jié)PWM的仿真程序,希望能對你有所幫助。#include <regx52.h>//#include "ADC0809.h"
#define uchar unsigned char
#define uint unsigned int
sbit  CLOCK=P2^4;
sbit  START=P2^5;
sbit  EOC= P2^6;
sbit  OE=P2^7;

uchar addata,k;
uint tmp,high;
void adc0809();
void delay(uchar t)
  {
    uchar i,j;
    for (i=0;i<t;i++)
     for (j=0;j<123;j++);

    }

main()
{
   TMOD=0x11;              //定時計數(shù)器1設(shè)置方式1
   TH0=(65536-500)/256;               //初值0.5ms
   TL0=(65536-500)%256;
         TH1=0xff;
   TL1=0xf0;
   EA=1;
         ET0=1;
   ET1=1;                  //允許定時計數(shù)器1中斷以便產(chǎn)生CLOCK時鐘
         TR0=1;
         TR1=1;
   while(1)
   {
   START=0;
   OE=0;
   START=1;          //啟動ADC轉(zhuǎn)換
   START=0;
    while (!EOC)
    {
      adc0809();             //ADC轉(zhuǎn)換
      tmp=addata*196;        //數(shù)據(jù)處理,1個單位代表19.6mV  測出電壓在0-50000mv間
                  high=tmp/500;
    }
   }
}

void adc0809()       //讀ADC0809子程序
{
   P1=0xff;          //P1全部置一準(zhǔn)備讀數(shù)據(jù)
   OE=1;
   addata=P1;        //讀出轉(zhuǎn)換數(shù)據(jù)賦與addata
   OE=0;             //讀數(shù)完畢
}

DS1() interrupt 1
{
        k++;               //中斷1次為0.5ms
        if (k<high)
                P3_0=1;          //輸出高電平
         else
                 P3_0=0;         //輸出低電平
        if (k==100)
                k=0;             //PWM周期為0.5*100ms
        TH0=(65536-500)/256;               //初值0.5ms
  TL0=(65536-500)%256;
}

void time1() interrupt 3
{
   CLOCK=~CLOCK;
   TH1=0xff;
   TL1=0xf0;
  }

ADC0808實現(xiàn)的PWM.rar

53.15 KB, 下載次數(shù): 25, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表