单片机中断一直搞的不太明白
时间:10-02
整理:3721RD
点击:
这个程序到底怎么理解,THO的数值怎么理解
void Timer0_isr(void) interrupt 1
{
TH0=0xfe;
TL0=frq;
SPK=!SPK;
}
void Timer0_isr(void) interrupt 1
{
TH0=0xfe;
TL0=frq;
SPK=!SPK;
}
0xfe是指11111110,也就是高8位的初值是11111110.
你可以去看下汇编,中断就是执行了跳转指令,这个中断位置处写的中断函数,里面对计数值又赋了一下。这应该是16位计数器,你用的是8位单片机,所以寄存器都是8位的,把16位数据拆开,高的扔到THO,低的扔到TL0。“SPK=!SPK;”应该是需要执行的代码。个人见解,仅供参考。
你这样理解,1、计算机暂停正在执行的程序去执行别的程序,2、你附上的程序,是定时器0的中断程序,你这样理解,定时器是单片机内部钟表,它的值为0~65535,相当于表转一圈,现在你可以想象,你家的表转一圈,你就去喝杯水,那么,单片机也是这样,当单片机定时器从0~65535走一圈的时候,它就执行一次,你给他的中断函数,也就是你写的这个,那么如果你把你家的表实现设定一个时间,那么你喝水的时间就不是表走十二个小时的时间了,可能是6个小时,定时器也是这个道理,这就是初值的意义,在中断函数中需要不断重复对TH0 ,TL0进行赋值就是为了总是给他设定一个时间初值,理解了吗?
这个我能理解,谢谢,就是定时之后,一段时间后就跳转到SPK=!SPK;这个步骤了吧
嗯是的,一段时间后就跳转到中断函数里的语句
