|
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;
}
|
|