|
|
2019年電子設計競賽即將進行,其中電機和舵機的控制需需要用到PWM,我編寫了一個電位器調節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; //定時計數器1設置方式1
TH0=(65536-500)/256; //初值0.5ms
TL0=(65536-500)%256;
TH1=0xff;
TL1=0xf0;
EA=1;
ET0=1;
ET1=1; //允許定時計數器1中斷以便產生CLOCK時鐘
TR0=1;
TR1=1;
while(1)
{
START=0;
OE=0;
START=1; //啟動ADC轉換
START=0;
while (!EOC)
{
adc0809(); //ADC轉換
tmp=addata*196; //數據處理,1個單位代表19.6mV 測出電壓在0-50000mv間
high=tmp/500;
}
}
}
void adc0809() //讀ADC0809子程序
{
P1=0xff; //P1全部置一準備讀數據
OE=1;
addata=P1; //讀出轉換數據賦與addata
OE=0; //讀數完畢
}
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實現的PWM.rar
2019-8-2 19:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
53.15 KB, 下載次數: 25, 下載積分: 黑幣 -5
|