用单片机产生一个PWM波为啥周期不对啊?
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit pwm=P2^2;
uint N;
void main()
{
TMOD=0X01;
TH1=(65636-50000)/256;
TL1=(65636-50000)%256;
EA=1;
ET1=1;
TR1=1;
while(1);
}
void T1_time() interrupt 3
{
TH1=(65636-50000)/256;
TL1=(65636-50000)%256;
N++;
if(N>40)
N=0;
if(N<=20)
pwm=1;
else
pwm=0;
}
1、应该是65535
2、我之前也碰到仿真和现实很不一样的,真出不来不妨现实挂一下示波器
主要问题:TMOD=0X01; 是13位定时器,要改为 TMOD=0X11;才是16位;改后周期就变成2秒多一点点。
次要问题: if(N>40) 要改为 if(N>=40) 不然多走了50ms
对对,这是一个错误,谢谢指点。谢谢
对对,这是一个错误,谢谢指点。谢谢
对啊,我用的定时器1,所以TMOD应该是TMOD=0x10;我只用了定时器1,所以应该改成0x01就可以吧?我仿真试过了,是对的,谢谢高手指点,谢谢。不过你看我下面的波形,为什么不是标准的方波呢?能指点一下吗?
恩恩,是错了,不过主要错误是TMOD应该是0x01,谢谢你的帮助。
错误的话,已有高手说了,我提一点改进建议吧。中断里面的语句可以的话尽量少点。
while(1)
{
if(N>40)
N=0;
if(N<=20)
pwm=1;
else
pwm=0;
}
void T1_time() interrupt 3
{
TH1=(65636-50000)/256;
TL1=(65636-50000)%256;
N++;
}
恩恩,说的对,谢谢高手指点。多谢