发布网友 发布时间:4小时前
共1个回答
热心网友 时间:2024-11-29 07:43
时钟中断的设置和使用示例
为了实现定时功能,定时器T0的工作方式选择为16位定时器方式1,每经过一个机器周期自动加1。为了在20毫秒(50Hz)后产生中断,初值应设置为小于满值0FFFFh的数,具体计算为:时钟频率为6MHz,一个机器周期为12个时钟周期,20mS即10000个机器周期,所以初值为0FFFFh减去(2710)16再加上1,即0D8F7h。考虑到中断处理需要7到8个机器周期,实际的T0初值应设置为0D8F7h加7,即0D904h。
在中断程序中,可以利用内部RAM的某个单元,如INCPI,每次中断后加1。通过这个单元,可以生成1到256之间以20mS为单位的任意整数倍信号,例如用于定时显示或键盘输入处理。例如,若需要每0.5秒刷新数码管,可以设置一个等待单元W_DISP,检查其值与INCPI的值,当两者相等时执行显示程序,然后更新等待单元。
在主程序中,读取键盘通常会有些不足,如可能漏键和效率低。将读键操作移至时钟中断可避免这些问题,通过在中断中检测键盘状态并存储到缓冲区,主程序在处理按键的同时仍可响应新的输入。另外,主程序中的短延时可以通过关闭时钟中断,而在长延时和低精度需求时则可使用循环延时结构。
以MCS-51为例,中断响应过程涉及检查中断标记和中断优先级,只有在满足特定条件时(如无正在进行的高级别中断、指令执行完毕等)CPU才会响应中断。中断响应后,CPU会保存当前指令地址,跳转到对应的中断入口继续执行。中断向量地址空间紧凑,通过LJMP指令可以灵活安排中断程序。每个中断程序完成后,务必执行RETI指令返回主程序。
在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。可以把一些例行的及需要定时执行的程序放在时钟中断中,还可以利用时钟中断协助主程序完成定时、延时等操作。