用定時器0中斷做的1KHZ(每100us中斷一次)PWM終于調試成功!
不知道是為什么,用while(1){。。。}老是不行,換成do{。。。}while(1)就成功了。
單片機代碼如下:
#include <reg52.h> //頭文件
#include <intrins.h>
#define uchar unsigned char // 數據類型簡化-起別名
uchar count=0;
uchar x; //x=1~10,占空比檔位分別對應10%~100%
sbit S8050_b=P2^0;
void T0_init()
{
TMOD |= 0x01;
TH0 = 0xff; //100us 中斷一次
TL0 =0xa4;
EA=1;
ET0=1;
TR0 =1;
}
void T0_interrupt() interrupt 1
{
TH0 = 0xff; //重裝初值
TL0 =0xa4;
count++; //中斷次數+1
}
void main()
{ S8050_b=0; x=2;
T0_init() ;
do //1KHZ,PWM
{
if(count>0 && count<=x) {S8050_b=1;}
if(count>x && count<10) {S8050_b=0;}
if(count==10) {count=0;}
}
while(1);
}
|