51单片机 定时器#include#define uint unsigned int uint pp;sbit led=P1^0;void main(){TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1).TR0=1; //打开定时器TH0=0Xff; //定时器设置,每隔100微
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/03 10:32:04
![51单片机 定时器#include#define uint unsigned int uint pp;sbit led=P1^0;void main(){TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1).TR0=1; //打开定时器TH0=0Xff; //定时器设置,每隔100微](/uploads/image/z/1586487-39-7.jpg?t=51%E5%8D%95%E7%89%87%E6%9C%BA+%E5%AE%9A%E6%97%B6%E5%99%A8%23include%23define+uint+unsigned+int+uint+pp%3Bsbit+led%3DP1%5E0%3Bvoid+main%28%29%7BTMOD%3D0x01%3B+%2F%2F%E6%A8%A1%E5%BC%8F%E8%AE%BE%E7%BD%AE%2C00000001%2C%E5%8F%AF%E8%A7%81%E9%87%87%E7%94%A8%E7%9A%84%E6%98%AF%E5%AE%9A%E6%97%B6%E5%99%A80%2C%E5%B7%A5%E4%BD%9C%E4%B8%8E%E6%A8%A1%E5%BC%8F1%EF%BC%88M1%3D0%2CM0%3D1%EF%BC%89.TR0%3D1%3B+%2F%2F%E6%89%93%E5%BC%80%E5%AE%9A%E6%97%B6%E5%99%A8TH0%3D0Xff%3B+%2F%2F%E5%AE%9A%E6%97%B6%E5%99%A8%E8%AE%BE%E7%BD%AE%2C%E6%AF%8F%E9%9A%94100%E5%BE%AE)
51单片机 定时器#include#define uint unsigned int uint pp;sbit led=P1^0;void main(){TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1).TR0=1; //打开定时器TH0=0Xff; //定时器设置,每隔100微
51单片机 定时器
#include
#define uint unsigned int
uint pp;
sbit led=P1^0;
void main()
{
TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1).
TR0=1; //打开定时器
TH0=0Xff; //定时器设置,每隔100微秒发起一次中断.
TL0=0Xa4;
ET0=1; //开定时器0中断
EA=1; //开总中断
while(1)
{
if(pp==10000)led=0;//时隔1s后,led被点亮.
if(pp==20000)led=1;//led亮了一秒之后会灭.
}
}
void time0() interrupt 1
{TH0=0Xff;
TL0=0Xa4;
pp++;
}
单片机运行的结果是一秒后第一个LED会亮,然后亮了一秒之后会灭,但是为什么灭了之后等好几秒之后会再次亮起,之后重复循环?
51单片机 定时器#include#define uint unsigned int uint pp;sbit led=P1^0;void main(){TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1).TR0=1; //打开定时器TH0=0Xff; //定时器设置,每隔100微
试分析你的程序.你的time0中断里面只有pp++,也就是在第一次灭了以后,pp是20000,而这个时候你没有对pp清零,pp还会一直+下去,20001,20002,20003……一直循环下去,如果p变量无界的话,你这个程序就只能亮一次,灭一次,以后就再也亮不起来了,但为什么过了好多秒又亮了呢?因为pp的类型是uint,可以查得uint型变量的最打值是65535,如果pp=65535的时候,再+1的话,pp就变成了0,而这个时候再过1秒钟,LED就亮了起来了,而pp从20000到65535需要大概4.5秒,再从0到10000又需要大概1秒,所以需要大概5.5秒!
改正方法:
再你的time0中断里加入判断,如果pp>20000,则将pp清零,也就是在pp++后加入
if (pp>20000) pp=0;
这样应该就正常了,试验一下吧,如果对您有用,请麻烦点击一下【采纳】,你我才都能得到知道经验,谢啦~