单片机中断一直搞的不太明白

2019-07-15 17:48发布

这个程序到底怎么理解,THO的数值怎么理解

void timer0_isr(void) interrupt 1
{
TH0=0xfe;       
TL0=frq;     

SPK=!SPK;      

}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
haha1995
1楼-- · 2019-07-15 20:29
 精彩回答 2  元偷偷看……
HARRY007
2楼-- · 2019-07-16 02:17
你可以去看下汇编,中断就是执行了跳转指令,这个中断位置处写的中断函数,里面对计数值又赋了一下。这应该是16位计数器,你用的是8位单片机,所以寄存器都是8位的,把16位数据拆开,高的扔到THO,低的扔到TL0。“SPK=!SPK;”应该是需要执行的代码。个人见解,仅供参考。
将军问鼎
3楼-- · 2019-07-16 07:22
你这样理解,1、计算机暂停正在执行的程序去执行别的程序,2、你附上的程序,是定时器0的中断程序,你这样理解,定时器是单片机内部钟表,它的值为0~65535,相当于表转一圈,现在你可以想象,你家的表转一圈,你就去喝杯水,那么,单片机也是这样,当单片机定时器从0~65535走一圈的时候,它就执行一次,你给他的中断函数,也就是你写的这个,那么如果你把你家的表实现设定一个时间,那么你喝水的时间就不是表走十二个小时的时间了,可能是6个小时,定时器也是这个道理,这就是初值的意义,在中断函数中需要不断重复对TH0 ,TL0进行赋值就是为了总是给他设定一个时间初值,理解了吗?

评分

参与人数 1积分 +1 收起 理由 526117922 + 1

查看全部评分

水淹沙漠
4楼-- · 2019-07-16 11:25
将军问鼎 发表于 2015-2-14 14:00
你这样理解,1、计算机暂停正在执行的程序去执行别的程序,2、你附上的程序,是定时器0的中断程序,你这样 ...

这个我能理解,谢谢,就是定时之后,一段时间后就跳转到SPK=!SPK;这个步骤了吧
将军问鼎
5楼-- · 2019-07-16 14:23
水淹沙漠 发表于 2015-2-15 11:20
这个我能理解,谢谢,就是定时之后,一段时间后就跳转到SPK=!SPK;这个步骤了吧
...

嗯是的,一段时间后就跳转到中断函数里的语句

一周热门 更多>