求AT89C52输出的pwm方波程序
1个回答
展开全部
#include <REG52.H>
#define uchar unsigned char
#define uint unsigned int
sbit PWM = P2^0; //PWM输出端口
uint count=0, preset=0; //定时器计数和预设值
void timer_init(){
TMOD = 0x01;
TH0 = 0xFF;
TL0 = 0x9C;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void timer0_irpt()interrupt 1
{
TH0 = 0xFF;
TL0 = 0x9C;
count++;
if(count+1 <= preset){
PWM = 1;
}else{
PWM = 0;
}
if(count == 200){
count = 0;
}
}
void main(){
timer_init();
while(1){
;
}
}
用这个程序,只要preset的值取0到200即可完成占空比0~100%的PWM波。读懂程序了以后就可以修改频率和分辨率了,这个是我控制舵机的,能够正常工作
#define uchar unsigned char
#define uint unsigned int
sbit PWM = P2^0; //PWM输出端口
uint count=0, preset=0; //定时器计数和预设值
void timer_init(){
TMOD = 0x01;
TH0 = 0xFF;
TL0 = 0x9C;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void timer0_irpt()interrupt 1
{
TH0 = 0xFF;
TL0 = 0x9C;
count++;
if(count+1 <= preset){
PWM = 1;
}else{
PWM = 0;
}
if(count == 200){
count = 0;
}
}
void main(){
timer_init();
while(1){
;
}
}
用这个程序,只要preset的值取0到200即可完成占空比0~100%的PWM波。读懂程序了以后就可以修改频率和分辨率了,这个是我控制舵机的,能够正常工作
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询