您的位置:首页单片机义隆单片机
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

EM78系列单片机--中断程序的设计

[日期:2008-07-01 ] [来源:东哥单片机学习网 www.picavr.com 整理 作者:佚名] [字体: (投递新闻)
在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)的计数状況。
阅读:
录入:JETTA

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
赞助商广告