C51单片机时钟中断及主要问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C51单片机时钟中断及主要问题
一. 中断一般概念
51单片机一共设有5个中断源. 引起CPU中断根源, 成为中断源. 中断嵌套, 也即单片机在处理一个中断时又发生了一个中断, 单片机中断当前中断程序, 转而去处理新的中断程序. 中断优先级, 通过中断优先级寄存器设置.
1. 中断源及其默认优先级
52单片机共有6个中断源, 如下:
符号名称产生条件
INT0 外部中断0 由P3.2端口线引入, 低电平或下降沿引起
INT1 外部中断1 由P3.3端口线引入, 低电平或下降沿引起
T0 定时器/计数器0 由T0计数器计满回零引起
T1 定时器/计数器1 由T1计数器计满回零引起
T2 定时器/计数器2 由T2计数器计满回零引起
TI/RI 串行口中断串行端口完成一帧字符发送/接受后引起
其中, T2是52单片机独有的.
其默认中断优先级别如下:
中断源默认优先级别序号(C语言用) 入口地址(汇编)
INT0 最高0 0003H
T0 第2 1 000BH
INT1 第3 2 0013H
T1 第4 3 001BH
TI/RI 第5 4 0023H
T2 最低 5 002BH
2.中断控制中的特殊功能寄存器SFR
(1). 中断允许寄存器IE(Interrupt Enable)
位序号位符号位地址说明
D7(高位) EA 0xAF 全局中断允许位
D6 -- -- 无效位
D5 ET2 0xAD Timer2中断允许位
D4 ES 0xAC 串行口中断允许位
D3 ET1 0xAB Timer1中断允许位
D2 EX1 0xAA 外部中断1中断允许位
D1 ET0 0xA9 Timer0中断允许位
D0(低位) EX0 0xA8 外部中断0中断允许位
备注对于上述所有中断允许位:
1: 打开该中断
0: 关闭该中断
(2). 中断优先级寄存器IP(Interrupt Priority)
位序号位符号位地址说明
D7(高位) -- -- 无效位
D6 -- -- 无效位
D5 -- -- 无效位
D4 PS 0xBC 串行口中断优先级控制位
D3 PT1 0xBB Timer1中断优先级控制位
D2 PX1 0xBA 外部中断1中断优先级控制位
D1 PT0 0xB9 Timer0中断优先级控制位
D0(低位) PX0 0xB8 外部中断0中断优先级控制位
备注对于上述所有中断优先级控制位:
1: 设置对应的中断为高优先级
0: 设置对应的中断为低优先级
二. 单片机的定时器中断
定时器/计数器实质是一个16位的加1计数器, 由高8位(THx)和低8位(TLx)两个寄存器组成. TMOD是定时器/计数器的工作方式寄存器, 确定工作方式和功能; TCON是控制寄存器, 控制T0, T1的启动和停止及设置溢出标志.
1. 定时器/计数器工作方式寄存器TMOD
定时器/计数器工作方式寄存器在特殊功能寄存器中, 字节地址为0x89, 不能位寻址, TMOD 用来确定定时器的工作方式及功能选择. 单片机复位时TMOD全部被清0. 各位的含义如下:
位序号控制位符号说明
D7(高位) Timer1 GA TE 门控制位. 0表示Timer启动与停止仅受TCON寄存
器TRx(x=0, 1)控制
1表示Timer启动与停止由TCON寄存器中TRx(x=0,
1)和外部中断引脚(INT0或INT1)上的电平状态共同
控制
D6 C/T___定时器和计数器模式选择位, 0:定时器, 1:计数器
D5 M1 工作方式选择位. 见下表.
D4 M0
D3 Timer0 GA TE
D2 C/T___
D1 M1
D0(低位) M0
备注
M1 M0 工作方式
0 0 方式0, 为13位定时器/计数器
0 1 方式1, 为16位定时器/计数器
1 0 方式2, 8位初值自动重装的8位定时器/计数器
1 1 方式3, 仅适用于T0, 分成两个8位计数器, T1停止计数
2. 定时器/计数器控制寄存器TCON
位序号位符号位地址说明
D7(高位) TF1 0x8F Timer1溢出标志位. 计满溢出后, 由硬件使TF1置1,
并且申请中断. 进入中断处理程序后, 由硬件自动清
0. 注意: 使用定时器中断, 该位不需要人为操作, 但
如果使用软件查询方式的话, 必须使用软件清0.
D6 TR1 0x8E Timer1运行控制位. 由软件清0关闭定时器 1. 当
GA TE=1, 且INT1为高电平是, TR1置1启动定时器
1; 当GA TE=0时, TR1置1启动定时器1.
D5 TF0 0x8D Timer0溢出标志位. 其它同TF1.
D4 TR0 0x8C Timer0运行控制位. 其它同TR1.
D3 IE1 0x8B 外部中断1请求标志
D2 IT1 0x8A 外部中断1触发方式选择位
D1 IE0 0x89 外部中断0请求标志
D0(低位) IT0 0x88 外部中断0触发方式选择位
备注
三、中断服务程序的C语言写法
1、中断响应条件
●中断源有中断请求;
●此中断源的中断允许位为1;
●CPU 开中断(即EA=1)。
以上三条同时满足时,CPU 才有可能响应中断
2、2、C51的中断函数格式如下:
void func_name() interrupt 中断号[using 工作组]
{
//中断服务程序内容
}
●中断号: 指单片机中几个中断源的序号. 是编译器识别不同中断的唯一符号.
5个中断源排序:
0代表外部中断0中断;
1代表定时器/计数器0中断;
2代表外部中断1中断;
3代表定时器/计数器1中断;
4代表串口中断。
●工作组: 可选部分. 指这个中断函数使用单片机内存中4组工作寄存器中的哪一组, C51
编译器在编译时会自动分配工作组, 故通常省略.
3、3、P3.2 口的外部中断
EA=1; //开总中断
EX0=1; //开外部中断0
//IT0=1; 当IT=1 时位跳变沿外部中断触发方式
//当IT=0 时为电平的外部中断触发方式
TCON=0x01; 这是对寄存器将IT 置1,和IT0=1 的效果是一样的。
因为TCON 的地址是可以被8 整除,所以可以对其进行位操作4、4、定时/计数器应用举例
初始化程序应完成如下工作: