EM78系列单片机--中断程序的设计
扫描二维码
随时随地手机看文章
在EM78X56系列的IC中有三种中断信号,分別是:
TCC溢位中断。
PORT6Change中断。
外部信号中断。
在说明中断使用方式之前,用户要了解中断寄存器,及与中断息息相关的控制寄存器(ControlRegister),另外在芯片中預除器(Prescalar)的使用方法,用户也需要住意。
中断信号显示寄存器0X0F各位安排如下:
BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0
中断信号-----外部中断标志PORT6ChangeTCC溢位标志。
寄存器0X0F使用到的有BIT0~BIT2。BIT0在TCC计時器计数溢位時就会被设定,用户可以根据0X0F的BIT0被设定而判定TCC计数溢位。跟TCC配合的还有另一个寄存器---控制寄存器(ControlRegister,简称CONT)。控制寄存器0X0F各位安排如下:
BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0
控制信号-INTTSTEPABPSR2PSR1PSR0
各位的代表意义如下:
□PSR2~PSR0:TCC/WDT預除器设定。
PSR2PSR1PSR0TCC比例WDT比例
0001:21:1
0011:41:2
0101:81:4
0111:161:8
1001:321:16
1011:641:32
1101:1281:64
1111:2561:128
FIGURE3.5PS0~PS2的设定值与預除器和TCC及WDT的比例关係。
Bit3預除器配置:
0:TCC
1:WDT
□Bit4TCC递增時机:
0:外部信号,触发边沿为正沿触发。
1:外部信号,触发边沿为負沿触发。
□Bit5TCC信号来源:
0:內部指令周期触发。
1:外部引脚(第三脚)触发。
□Bit6INT使能标志:
0:禁止所有中断产生。
1:使能中断信号。
□Bit7无使用。
三种中断产生都有其先前的设定值,接下来会以示例说明。
l例:写一个程序,將寄存器0X20当做计数器,每当TCC中断产生,就自动加1。
MOV A,@0X0;设定A=0。
IOW0X0E;关闭WatchDog。
ORG6;设定接下来的程序位址。
CLR0X20;清除寄存器0X20。
JMPTCC_PRO;跳转到TCC-_PRO。
INT_PRO:DISI;关闭各項中断功能。
CLR0X0F;清除中断寄存器。
INC0X20;计数器加1。
RETI;返回主程序,並使能中断。
TCC_PRO:CLR0X0F;清除中断寄存器。
MOV A,@0X01;设定A=1。
IOW0X0F;使能TCC溢位中断产生。
MOV A,0X40;设定A=0X40。
CONTW;將A的值写入控制寄存器。
ENI;使能中断。
TCC_WAIT:NOP;等待TCC计数器计数溢位。
NOP;等待TCC计数器计数溢位。
JMPTCC_WAIT;等待TCC计数器计数溢位。
TCC中断产生有几个设计的重点:
1.关闭看门狗计時器(WatchDogTimer)。
2.设定控制寄存器(包括預除器、TCC信号来源、触发時机…)。
3.使能中断(下ENI指令)。
4.使能TCC中断(设定中断控制寄存器的bit0为1)。
5.中断服务位址为0X08。
6.进入中断服务程序首先要將中断禁止,否则会产生重复中断。
7.中断寄存器0X0F,在进入中断服务程序時可以提供用户判断为何种中断,判断完成之后用户必須自行清除。
8.由中断服务程序返回主程序应使用指令RETI。
l例:写一个程序,將寄存器0X20当做计数器,每当PORT6Change中断产生,就自动加1。
PORT6==6;定义。
DISI;中断禁止。
ORG6;设定下一个位址为0X06。
CLR0X20;清除计数寄存器。
JMPPORT6_CH;跳转到主程序。
DISI
INT_PRO:;0X08为中断服务程序起始。
NOP
CLR0X0F;清除中断标志寄存器。
INC0X20;计数器遞增。
MOV PORT6,PORT6;將PORT6的值存入正反器。
RETI;回主程序。
PORT6_CH:
CLR0X0F;清除中断标志寄存器。
MOV A,@0XFF;设定A=0XFF。
IOWPORT6;將PORT6设成输入口。
MOV PORT6,PORT6;將PORT6的值存入正反器。
ENI;使能中断。
MOV A,@0X02;设定A=0X02。
IOW0X0F;使能PORT6Change中
WAIT_INT:
WDTC;清除WatchDogTimer。
NOP;等待PORT6Change。
NOP;等待PORT6Change。
JMPWAIT_INT;循环。
使用PORT6Change中断有下列几个步骤。
1.关闭看门狗计時器(WatchDogTimer),若看门狗计時器未关闭,用户要定時下WDTC的指令。
2.清除中断寄存器。
3.设定PORT6为输出口。
4.將PORT6的值存入触发器中(这很重要)。
5.使能中断(下ENI的指令)。
6.使能PORT6Change中断(设定中断控制寄存器的bit1为1)。
7.中断服务程序的启始位址在0X08。
8.进入中断服务程序首先要將中断禁止,否则会产生嵌套中断。
9.中断寄存器0X0F,在进入中断服务程序時可以提供用户判断为何种中断,判断完成之后用户必須自行清除。
10.由中断服务程序返回主程序应使用指令RETI。
l例:写一个程序,將寄存器0X20当做计数器,每当外部中断产生,就自动加1。
所謂的外部中断就是利用IC外部引脚,針对单片机外部的信号做为信号源来产生中断。