首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

关于C51定时器中断有关问题

2012-02-15 
关于C51定时器中断问题。刚在网上看到的。源码如下,在keil v4里面编译通过,但有几点不解的,谁知道帮忙解释下

关于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;
...
}

热点排行