我设置了两个定时器模拟PWM。以下是我的程序,求大神们看看我错哪里了。。最好定时器的时间也帮我看看有没有算错,在这里谢谢大家了。#include <reg51.h>//51单片机 11.0592MHZ晶振//功能:舵机1秒转动10° 满方向之后反方向转unsigned char target;sbit OUT=P1^0;void delay(void) //误差 -0.651041666667us{ unsigned char a,b; for(b=102;b>0;b--) for(a=3;a>0;a--);}void SetTimer0(unsigned char i){ unsigned char a; a=65535-(500000+111111*i)/1085; // i增加1,舵机转角增加10° TH0=a/256; TL0=a%256; }void InitTimer0(void){ TMOD=0x01;//0000 0001 设置为定时器0且工作于模式1 TH0=0xfe; //0.5ms不知道算错没 TL0=0x33; }void InitTimer1(void){ TMOD = TMOD|0x10;//0001 0001 设置为定时器1且工作于模式1 TH1 = 0xB7; //20ms不知道算错没 TL1 = 0xFE;}void Timer0Interrupt(void) interrupt 1{ TR0=0; //关闭定时器0 一个周期只中断1次 OUT=0; //PWM输出口为低}void Timer1Interrupt(void) interrupt 3{ OUT=1; //PWM输出口为高 SetTimer0(target); //改变脉冲宽度 TR0=1; //开启定时器0}void main(){ unsigned char b; IE=0x8A; //1000 1010 开启 总中断、T0中断、T1中断 允许位 InitTimer0(); InitTimer1(); TCON|=0x50;//TR1=1;TR0=1; while(1) { if(b==0) { target++; if(target==18) b=1; delay(); } else { target--; if(target==0) b=0; delay(); } }}
审é¢è¦ä»ç»ï¼æåçæ¯èµæºãå¥å¥ï¼èµæºPWMå¯ä»¥è°è转è§çï¼ç´æµçµæºPWMåªè½è°è转éä¸è½è°è转è§è¿ä¸ªå¤§å®¶é½ç¥éã