在EM78X56系列的IC中有三种中断信号,分別是:
TCC溢位中断。
PORT6 Change 中断。
外部信号中断。
在说明中断使用方式之前,用户要了解中断寄存器,及与中断息息相关的控制寄存器( Control Register),另外在芯片中預除器( Prescalar )的使用方法,用户也需要住意。
中断信号显示寄存器0X0F各位安排如下:
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
中断信号 - - - - - 外部中断标志 PORT6 Change TCC 溢位标志。
寄存器0X0F使用到的有BIT0 ~ BIT2。BIT0在TCC计時器计数溢位時就会被设定,用户可以根据0X0F的BIT0被设定而判定TCC计数溢位。跟TCC配合的还有另一个寄存器---控制寄存器(Control Register,简称CONT)。控制寄存器0X0F各位安排如下:
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
控制信号 - INT TS TE PAB PSR2 PSR1 PSR0
各位的代表意义如下:
□ PSR2 ~ PSR0:TCC/WDT 預除器设定。
PSR2 PSR1 PSR0 TCC 比例 WDT 比例
0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
FIGURE3.5 PS0 ~ PS2的设定值与預除器和TCC及WDT的比例关係。
Bit3預除器配置:
0:TCC
1:WDT
□ Bit4 TCC递增時机:
0:外部信号,触发边沿为正沿触发。
1:外部信号,触发边沿为負沿触发。
□ Bit5 TCC信号来源:
0:內部指令周期触发。
1:外部引脚(第三脚)触发。
□ Bit6 INT使能标志:
0:禁止所有中断产生。
1:使能中断信号。
□ Bit7 无使用。
三种中断产生都有其先前的设定值,接下来会以示例说明。
l 例:写一个程序,將寄存器0X20当做计数器,每当TCC中断产生,就自动加1。
MOV A, @0X0 ;设定 A = 0。
IOW 0X0E ;关闭Watch Dog。
ORG 6 ;设定接下来的程序位址。
CLR 0X20 ;清除寄存器0X20。
JMP TCC_PRO ;跳转到TCC_PRO。
INT_PRO: DISI ;关闭各項中断功能。
CLR 0X0F ;清除中断寄存器。
INC 0X20 ;计数器加1。
RETI ;返回主程序,並使能中断。
TCC_PRO: CLR 0X0F ;清除中断寄存器。
MOV A, @0X01 ;设定 A = 1。
IOW 0X0F ;使能TCC溢位中断产生。
MOV A, 0X40 ;设定 A = 0X40。
CONTW ;將A的值写入控制寄存器。
ENI ;使能中断。
TCC_WAIT: NOP ;等待TCC计数器计数溢位。
NOP ;等待TCC计数器计数溢位。
JMP TCC_WAIT ;等待TCC计数器计数溢位。
TCC中断产生有几个设计的重点:
1. 关闭看门狗计時器(Watch Dog Timer)。
2. 设定控制寄存器(包括預除器、TCC信号来源、触发時机…)。
3. 使能中断(下ENI指令)。
4. 使能TCC中断(设定中断控制寄存器的bit0为1)。
5. 中断服务位址为0X08。
6. 进入中断服务程序首先要將中断禁止,否则会产生重复中断。
7. 中断寄存器0X0F,在进入中断服务程序時可以提供用户判断为何种中断,判断完成之后用户必須自行清除。
8. 由中断服务程序返回主程序应使用指令RETI。
l 例:写一个程序,將寄存器0X20当做计数器,每当PORT6 Change中断产生,就自动加1。
PORT6 == 6 ;定义。
DISI ;中断禁止。
ORG 6 ;设定下一个位址为0X06。
CLR 0X20 ;清除计数寄存器。
JMP PORT6_CH ;跳转到主程序。
DISI
INT_PRO: ;0X08为中断服务程序起始。
NOP
CLR 0X0F ;清除中断标志寄存器。
INC 0X20 ;计数器遞增。
MOV PORT6, PORT6 ;將PORT6的值存入正反器。
RETI ;回主程序。
PORT6_CH:
CLR 0X0F ;清除中断标志寄存器。
MOV A, @0XFF ;设定 A = 0XFF。
IOW PORT6 ;將PORT6设成输入口。
MOV PORT6, PORT6 ;將PORT6的值存入正反器。
ENI ;使能中断。
MOV A, @0X02 ;设定 A = 0X02。
IOW 0X0F ;使能PORT6 Change中
WAIT_INT:
WDTC ;清除Watch Dog Timer。
NOP ;等待PORT6 Change。
NOP ;等待PORT6 Change。
JMP WAIT_INT ;循环。
使用PORT6 Change中断有下列几个步骤。
1. 关闭看门狗计時器(Watch Dog Timer),若看门狗计時器未关闭,用户要定時下WDTC的指令。
2. 清除中断寄存器。
3. 设定PORT6为输出口。
4. 將PORT6的值存入触发器中(这很重要)。
5. 使能中断(下ENI的指令)。
6. 使能PORT6 Change中断(设定中断控制寄存器的bit1为1)。
7. 中断服务程序的启始位址在0X08。
8. 进入中断服务程序首先要將中断禁止,否则会产生嵌套中断。
9. 中断寄存器0X0F,在进入中断服务程序時可以提供用户判断为何种中断,判断完成之后用户必須自行清除。
10. 由中断服务程序返回主程序应使用指令RETI。
l 例:写一个程序,將寄存器0X20当做计数器,每当外部中断产生,就自动加1。
所謂的外部中断就是利用IC外部引脚,針对 单片机 外部的信号做为信号源来产生中断。EM78系列的外部中断引脚是第4脚,是和PORT6位0合用,所以再使用前要先设定PORT6 , BIT0是要单純用做I/O引脚,或是中断输入引脚。
ORG 6 ;设定启始位址为0X06。
CLR 0X20 ;清除计数器。
JMP EXT_PRO ;跳转到主程序。
INT_EXT:
DISI ;中断禁止。
CLR 0X0F ;清除中断标志。
INC 0X20 ;递增计数寄存器。
RETI ;返回主程序。
EXT_PRO:
CLR 0X0F ;清除中断标志。
MOV A, @0X04 ;A = 0X04。
IOW 0X0F ;使能外部中断信号产生。
MOV A, @0X40 ;A = 0X40。
IOW 0X0E ;设定PORT6, BIT0为中断输入脚
ENI ;返回主程序。
EXT_WAIT:
NOP ;等待外部中断输入。
NOP ;等待外部中断输入。
JMP EX_WAIT ;循环。
外部中断显然比較容易了解。所需注意的項目有:
1. 禁止中断。
2. 设定中断服务程序的地址在0X08。
3. 清除中断标志寄存器。
4. 使能外部中断信号产生(设定中断控制寄存器为0X04)。
5. 將PORT6, BIT0设定成外部中断引脚(设定控制寄存器0X0E, BIT6为1)。
6. 使能中断信号(ENI)。
7. 用户在进入中断服务程序(0X08)時,首先要記得禁止中断(DISI)。
8. 可以由中断标志寄存器判断中段的信号为何产生,判断完之后应自行清除中断标志。
9. 返回主程序時用指令RETI。
以上三支中断程序的写法都是利用无穷循环,所以用户想要看到結果只有結束程序,然后查看计数寄存器(0X20)的计数状況。
上一篇:EM78系列单片机--延迟子程序的编写
下一篇:EM78系列单片机--查表程序设计
推荐阅读最新更新时间:2024-03-16 15:53
- 热门资源推荐
- 热门放大器推荐