一、HC18M003的中断源
HC18M003的中断源有以下几种:
➢ Timer0定时器中断
➢ INT0外部中断
➢ PORTB口电平变化中断
➢ Timer1定时器中断
➢ Timer2定时器中断
➢ AD中断
➢ UART中断
➢ PWM中断
➢ IIC中断
➢ CTK中断
➢ EEPROM
➢ WDT
1、中断触发的条件
中断效触发 | 触发条件 |
T0IF | T0计数器溢出 |
INTF | 由INTEDG控制 |
RBIF | PORTB电平变化 |
T1IF | T1计数器溢出 |
T2IF | T2发生匹配 |
ADIF | AD数据采集完成 |
RXIF/TXIF | UART发生发送接收事件 |
IICIF | IIC发生发送接收事件 |
PWM0IF | PWM0周期计数溢出中断 |
CTKIF | CTK转换完成中断 |
WDTIF | WDT中断溢出标志位 |
EEPIF | EEPROM擦写完成标志位 |
2、中断的许可和禁止设置
2.1使用INTCON寄存器控制是否允许中断
2.2 设置INT0中断的脉冲沿触发方式
由OPTION寄存器设置
2.3 中断使能寄存器PIE1
2.4 中断使能寄存器PIE2
2.5 PB端口电平变化中断使能寄存器
2.6中断标志寄存器PIR1
2.7 中断标志寄存器PIR2
在51单片机系统中,每个中断都有自己固定的中断程序入口地址。而在单片机HC18M003中,所有中断使用一个共同的中断入口地址,固定为0004H。既然只有一个入口,那么当中断发生时,我们就需要通过和中断标志有关的控制寄存器以及中断寄存器标志位来判断到底是哪个中断发生了。如果在同一时刻,系统中出现了多个中断请求。那么用户需要自己根据系统的要求来对中断处理进行优先级的调整。这一点也和51单片机系统有区别。
二、中断现场的保护和恢复
中断服务程序开始执行时,需保存W寄存器、STATUS寄存器、PCLATH寄存器的内容;结束中断服务程序时,恢复PCLATH寄存器、STATUS寄存器、W寄存器的数值,注意顺序。
注意:在退出中断时,由于需要先恢复STATUS,再使用 MOVF 指令恢复W,可能会改变STATUS,因此必须使用 SWAPF 指令恢复 W。注意在中断中共有两句 SWAPF 指令。
// 执行中断处理程序之前,保护现场 // 保存 W MOVWF W_TEMP ; // W寄存器数据保存到临时变量W_TEMP中 // 保存 STATUS。 SWAPF STATUS,W // STATUS数据转存到W中 MOVWF STATUS_TEMP ; // W寄存器数据保存到临时变量STATUS_TEMP中 // 保存 PCLATH MOVF PCLATH, W // PCLATH数据转存到W中 MOVWF PCLATH_TEMP ; // W寄存器数据保存到临时变量PCLATH_TEM中 // 清除状态寄存器内容,防止干扰后续操作 CLRF STATUS ; ... // 回复中断发生前的现场(和入栈时的顺序正好相反) MOVF PCLATH_TEM ,W // 取出之前的现场PCLATH数据到W MOVWF PCLATH ; // 恢复到PCLATH中。 SWAPF STATUS_TEMP,W // 取出之前的现场STATUS数据到W MOVWF STATUS ; // 恢复到STATUS。 SWAPF W_TEMP,F // 取出之前的现场STATUS数据到F SWAPF W_TEMP,W ; // 恢复W(F->W)。 RETFIE ;退出中断。
在现场的保存和恢复上,比51单片机还是要麻烦一些哈。另外一点要切记,为避免误进中断,在使能中断和退出中断服务程序之前,必须清除中断标志位。