关于C51定时器中断问题。
刚在网上看到的。源码如下,在keil v4里面编译通过,但有几点不解的,谁知道帮忙解释下,谢谢!
1、在中断函数里面的if(tt1 = 10)是什么意思?是赋值还是等于?
2、中断是如何执行到if里面的语句的?
//采用方式2,使用定时器T1定时1秒,循环点亮8盏LED灯,采用单片机c51
//---------------------------
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar tt1, temp;
void timer1() interrupt 3
{
if(tt1 = 10)
{
tt1 = 0;
temp = _crol_(temp, 1);
P0 = temp;
}
}
void main()
{
temp = 0xfe;
TH1 = (256 - 100);
TL1 = (256 - 100);
EA = 1;
ET1 = 1;
TR1 = 1;
while(1);
}
[解决办法]
(1) 应该是写错了,if里面是如果用赋值语句,一般C编译器是不会报错的。估计本意是像写成判断==的。
如果写成赋值语句,则等效于:
tt1 = 10;
if(tt1)
{
....
}
(2) 由于tt1不为0,所以if后面的语句会执行的。这样每来一次中断就会执行一次if里面的语句的。相当于这个if判断不存在的。
[解决办法]
原程序的本意应该是,每进入中断10次(例如1次50毫秒,10次半秒),执行一次if语句里面的内容。
_crol_(temp, 1); 应该是对temp移位1次。
正确的应该为:
tt1++;
if(tt1 == 10)
{ tt1=0;
...
}