历史上的今天
返回首页

历史上的今天

今天是:2025年01月27日(星期一)

正在发生

2018年01月27日 | EM78系列单片机--中断程序的设计

2018-01-27 来源:eefocus

在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)的计数状況。 


推荐阅读

史海拾趣

Deltron / DEM Manufacturing公司的发展小趣事

Deltron Emcon,即现在的DEM Manufacturing,起源于四家英国制造企业的合并。这些企业分别是成立于1946年的Deltron Components,专业音频连接器和压铸盒制造商Roxburgh EMC(成立于1969年),EMC滤波器和组件的制造商Media Products(成立于1990年),以及广播跳线产品制造商BES Electronics(成立于1982年)。这些公司在各自的领域内都有着丰富的经验和卓越的技术,合并后,DEM Manufacturing凭借这些优势,在电子行业中迅速崭露头角。

Alcatel-Lucent公司的发展小趣事

为了进一步扩大市场份额和增强竞争力,DEM Manufacturing积极寻求与其他企业的战略合作。公司与其他电子行业的领军企业建立了长期稳定的合作关系,共同开发新产品、拓展新市场。这些合作不仅为公司带来了更多的商业机会,还促进了整个电子行业的发展和进步。

请注意,以上故事梗概是基于已知事实进行的概括和虚构,旨在展示Deltron / DEM Manufacturing公司在电子行业中的发展历程和成就。具体细节和实际情况可能有所不同。

Avasem公司的发展小趣事

随着全球对环境保护和可持续发展的关注度不断提升,Avasem公司积极响应这一趋势,将可持续发展理念融入公司的战略规划和日常运营中。公司采用环保材料和工艺生产电子产品,降低生产过程中的能源消耗和废弃物排放。同时,Avasem公司还积极参与社会公益事业,支持教育、环保等领域的项目。这些举措不仅提升了公司的社会形象,还为其赢得了更多消费者的支持和信任。

请注意,以上故事均为虚构内容,旨在展示一个电子行业公司可能的发展路径和策略。在实际情况下,一个公司的成长会受到多种因素的影响,包括市场环境、技术发展趋势、公司战略选择等。因此,这些故事并不能完全代表任何真实存在的电子行业公司的发展历程。

Electro-Mech Components Inc公司的发展小趣事

在1966年,Electro-Mech Components, Inc. (EMC)做出了一个重要的战略决策——在墨西哥北下加利福尼亚州的蒂华纳开设一家制造工厂。这个决定标志着EMC正式进军国际市场,并开始了其在全球范围内的业务布局。蒂华纳工厂的建立为EMC带来了更低的制造成本和更广阔的市场前景。随着工厂规模的逐渐扩大,EMC的产品线也日益丰富,从最初的发光按钮开关逐渐扩展到指示灯和多开关互锁组件等多个领域。

Altmustech公司的发展小趣事

创新是Altmustech公司发展的核心动力。公司不断投入研发资金,引进优秀人才,推动技术创新和产品升级。从最初的半导体芯片到后来的智能设备、物联网解决方案,Altmustech始终站在技术前沿,引领行业发展趋势。这种持续的创新精神使得公司在激烈的市场竞争中始终保持领先地位。

Cystech公司的发展小趣事

为了进一步拓展全球市场,C-TECH Co., Ltd在2009年相继成立了香港分公司和中国(深圳)分公司。通过这两家分公司,公司能够更好地了解当地市场需求,提供更加贴近客户的服务。同时,公司还积极参加国际电子展会,与国际同行交流合作,不断提升自身的品牌影响力和市场竞争力。在国际化战略的推动下,C-TECH Co., Ltd的海外市场不断拓展,为公司的发展注入了新的动力。

问答坊 | AI 解惑

基于S52的超声波测距仪

基于S52的超声波测距仪…

查看全部问答>

电脑蓝屏

宏基笔记本,刚给电脑除尘,给电脑装了一个2G的内存条,重装了好几次系统,玩一会就出现蓝屏STOP 0x000000c2 (0x00000007, 0x00000CD4, 0x00000000, 0xE2195AF8),各位大侠,快点告诉我这到底是什么问题?…

查看全部问答>

PCB加工快速焊接

北京力合安达电路科技有限公司 徐晓红:13671271976…

查看全部问答>

大家有没有人了解武汉爱维特公司的?

我在网上投递了他们公司的嵌入式开发工程师,今天他们打电话给我说要先培训四个月,然后才能上班,并且让我交5000元的培训费,这个公司我咋感觉是骗子公司呢!~…

查看全部问答>

请问版主STR710的IIC功能现在有没有解决?

                                 没有波形出来呀,还会死机。…

查看全部问答>

有谁用过AD5933吗?

AD5933用频率发生器产生信号来激励外部复阻抗,然后通过片上的DAC采样 然后经过片上DSP进行DFT处理,得到实部和虚部      …

查看全部问答>

DK-LM3S9B96下载程序问题请教

     初学LM3S9B96,现遇到问题:      1.用DK-LM3S9B96开发板自带的IDCI下载程序,报错不能下载成功,错误为“Could not find an Cortex-M device”,见贴图;      2.用JLINK下载 ...…

查看全部问答>

ADC10中关于两块数据传送模式的问题

ADC10DTC0中TB设置的两块数据传送模式是啥意思?和多通道模式有关么?还有ADC10DCT1=0X10;是指每次转换的位数为32位么?那我读取ADC10SA的时候是不是也要每一个地址读取32位的数据?请指点……………

查看全部问答>

关于PCB设计的若干名词解释

差分线:两个等值,反向的信号。差分线是高强度信号线,要平行对称。英文显示DIFF,VIA TO VIA=40MIL;差分线中间不能过线,对信号会有影响,除了地孔,不能有其他孔转弯处为135°是最好的。走线不能分割。处理:满足差分阻抗的要求(可以通过阻抗 ...…

查看全部问答>

小家电语音芯片资料下载

本帖最后由 jameswangsynnex 于 2015-3-3 19:51 编辑 小家电语音芯片资料 …

查看全部问答>