天天看点

关于郭天祥单片机书上第68页中断剖析

关于郭天祥单片机书上第68页中断剖析

书上讲述的中断思路有些复杂,及整理了一份思维导图。希望以最少的语言表达出最清晰的意思。

优先级概念及应用--中断的嵌套发生处理及响应:

中断实现流程:

第一步——优先级设置

第二步——工作方式设置

中断工作方式设置分三种:定时器,外部中断,串行口

总览图:

2.1定时器的工作方式设置:

2.2外部中断工作方式设置

第三步——响应中断

看完流程,我们就可以实际操作,实际操作之中有些小细节性的东西又能让我更全面的理解中断。

首先看一下定时器定时长度计算

51单片机采用向上计数法,即你给一个初值,定时器从这个初值向上加,一直加满溢出。【12MHz情况下】

方式0:13位,则最大值为8192【8.192ms】

方式1:16位,则最大值为65536【65.536ms】

方式2: 8位,则最大值为256【0.256ms】

方式3: 8位,则最大值为256【0.256ms】

初值计算:

方式x下最大值为max,要定时长度为t,机器周期Tcy=12/晶振频率;

初值大小为 val = max - t/机器周期。

THx = val / 256;

TLx = val%256。

TMOD寄存器设置【定时器/计数器专用】

高四位设置定时器1

第四位设置定时器0

不能位寻址是说明这个字节地址不能进行特殊功能位单独声明,每次使用是8位一起使用。

TCON寄存器设置

TCON设置为为定时器设置和外部中断设置

下图为使用定时器时的TCON设置

下图是使用外部中断时的TCON设置

寄存器设置完之后就可以写中断服务程序了

示例:

在中断服务函数中必须做两件事:

1.重装初值[方式2除外]

2.中断处理[确保准确的情况下,将能写在中断外的处理语句就写在中断外。]

第78页一段绕口的话逐句解读

1:若将判断时间是否到达的语句写在的主程序中

2:当主程序运行到数码管显示语句当中时,此时恰好定时器0进入中断并且num1刚好加到4,当定时器再次进入时,主程序仍未退出数码管显示语句,那么此时num1的值便成了5.

在这个过程中主程序一直在display(shi, ge)中显示,而中断发生了两次仍未退出这个显示函数,导致第一次进入中断函数使num1为4,主函数还在display中,没有判断num1==4并将num1清零。结果中断再次发生,num1的值变为了5。结果你懂的。。。。。。。还是老郭那句话:写程序搞研究一定要严格,绝对不能抱有侥幸的心理!!!

继续阅读