搜档网
当前位置:搜档网 › 串行中断寄存器控制

串行中断寄存器控制

串行通信中断及应用串行接口电路

1中断允许控制寄存器IE

只开启串行通信 SETB EA SETB ES

或者 MOV IE ,#90H

2设置串行中断优先级(控制寄存器IP 、IPH )

中断源的中断优先级由IPH 、IP 对应位编码决定IPH.X 位 IP.X 位

优先级

0 0 0级(优先级最低) 0 1 1级 1 0 2级

1

1

3级(优先级最高)

例如串行中断优先级最高 MOV IP ,#0C0H MOV IPE ,#0C0H 或者 SETB PS

MOV IPE ,#0C0H

BDH BCH BBH BAH B9H B8H

IP

定时/计数器位地址字节地址B8H 复

位后初值为:XX000000B

(a)

AFH AEH AD H ACH ABH AA H A9H A8H 字节地址A8H

位地址IE

中断允定

(IPH 没有位地址功能)

3 入口地址

定时/计数器T1溢出中断 001BH 串行口中断 0023H

ORG 00H AJMP ??? ORG 1BH AJMP ??? ORG 23H AJMP ???

串行口控制寄存器SCON

5 进入中断服务程序后,

(1)CPU 能自动清除下列中断请求标志位:

定时器T0中断请求标志TF0;

定时器T1中断请求标志TF1; 边沿触发方式下外中断的中断请求

标志IE0;

字节地址B7H 复位后初值为:XX000000B

IP H 定时/计数器(b)

边沿触发方式下外中断的中断请求标志IE1。 不自动清除 串行发送结束中断标志TI 、 串行接收有效中断标志RI 、

定时/计数器T2 溢出中断标志TF2、 定时/计数器T2外触发标志EXF2(2)每一次发送和接受后都要软件清零 :串行发送结束中断标志TI 、

串行接收有效中断标志RI 、 如 CLR TI

CLR RI

可用T1,T2溢出率的(16或)32分频作为串行口发送、接收波特率

9电源控制寄存器 PCON (电源控制寄存器PCON 不能对位操作)

为了避免重装初值造成的定时误差,定时器T1最好工作在可自动重装初值的方式2,并禁止定时器T1中断。 TL1=?、TH1=

TL1=?做TL1的备份(自动重装初值,TH1和TL1初装相同的值)

串行通信系统中常用波特率衡量通信的快慢,含义是每秒中传送的二进制数码的位数,单位是位/秒(b/s 或Kb/s),

方式1、方式3计算公式

1

1

2

3212321SMOD SMOD T T ?==溢出率溢出率波特率

串行方式1

串行方式3起始位(0)、9位串行数据、一位停止位(1)共11位

例假设系统晶振频率为11.0592 MHz,通信方式约定为:波特率2400,8位数据,奇校验。利用串行口方式3,将存放在内部RAM 30H~4FH单元中32字节数据发送给串行接收设备。如果接收方正确接收了32字节信息,则回送AAH;否则回送55H。

根据系统晶振频率及通信波特率,用定时器T1工作在方式2的溢出率作为波特率发生器(16分频器)的输入信号,参考程序如下:

; 初始化定时器T1

FHbit BIT 07H ; 07H位单元作为通信成功标志,0表示通信成功;1表示失败

MOV A, TMOD

ANL A, #0FH

ORL A, #00100000B ; 定时器T1工作在方式2(即自动重装初值),定时状态,由TR1控制MOV TMOD, A

MOV TL1, #0F4H

MOV TH1, #0F4H ; 波特率为2400

CLR ET1 ; T1用作波特率发生器,禁止T1中断

SETB TR1 ; 启动定时器T1 ; 初始化串行通信口

MOV SCON, #11000000B ; 方式3,SM2位为0,以便接收奇偶校验位

MOV PCON, #00H ; 波特率不倍增; 将30~4FH缓冲区内32字节发送给接收方

CLR FHbit ; 成功标志清零

MOV R0, #30H ;发送数据缓冲区首地址送R0

MOV R7, #20H ;发送字节数送R7

CLR TI ; 清除TILOOP1:

MOV A, @R0 ; 取发送数据

MOV C, PSW.0 ;取奇偶标志

MOV TB8, C ;奇偶标志送TB8

MOV SBUF, A ; 数据送SBUF寄存器,启动发送过程

LOOP2:

JNB TI, LOOP2 ; 如果TI不是1就循环,等待发送中断标志有效

CLR TI ; 清除TI,以便发送下一字节

INC R0 ; 数据指针加1,指向缓冲区内下一数据

DJNZ R7, LOOP1 ; 指定字节数据未发送结束,循环; 发送结束,准备接收返回码

CLR RI ; 清除接收中断标志

SETB REN ; 允许接收

LOOP3:

JNB RI, LOOP3 ; 等待接收中断有效

CLR REN ; 停止接收

MOV A, SBUF ; 把结果送A

XRL A, #0AAH ; 返回码与AAH异或

JZ REEND ; 如果返回码是AAH,则退出

SETB FHbit ; 如果返回码不是AA,则将接收成,功标志为1(即失败)

REEND:

RET当串行通信的波特率较高时,多采用查询方式来确定一帧信息是否发送结束,如本例所示。对于接收过程来说,如果不能确定发送方是否会发送信息以及什么时候发送时,最好使用中断方式。为此,上例发送、接收程序段改为(发送过程采用查询方式;接收过程采

用中断方式; 初始化定时器T1

FHbit BIT 07H ; 07H位单元作为通信成功标志,0表示通信成功;1表示失败。

MOV A, TMOD

ANL A, #0FH

ORL A, #00100000B ;定时器T1工作在方式2(即自动重装初值),定时状态,由TR1控制

MOV TMOD, A

MOV TL1, #0F4H

MOV TH1, #0F4H ; 波特率为2400

CLR ET1 ; T1用作波特率发生器,禁止T1中断

SETB TR1 ; 启动定时器T1;初始化串行通信口

MOV SCON, #11000000B ; 方式3,SM2位为0,以便接收奇偶校验位

MOV PCON, #00H ; 波特率不倍增; 将30~4FH缓冲区内32字节发送给接收方CLR FHbit ; 成功标志清零

MOV R0, #30H ; 发送数据缓冲区首地址送R0

MOV R7, #20H ; 发送字节数送R7

CLR ES ; 禁止串行中断,即在发送过程中,采用查询方式

CLR TI ; 清除TI

LOOP1:

MOV A, @R0 ; 取发送数据

MOV C, PSW.0 ; 取奇偶标志

MOV TB8, C ; 奇偶标志送TB8

MOV SBUF, A ; 数据送SBUF寄存器,启动发送过程

LOOP2:

JNB TI, LOOP2 ; 如果TI不是1就循环,等待发送中断标志有效

CLR TI ; 清除TI,以便发送下一字节

INC R0 ; 数据指针加1,指向缓冲区内下一数据

DJNZ R7, LOOP1 ; 指定字节数据未发送结束,循环; 发送结束,准备接收返回码CLR RI ; 清除接收中断标志

SETB REN ; 允许接收

SETB ES ; 允许串行中断,即在接收过程中采用中断方式

RET ; 返回

; 串行口中断服务程序

UART:

PUSH Acc ; 保护累加器Acc

PUSH PSW

MOV A, SBUF ; 把结果送A

XRL A, #0AAH ; 返回码与AAH异或

JZ REEND ; 如果返回码是AAH,则退出

SETB FHbit ; 如果返回码不是AA,则将接收成功标志为1(即失败) REEND:

CLR REN ; 停止接收

CLR RI ; 清除接收中断标志

POP PSW

POP Acc

RETI

多机通信

主机与特定从机的通信过程如下:

(1) 主机发送从机地址(TB8

位为1),然后进入接收状态,接收从

机应答信号(实际上就是相应从机的

地址信息)。

(2) 所有从机均接收主机送出

的地址信息,并与本机地址比较,当接收到的地址信息与本机地址相符时,表示被选中,将本机地址信息发给主机,然后执行“CLR SM2”指令,使SM2位为0,以便接收主机随后送出的数据信息。对于未被选中的从机,SM2位依然为1,因此不接收主机送出的数据信息。

(3) 主机收到从机的应答信号后,发出数据信息(TB8位为0)。

(4) 从机正确接收主机数据信息后,发应答信号给主机,并将SM2置1,主机与从机通信过程结束。从机与主机的通信过程如下:

(1) 发送前从机先检测TXD引脚,如果在(20/波特率)时间内,TXD引脚依然为高电平,则表明没有其他从机给主机发送信息,主机的RXD引脚处于空闲状态。

(2) 从机确认主机的RXD引脚处于空闲状态后,发出地址信息(TB8位为1) 到主机。

(3) 从机收到主机的应答信号(实际是从机地址信息)后,发送数据(TB8位为0)给主机,然后令从机的SM2为0,以便接收主机发送的接收正确信号。

(4) 主机正确接收后,再发接收正确信号给从机。

(5) 从机收到主机发来的“接收正确”信号后,表明通信过程结束——可将SM2位置1,以便从机能接收主机发送的地址信息。

帧错误检测

增强型UART口通过检测“停止位”的有无来判别方式2、3下的串行接收是否正确,这就是所谓的“帧错误检测”功能。在增强型UART口中,SCON寄存器的b7位具有

SM0/FE(Fram Error)双重功能(由PCON寄存器的b6,即SMOD0位控制:当SMOD0位为0时,SCON寄存器的b7位是SM0;而当SMOD0位为1时,SCON寄存器的b7位是FE)。当接收不到有效停止位时,SCON寄存器的b7位(即FE)置1。当FE为1时,表示接收的数

据无效,不装入SBUF 寄存器,RI 也不置1。

帧错误检测仅对方式2、3有效,原因是方式0不能用于串行通信,而方式1本身就具有停止位检测功能,只是没有记录检测结果而已,因为在方式1中,只有接收到有效的停止位时,RI 才有效启用帧错误检测功能的串行口初始化过程如下:

初始化定时器T1或T2,定义串行口接收波特率→初始化SCON 寄存器,定义串行口工作方式(只能是2或3)→执行“ORL PCON, #40H”指令将PCON.6位置1,使SCON.7位具有FE 功能→执行“CLR RI”指令,清除接收中断→执行“SETB REN”启动接收过程→检测FE 标志(如果FE 标志有效,则说明收不到有效停止位,数据出错;反之,如果FE 无效,而RI 有效,则说明数据接收正确)。

值得注意的是,FE 有效后,即使下一数据帧能正确接收也不自动清除,因此FE 有效,在完成错误信号处理后需要手工清除。 地址自动识别

在方式2、3中,SM2位可作多机通信控制位。当SM2位为1时,只有收到的第九位数据,即RB8为1时,RI 才有效;而当SM2位为0时,便放弃对地址的识别,一律视为数据处理。采用硬件地址自动识别技术后,只要从机的SM2位为1,则收到的第一帧信息必然是本机的地址信息,可立即将从机的SM2位置0,接收主机随后送来的数据信息,无须判别所收到的地址信息是否就是本机地址,待数据接收结束后,便立刻将SM2位置1,等待下一次通信,于是提高了主从机之间的通信效率。

从图4-26中看出,采用地址自动识别功能后,有效接收条件是:主机发出的地址与从地址屏蔽码SADEN 按位相与后和从机地址寄存器SADDR 比较,若相同,则相应从机接收中断有效。 这样主机通过发出特定从机地址与单一从机通信、 通过发出给定地址与一组从机通信、 通过发出广播地址与所有从机通信。构造从机地址编码、 从机地址屏蔽码的方法很多,例如在一主四从多

机系统中,从机地址码和从机地址屏蔽码可按如下方法构造:

从机编号 0机

1机 2机 3机

从机地址屏蔽码 1010 0001 1010 0010 1010 0100 1010 1000

从机地址码

1111 0000 1111 0000 1111 0000 1111 0000

SADEN 和SADDR 相与 1010 ***0 1010 **0* 1010 *0** 1111 0*** 选定123机地址1010 0001 不

中 中 中 选定023机地址 1010 0010 中

中 中 选定013机地址 1010 0100 中 中 不 中 选定012机地址 1010 1000 中 中

中 不 选定0机地址1010 1110 中 不 不 不 选定1机地址1010 1101 不 中 不 不 选定2机地址1010 1011 不 不 中 不 选定2机地址1010 0111 不

不 不 中 广播地址码 1111 0000 中

RS-232C 串行接口标准中主信道重要信号含义

SCON(98H)

RS-232C 串行接口标准主信道重要信号含义: TXD :串行数据发送引脚,输出。 RXD :串行数据接收引脚,输入。

DSR :数据设备(DCE)准备就绪信号,输入,主要用于接收联络。当DSR 信号有效时,表明本地的数据设备(DCE)处于就绪状态。

DTR :数据终端(DTE)就绪信号,输出。用于DTE 向DCE 发送联络,当DTR 有效时,表示DTE 可以接收来自DCE 的数据。

RTS: 发送请求,输出。当DTE 需要向DCE 发送数据时,向接收方(DCE)输出RTS 信号。

CTS :发送允许或清除发送,输入。作为“清除发送”信号使用时,由DCE 输出,当CTS 有效时,DTE 将终止发送(如DCE 忙或有重要数据要回送DTE);而作为“允许发送”信号使用时,情况刚好相反:当接收方接收到RTS 信号后进入接收状态,就绪后向请求发送方回送CTS 信号,发送方检测到CTS 有效后,启动发送过程。

图4-27 RS-232C 接口插座

25芯D 型插座RS-232C 接口信号名称及主要信号流向; 9芯D 型插座上的RS-232C 接口信号名称及流向 3. 电平转换

为保证数据可靠传送,RS-232C 标准规定发送数据线TXD 和接收数据线RXD 均采用EIA 电平,即

传送数字“1”时,传输线上的电平在-3~-15 V 之间;传送数字“0”时,传输线上的电平在+3~+15 V 之间。但单片机串行口采用正逻辑的TTL 电平,这样就存在TTL 电平与EIA 电平之间的转换问题,例如当单片机与PC 机进行串行通信时,PC 机COM1或COM2口发送引脚TXD 信号是EIA 电平,不能直接与单片机串行口接收端RXD 引脚相连;同样单片机串行口发送端TXD 引脚输出信号采用正逻辑的TTL 电平,也不能直接与PC 机串行口COM1或COM2的RXD 端相连。 RS-232C 与TTL 之间电平转换芯片主要有传输线发送器MC1488(把TTL 电平转成EIA 电平)、传输线接收器MC1489(把EIA 电平转成TTL 电平)以及MAX232系列RS232电平转换专用芯片。

其中传输线发送器MC1488含有4个门电路发送器,TTL 电平输入,EIA 电平输出;而传输线接收器MC1489也含有4个接收器,EIA 电平输入,TTL 电平输出,但由MC1488和MC1489构成的EIA 与TTL

电平

转换器需要±12 V 双电源,而单片机应用系统中一般只有+5 V 电源,如果仅为了实现电平转换增加±12V 电源,体积大、成本高。而MAX232系列芯片集成度高,单+5 V 电源(内置了电压倍增电路及负电源电路)工作,只需外接5个容量为0.1~1 μF 的小电容即可完成两路RS-232与TTL 电平之间转换,是单片机应用系统中最常用的RS-232电平转换芯片,其内部结构及典型应用如图4-28所示。

图4-29 只有RTS 、CTS 联络信号的串行通信 图4-30 没有联络信号的串行通信

在MCS-51单片机应用系统中,由于彼此之间需要传输的数量少,就常使用没有联络信号的串行通信,只需明确如下的收发条件即可:波特率(CPS)。发送、接收双方的波特率必须相同,误差不得超过一定的范围,否则不能正确接收。 数据位长度(8位还是9位)。

· 校验有无及校验方式。在串行通讯中,除了使用奇偶校验方式,还可以使用其他的检验方式——

和校验(往往仅保留和的低8位,甚至低4位)、某一特征数码的倍数等,或同时使用两种校验方式。

正确接收后的应答信号。

· 确定信息帧起始标志。常使用发送信息(命令、数据)中不可能出现的状态编码作为信息帧的起始标志。

· 确定信息帧结束标志。

4.5 增强型MCS-51芯片识别和仿真 1. 判别芯片内核类型 方法一:由于增强型MCS-51内核一般提供关闭ALE 功能,因此对于采用片内程序存储器系统,在一简单循环程序前插入“MOV 8EH ,#01H”(AUXR 特殊功能寄存器字节地址为8EH),然后用逻辑笔观察ALE 引脚是否还有脉冲输出,即可判别该芯片是否支持ALE 关闭功能,从而判别该芯片是否是增强型MCS-51内核。

方法二:由于增强型MCS-51内核定时器T2具有时钟输出功能,因此将定时器T2定义为自动重装初值的定时状态,并允许在P1.0引脚输出时钟信号,然后用逻辑笔或万用表交流挡观察P1.0引脚状态,也能迅速判别该芯片采用何种内核。 2. 在标准MCS-51仿真器使用增强型MCS-51新增硬件功能

目前市面上多数MCS-51及兼容芯片采用增强型MCS-51内核,但国内大多数用户使用的MCS-51仿真开发设备——仿真器或仿真头之一可能不支持增强型MCS-51内核芯片,只能仿真标准MCS-51,甚至随仿真开发器提供的汇编器(汇编程序)不识别增强型MCS-51新增特殊功能寄存器。在这种情况下又如何使用增强型MCS-51及兼容芯片新增功能呢?

由于增强型MCS-51硬件资源与标准MCS-51保持兼容,因此先当标准MCS-51使用,即程序中暂时不出现增强型MCS-51新增特殊功能寄存器(位),如在涉及这些特殊功能寄存器(位)的程序段及指令前加“;”(分号)暂时注销,待程序调试无误后采用如下方法之一使用新增的硬件资源: (1) 用支持89C51RX 系列CPU 仿真器(头)仿真8XC5X 、8XC5XX2系列增强型MCS-51 内核CPU 。例如“伟福”E2000系列仿真器不能仿真8XC5X 、8XC5XX2系列增强型MCS-51 CPU 。但配合“POP -89C51RX”仿真头可以仿真89C51RX 系列CPU ,而89C51RX 硬件资源与8XC5X 、8XC5XX2系列增强型MCS-51内核芯片保持兼容,因此可用E2000系列仿真器,配合POP-89C51RX 仿真头仿真8XC5X 、8XC5XX2系列增强型MCS-51 CPU 。

9针D 型插座

9针D 型插座

(2) 如果没有89C51RX系列仿真器、仿真头,可使用软件仿真方式。例如在“伟福”汇编器中,在“仿真器”选择窗内,选用“伟福软件模拟器”选项,并选择E2000系列仿真器和“POP-89C51RX”仿真头。这样就可以在“伟福软件模拟器”中直接引用8XC5X、8XC5XX2系列增强型MCS-51内核芯片新增特殊功能寄存器和寄存器位,经编译、调试(当然只能在软件模拟器环境下进行)后,将代码直接写入目标芯片,在用户板上测试。不满意,再检查源程序,找出其中的错误并修正即可。

(3) 如果汇编器不支持89C51RX芯片,不能使用“软件模拟仿真”方式时,可将源程序中涉及到的新增特殊功能寄存器名用直接地址取代,即在程序头变量定义区内插入新增特殊功能寄存器伪定义指令,如:AUXR DATA 8EH

AUXR1 DATA 0A2H

IPH DATA 0B7H

……汇编后将代码直接写入目标芯片,在用户板上测试。

51单片机的寄存器设置

void INT_0(void) interrupt 0 { if(inf_mode_en == 1) //如果红外线接收总控制开,那么才可以判断下面的所有{ if(inf_shunxu == 0) { TH1 = 0x1F; //定时器高位 TL1 = 0xFF; //定时器低位 TR1 = 1; //定时器1开始计数,由于晶振是24M inf_shunxu++; //顺序加一 ET1 = 1; //开定时器1的溢出中断使能 } else if(inf_shunxu == 1) { inf_gonggong(); //红外线接收公共程序 if(inf_zanshi>kaishizhi_l) { inf_dizhi_buf=0; inf_dizhichou_buf=0; inf_shuju_buf=0; inf_shujuf_buf=0; } else inf_gongcuowu(); //公共错误处理错误位置1,接收顺序清0 } else { switch(inf_shunxu) { case 2: inf_gonggong(); //红外线接收公共程序 if(inf_zanshi

汇编教程控制寄存器和系统地址寄存器

80386控制寄存器和系统地址寄存器如下表所示。它们用于控制工作方式,控制分段管理机制及分页管理机制的实施。 控制寄存器CRx BIT31 BIT30—BIT12 BIT11—BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 CR0 PG 0000000000000000 ET TS EM MP PE CR1 保留 CR2 页故障线性地址 CR3 页目录表物理页码000000000000 BIT47—BIT16 BIT15—BIT 全局描述符表寄存器GDTR 基地址界限中断描述符表寄存器IDTR 基地址界限 BIT15—BIT0 局部描述符表寄存器LDTR 选择子任务状态段寄存器TR 选择子BIT31—BIT0 BIT31—BIT0 BIT11—BIT0 基地址界限属性 基地址界限属性 <一>控制寄存器 从上表可见,80386有四个32位的控制寄存器,分别命名位CR0、CR1、CR2和CR3。但CR1被保留,供今后开发的处理器使用,在80386中不能使用CR1,否则会引起无效指令操作异常。CR0包括指示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协处理器操作的控制位。CR2及CR3由分页管理机制使用。CR0中的位5—位3 0及CR3中的位0至位11是保留位,这些位不能是随意值,必须为0。 控制寄存器CR0的低16位等同于80286的机器状态字MSW。 1.保护控制位 控制寄存器CR0中的位0用PE标记,位31用PG标记,这两个位控制分段和分页管理机制的操作,所以把它们称为保护控制位。PE控制分段管理机制。PE=0,处理器运行于实模式;PE=1,处理器运行于保护方式。PG控制分页管理机制。PG=0,禁用分页管理机制,此时分段管理机制产生的线性地址直接作为物理地址使用;PG=1,启用分页管理机制,此时线性地址经分页管理机制转换位物理地址。关于分页管理机制的具体介绍在后面的文章中进行。 下表列出了通过使用PE和PG位选择的处理器工作方式。由于只有在保护方式下才可启用分页机制,所以尽管两个位分别为0和1共可以有四种组合,但只有三种组合方式有效。

两种方式查询和中断

https://www.sodocs.net/doc/a315341335.html,/2005/09/20112166428-3.shtml ●系统控制与状态寄存器1:SCSR1; ●I/O多路控制寄存器A:MCRA; ●通信控制寄存器:SCICCR; ●SCI控制寄存器1:SCICTL1; ●波特率选择寄存器:SCIHBAUD和SCIL-BAUD; ●SCI控制寄存器2:SCICTL2; ●接收状态寄存器:SCIRXST; ●仿真数据缓冲寄存器:SCIRXEMU; ●接收数据缓冲寄存器:SCIRXBUF; ●发送数据缓冲寄存器:SCITXBUF; ●优先级/仿真控制寄存器:SCIPRI; ●中断屏蔽寄存器:IMR; ●外设中断向量寄存器:PIVR。 利用240X串行通信接口进行串行通信可采用查询或中断两种模式来实现。 3.2查询模式 采用查询模式进行通信时,在对有关寄存器初始化后,主要是通过不断地检查有关寄存器的相应标志位来实现数据的接收和发送。查询模式发送数据是通过检查SCI控制寄存器2(SCICTL2)中的发送就绪(TXRDY)标志来实现的,其发送程序框图如图1所示。查询模式接收数据则通过检查接收状态寄存器(SCIRXST)中的接收就绪(RXRDY)和接收错误(RXERROR)标志来实现,其接收程序框图如图2所示。 点击此处查看全部新闻图片 点击此处查看全部新闻图片

3.3中断模式 由于在240XCPU内核一级可用的中断只有六个(INT1~INT6),而240X的外设不止六个,且每个外设又可产生一个或多个中断,因此对外设中断的处理只能采用复用方式,即所有外设均共用INT1~INT6这六个中断。具体的中断源则由外设中断向量寄存器(PIVR)来指示。这样在公用的INT1~INT6中断服务程序中必须首先检查外设中断向量寄存器(PIVR),在确定了具体的外设中断源后才能转入相应的外设中断处理子程序。 240X串行通信接口模块的数据接收和发送可分别申请中断,且具有高低两种优先级,其中高优先级的接收和发送中断共用CPU中断INT1,低优先级的接收和发送中断共用CPU中断INT5,因此高优先级的接收和发送中断处理程序应放在INT1的中断服务程序中,而低优先级的接收和发送中断处理程序应放在INT5的中断服务程序中。串行通信接收和发送中断在外设中断向量寄存器(PIVR)中的值分别为0006h 和0007h,在INT1或INT5的中断服务程序中可通过检查外设中断向量寄存器(PIVR)的值来转入相应的接收或发送中断处理程序,若PIVR的值为0006h,则转入接收中断处理程序,若为0007h,则转入发送中断处理程序。 串行通信接口模块有两个多处理器通信协议:空闲线多处理器模式和地址多处理器模式。空闲线模式在地址前留有一个固定空间,该模式没有附加的地址/数据位,它在处理包含多于10 个字节的数据块方面比地址位模式更有效;地址位模式在每个字节中加入一个额外位(地址位)来区分地址和数据,这种模式在处理多个小数据块时更有效。

51系列单片机寄存器详解

AUXR:辅助寄存器 字节地址=8EH,不可位寻址 - - - WDIDLE DISRTO - - DISALE WDIDLE:WTD在空闲模式下的禁止/允许位 当WDIDLE=0时,WDT在空闲模式下继续计数 当WDIDLE=1时,WDT在空闲模式下暂停计数 DISRTO:禁止/允许WDT溢出时的复位输出 当DISRTO=0时,WDT定时器溢出时,在RST引脚输出一个高电平脉冲 当DISRT0=1时,RST引脚为输入脚 DISALE :ALE禁止/允许位 当DISALE=0时,ALE有效,发出恒定频率脉冲 当DISALE=1时,ALE仅在CPU执行MOVC和MOVX类指令时有效,不访问外寄存器时,ALE不输出脉冲信号 AUXR1:辅助寄存器1字节地址A2,不可位寻 - - - -- - - DPS DPS:数据指针寄存器选择位 当DPS=0时,选择数据指针寄存器DPRT0 DPRT1时,选择数据指针寄存器DPS 当= PSW:程序状态字 CY——进位标记 AC——半进位标记 F0——用户设定标记 RS1、RS0——4个工作寄存器区的选择位。 VO——溢出标记 P——奇偶校验标记 PCON:电源控制器及波特率选择寄存器 字节地址=87H,不可位寻址 SMOD - - POF GF1 GF0 PD IDL SMOD——波特率倍增位 GF1、GF0——用户通用标记 PD——掉电方式控制位,PD=1时进入掉电模式 IDL——空闲方式控制位,IDL=1时进入空闲方式 在AT89S51中PCON.4是电源断电标记位POF,上电是为1 IE:中断允许控制寄存器

EA:中断允许总控制位 当EA=0时,中断总禁止。 当EA=1时,中断总允许后中断的禁止与允许由各中断源的中断允许控制位进行设置。 EX0( EX1):外部中断允许控制位 当EX0( EX1)=0 禁止外中断 当EX0( EX1)=1 允许外中断 ET0(EX1):定时/计数中断允许控制位 当ET0(ET1)=0 禁止定时(或计数)中断 当ET0(ET1)=1 允许定时(或计数)中断 ET2:定时器2中断允许控制位,在AT89S52、AT89C52中 ES:串行中断允许控制位 当ES=0 禁止串行中断 当ES=1 允许串行中断 IP:中断优先级控制寄存器 PX0——外部中断0优先级设定位 PT0——定时中断0优先级设定位 PX1——外部中断1优先级设定位 PT1——定时中断1优先级设定位 PS——串口中断优先级设定位 优先级设定位2PT2——定时器SCON:串行口控制寄存器 SM0、SM1:串行口工作方式选择位 SM2:多机通信控制位 REN:允许/禁止串行口接收的控制位 TB8:在方式2和方式3中,是被发送的第9位数据,可根据需要由软件置1或清零,也可以作为奇偶校验位,在方式1中是停止位。

51串口控制寄存器

SCON是MCS-51单片机的一个可位寻址的专用寄存器,用于串行数据通信的控制。单元地址为98H,位地址为98H~9FH。寄存器的内容及位地址表示如下: 各位的说明如下: 1) SM0 、SM1——串行口工作方式选择位 其状态组合和对应工作方式为: SM0 SM1工作方式 0 0 方式0 0 1 方式1 1 0 方式2 1 1 方式3 2) SM2——允许方式2、3的多机通信控制位 在方式2和3中,若SM2=1且接收到的第九位数据(RB8)为1,才将接收到的前8 位数据送入接收SBUF中,并置位RI产生中断请求;否则丢弃前8位数据。若SM2 =0,则不论第九位数据(RB8)为1还是为0,都将前8位送入接收SBUF中,并产 生中断请求。 方式0时,SM2必须置0。

3) REN——允许接收位 REN=0 禁止接收数据 REN=1 允许接收数据 4) TB8——发送数据位8 在方式2、3时,TB8的内容是要发送的第9位数据,其值由用户通过软件来设置。5) RB8——接收数据位8 在方式2、3时,RB8是接收的第9位数据。 在方式1时,RB8是接收的停止位 在方式0时,不使用RB8 6) TI——发送中断标志位 在方式0时,发送完第8位数据后,该位由硬件置位 在其它方式下,于发送停止位之后,由硬件置位。 因此,TI=1表示帧发送结束,其状态既可供软件查询使用,也可请求中断。 TI由软件清“0”。 7) RI——接收中断标志位 在方式0时,接收完第8位数据后,该位由硬件置位。 在其它方式下,于接收到停止位之时,该位由硬件置位。 因此,RI=1表示帧接收结束,其状态既可供软件查询使用,也可请求中断。 RI由软件清“0”。

msp430状态寄存器介绍概括

寄存器实在太多了。。我有个文档给你看看吧、、 MSP430寄存器中文注释---P1/2口(带中断功能) /************************************************************ * DIGITAL I/O Port1/2 寄存器定义有中断功能 ************************************************************/ #define P1IN_ 0x0020 /* P1 输入寄存器*/ const sfrb P1IN = P1IN_; #define P1OUT_ 0x0021 /* P1 输出寄存器*/ sfrb P1OUT = P1OUT_; #define P1DIR_ 0x0022 /* P1 方向选择寄存器*/ sfrb P1DIR = P1DIR_; #define P1IFG_ 0x0023 /* P1 中断标志寄存器*/ sfrb P1IFG = P1IFG_; #define P1IES_ 0x0024 /* P1 中断边沿选择寄存器*/ sfrb P1IES = P1IES_; #define P1IE_ 0x0025 /* P1 中断使能寄存器*/ sfrb P1IE = P1IE_; #define P1SEL_ 0x0026 /* P1 功能选择寄存器*/ sfrb P1SEL = P1SEL_; #define P2IN_ 0x0028 /* P2 输入寄存器*/ const sfrb P2IN = P2IN_; #define P2OUT_ 0x0029 /* P2 输出寄存器*/ sfrb P2OUT = P2OUT_; #define P2DIR_ 0x002A /* P2 方向选择寄存器*/ sfrb P2DIR = P2DIR_; #define P2IFG_ 0x002B /* P2 中断标志寄存器*/ sfrb P2IFG = P2IFG_; #define P2IES_ 0x002C /* P2 中断边沿选择寄存器*/ sfrb P2IES = P2IES_; #define P2IE_ 0x002D /* P2 中断使能寄存器*/ sfrb P2IE = P2IE_; #define P2SEL_ 0x002E /* P2 功能选择寄存器*/ sfrb P2SEL = P2SEL_; MSP430寄存器中文注释---P3/4口(无中断功能) /************************************************************ * DIGITAL I/O Port3/4寄存器定义无中断功能 ************************************************************/ #define P3IN_ 0x0018 /* P3 输入寄存器*/

单片机各寄存器汇总

符号 地址功能介绍 B F0H B寄存器 ACC E0H 累加器 PSW D0H 程序状态字 IP B8H 中断优先级控制寄存器 P3 B0H P3口锁存器 IE A8H 中断允许控制寄存器 P2 A0H P2口锁存器 SBUF 99H 串行口锁存器 SCON 98H 串行口控制寄存器 P1 90H P1口锁存器 TH1 8DH 定时器/计数器1(高8位)TH0 8CH 定时器/计数器1(低8位)TL1 8BH 定时器/计数器0(高8位)TL0 8AH 定时器/计数器0(低8位) TMOD 89H 定时器/计数器方式控制寄存器 TCON 88H 定时器/计数器控制寄存器 DPTR 82H 83H 83H数据地址指针(高8位) PC SP 81H 堆栈指针 P0 80H P0口锁存器 PCON 87H 电源控制寄存器 、PSW-----程序状态字。 D7D6D5D4D3D2D1D0 CY AC F0 RS1 RS0 OV P 下面我们逐一介绍各位的用途 CY:进位标志。 AC:辅助进、借位(高半字节与低半字节间的进、借位)。 F0:用户标志位,由用户(编程人员)决定什么时候用,什么时候不用。 RS1、RS0:工作寄存器组选择位。这个我们已知了。 0V:溢出标志位。运算结果按补码运算理解。有溢出,OV=1;无溢出,OV=0。什么是溢出我们后面的章节会讲到。

P :奇偶校验位:它用来表示ALU 运算结果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,否则为0。 运算结果有奇数个1,P =1;运算结果有偶数个1,P =0。 例:某运算结果是78H (01111000),显然1的个数为偶数,所以P=0。 定时/计数器寄存器 1.工作方式寄存器TMOD(P134) TMOD 为T0.T1的工作方式寄存器,其各位的格式如下:TMOD D7 D6 D 5 D4 D3 D2 D1 D0 GATE C/-T M1 M0 GATE C/-T M1 M0 定时器1 定时器0 位7 GATE ——T1的门控位。 当GATE=0时,只要控制TR1置1,即可启动定时器T1开始工作; 当GATE=1时,除需要将TR1置1外,还要使INT1引脚为高电平,才能启动相应的定时器开始工作。 位6 C/—T ——T1的功能选择位。 当C/—T=0时,T1为定时器方式; 当C/—T=0时,T1为计数器方式; 位5和位4 M1和M0——T1的方式选择位。 由这两位的组合可以定义T1的3种工作方式 定时器T1工作方式选择表 如右表: 位3 GATE ——T0的门控位。 当GATE=0时,只要控制TR0置1,即可启动定时器T0开始工作; 当GATE=1时,除需要将TR0置1外,还要使INT0引脚为高电平,才能启动相应的定时器开始工作。 位2 C/T ——T1的功能选择位。 当C/—T=0时,T0为定时器方式; 当C/—T=0时,T0为计数器方式; 位1和位0 M1和M0—T0的方式选择位。 由这两位的组合可以定义T1的3种工作方式 定时器T0工作方式选择表 TMOD 不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半节定义定时器0,高半字节定义定时器1。复位时,TMOD 所有位均为0,定时器处于停止工作状态。 定时/计数器控制寄存器中断请求标志寄存器TCON(P183) TCON 的作用是控制定时器的启/停,标志定时器的溢出和中断情况。定时器控制寄存器TCON 各位格式如下:TCON(88H) 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 当有中断源发出请求时,有硬件将相应的中断标志位置 1.在中断请求被响应前,相应中断标志位被锁存在特殊功能寄存器TCON 或SCON 中。 TCON 为定时器T0和T1的控制寄存器,同时也锁住T0和T1的溢出中断标志及外部中断——INT0和— M1 M0 工作方式 功能描述 0 0 方式0 13位计数器 0 1 方式1 16位计数器 1 0 方式 2 自动再装入8位计数器 1 1 方式3 定时器1:停止计数 M1 M0 工作方式 功能描述 0 0 方式0 13位计数器 0 1 方式1 16位计数器 1 0 方式 2 自动再装入8位计数器 1 1 方式3 定时器0:分成2个8位计数器

飞思卡尔S12系列寄存器和中断讲解

S12的输入/输入端口(I/O口) I/O端口功能 可设置为通用I/O口、驱动、内部上拉/下拉、中断输入等功能。 设置I/O口工作方式的寄存器有: DDR、IO、RDR、PE、IE和PS。 DDR:设定I/O口的数据方向。 IO :设定输出电平的高低。 RDR:选择I/O口的驱动能力。 PE:选择上拉/下拉。 IE:允许或禁止端口中断。 PS:1、中断允许位置位时,选择上升沿/下降沿触发中断;2、中断禁止时且PE有效时,用于选择上拉还是下拉。 I/O端口设置 1、A口、B口、E口寄存器 (1)数据方向寄存器DDRA、DDRB、DDRE DDRA、DDRB、DDRE均为8位寄存器,复位后其值均为0。 当DDRA=0、DDRB=0、DDRE=0 时A口、B口和E口均为输入口。 否则,A口、B口、E口为输出口。当DDRA、DDRB、DDRE的任何一 位置1时,则该位对应的引脚被设置为输出。 例如,将A口设置为输出口,则其C语言程序的语句为:DDRA=0xff;(2)A口、B口、E口上拉控制寄存器PUCR PUCR为8位寄存器,复位后的值为0。当PUPAE、PUPBE、PUPEE被设置为1时,A口、B口、E口具有内部上拉功能;为0时,上拉无效。当A口、B口、E口为地址/数据总线时,PUPAE和PUPBE无效。 (3)A口、B口、E口降功率驱动控制寄存器RDRIV RDRIV为8位寄存器,复位后的值为0,此时,A口、B口、E口驱动保持全功率;当RDPA、RDPB、RDPE为1时,A口、B口、E口输出引脚的驱动功率下降 (4)数据寄存器PORTA、PORTB、PORTE PORTA、PORTB、PORTE均为8位寄存器,复位后的值为0,端口引脚输出低电平;要使引脚输出高电平,相应端口对应位应该置1。 由于PE0是/XIRQ、PE1是IRQ,因此,PE0和PE1只能设置为输入。

MCS-51与中断有关的寄存器、中断入口地址及编号详解

MCS-51与中断有关的寄存器、中断入口地址及编号详解 MCS-51单片机是一种集成的电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。本文主要详解MCS-51与中断有关的寄存器、中断入口地址及编号,具体的跟随小编一起来了解一下。 MCS-51单片机引脚图及功能 1、电源 Vcc:芯片电源,一般为+5V; Vss:接地端。 2、时钟 XTAL1和XTAL2:晶体振荡电路反相输入端和输出端。当使用内部振荡电路时,需要外接晶振,常见有的4M、6M、11.0592M、12M等。当使用外部振荡输入时XTAL1接地,XTAL2接外部振荡脉冲输入。 3、控制线 MCS-51单片机的控制线共有4根,其中3根是复用线,具有两种功能。 (1)ALE/PROG:地址锁存允许/编程脉冲。 ALE:正常使用时为ALE功能,主要用来锁存P0口送出的8位地址。P0口一般分时传送低8位地址和数据信号,且均为二进制数。区分是否是低8位数据信号还是地址信号就看ALE引脚。当ALE信号有效时,P0口传送的是低8位地址信号;当ALE无效时,P0口传送的是8位数据信号。一般在ALE引脚的下降沿锁定P0口传送的内容,即低8位地址信号。 当CPU不执行访问外部RAM指令(MOVX)时,ALE以时钟振荡频率1/6的固定频率输出,所以ALE信号也可以作为外部芯片的时钟信号。但当CPU执行访问外部RAM

控制寄存器和系统地址寄存器

二.控制寄存器和系统地址寄存器 80386控制寄存器和系统地址寄存器如下表所示。它们用于控制工作方式,控制分段管理机制及分页管理机制的实施。 控制寄存器CRx BIT31 BIT30—BIT12 BIT11—BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 CR0 PG 0000000000000000 ET TS EM MP PE CR1 保留 CR2 页故障线性地址 CR3 页目录表物理页码000000000000 BIT47—BIT16 BIT15—BIT0 全局描述符表寄存器GDTR 基地址界限中断描述符表寄存器IDTR 基地址界限 BIT15—BIT0 局部描述符表寄存器LDTR 选择子 任务状态段寄存器TR 选择子BIT31—BIT0 BIT31—BIT0 BIT11—BIT0 基地址界限属性 基地址界限属性 <一>控制寄存器 从上表可见,80386有四个32位的控制寄存器,分别命名位CR0、CR1、CR2和CR3。但CR1被保留,供今后开发的处理器使用,在80386中不能使用CR1,否则会引起无效指令操作异常。CR0包括指示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协处理器操作的控制位。CR2及CR3由分页管理机制使用。CR0中的位5—位30及CR3中的位0至位11是保留位,这些位不能是随意值,必须为0。 控制寄存器CR0的低16位等同于80286的机器状态字MSW。 1.保护控制位 控制寄存器CR0中的位0用PE标记,位31用PG标记,这两个位控制分段和分页管理机制的操作,所以把它们称为保护控制位。PE控制分段管理机制。PE=0,处理器运行于实模式;PE=1,处理器运行于保护方式。PG控制分页管理机制。PG=0,禁用分页管理机制,此时分段管理机制产生的线性地址直接作为物理地址使用;PG=1,启用分页管理机制,此时线性地址经分页管理机制转换位物理地址。关于分页管理机制的具体介绍在后面的文章中进行。 下表列出了通过使用PE和PG位选择的处理器工作方式。由于只有在保护方式下才可启用分页机制,所以尽管两个位分别为0和1共可以有四种组合,但只有三种组合方式有效。PE=0且PG=1是无效组合,因此,用PG为1且PE为0的值装入CR0寄存器将引起通用保护异常。 需要注意的是,PG位的改变将使系统启用或禁用分页机制,因而只有当所执行的程序的代码和至少有一部分数据在线性地址空间和物理地址空间具有相同的地址的情况下,才能改变PG位。

嵌入式-中断实验

实验五中断控制实验 (一)实验目的 了解中断的作用; 掌握嵌入式系统中断的处理流程; 掌握ARM中断编程。 (二)实验设备 计算机;ARM硬件仿真器;ARM开发板 (三)实验硬件设置 在做实验之前,先将开发板电源接好,将仿真器的USB连线与电脑相连,通电,然后按核心板的复位键。 (四)实验原理 1. 中断的基本概念 CPU与外设之间传输数据的控制方式通常有三种:查询方式、中断方式和DMA方式。DMA 方式将在后续实验中说明。查询方式的优点是硬件开销小,使用起来比较简单。但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环等待,不能执行其它程序,这样就浪费了CPU的大量时间,降低了CPU的利用率。为了解决这个矛盾,通常采用中断传送方式:即当CPU进行主程序操作时,外设的数据已存入输入端口的数据寄存器; 或端口的数据输出寄存器已空,由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定的条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后CPU再返回并继续执行原来被中断的主程序。这样CPU就避免了把大量时间耗费在等待、查询状态信号的操作上,使其工作效率得以大大地提高。能够向CPU发出中断请求的设备或事件称为中断源。系统引入中断机制后,CPU与外设(甚至多个外设)处于“并行”工作状态,便于实现信息的实时处理和系统的故障处理。中断方式的原理示意图如下所示。 图5-7 中断处理示意图 1)中断响应 中断源向CPU发出中断请求,若优先级别最高,CPU在满足一定的条件下,可以中断当前程序的运行,保护好被中断的主程序的断点及现场信息。然后,根据中断源提供的信息,找到中断服务子程序的入口地址,转去执行新的程序段,这就是中断响应。 CPU响应中断是有条件的,如内部允许中断、中断未被屏蔽、当前指令执行完等。 2)中断服务子程序 CPU响应中断以后,就会中止当前的程序,转去执行一个中断服务子程序,以完成为相应设备的服务。中断服务子程序的一般结构如下图所示。

单片机寄存器汇总表图文稿

单片机寄存器汇总表 Company number【1089WT-1898YT-1W8CB-9UUT-92108】

51单片机寄存器功能一览表 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):

分别说明如下: 1、ACC---是累加器,通常用A表示 这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离

不开它。自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。 2、B--一个寄存器 在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。 3、PSW-----程序状态字。 这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表: 下面我们逐一介绍各位的用途 CY:进位标志。 8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办最高位就进到这里来。这样就没事了。有进、借位,CY=1;无进、借位,CY=0 AC:辅助进、借位(高半字节与低半字节间的进、借位)。 例:57H+3AH(01010111+00111010)

如果在中断服务函数 ISR 中使用寄存器

如果在中断服务函数ISR 中使用寄存器,那么必须处理好using 的使用问题: 1、中断服务函数使用using 指定与主函数不同的寄存器组(主函数一般使用Register bank 0)。 2、中断优先级相同的ISR 可用using 指定相同的寄存器组,但优先级不同的ISR 必须使用不同的寄存器组,在ISR 中被调用的函数也要使用using 指定与中断函数相同的寄存器组。用reentranr指明可重入函数。 3、如果不用using 指定,在ISR 的入口,C51 默认选择寄存器组0,这相当于中断服务程序的入口首先执行指令: MOV PSW #0 这点保证了,没使用using 指定的高优先级中断。可以中断使用不同的寄存器组的低优先级中断。 4、使用using 关键字给中断指定寄存器组,这样直接切换寄存器组而不必进行大量的PUSH 和POP 操作,可以节省RAM空间,加速MCU 执行时间。寄存器组的切换,总的来说比较容易出错,要对内存的使用情况有比较清晰的认识,其正确性要由你自己来保证。特别在程序中有直接地址访问的时候,一定要小心谨慎!至于“什么时候要用到寄存器组切换”,一种情况是:当你试图让两个(或以上)作业同时运行,而且它们的现场需要一些隔离的时候,就会用上了。在ISR 或使用实时操作系统RTOS 中,寄存器非常有用。 寄存器组使用的原则: 1、8051 的最低32 个字节分成4 组8 寄存器。分别为寄存器R0 到R7。寄存器组由PSW 的低两位选择。在ISR 中,MCU 可以切换到一个不同的寄存器组。对寄存器组的访问不可位寻址,C51 编译器规定使用using 或禁止中断的函数(#pragma disable )均不能返回bit 类型的值。 2、主程序(main函数)使用一组,如bank 0;低中断优先级的所有中断均使用第二组,如bank 1;高中断优先级的所有中断均使用再另外一组,如bank 2。显然,同级别的中断使用同一组寄存器不会有问题,因为不会发生中断嵌套;而高优先级的中断则要使用与低优先级中断不同的一组,因为有可能出现在低优先级中断中发生高优先级中断的情况。编译器会自动判断何时可使用绝对寄存器存取。 3、在ISR 中调用其它函数,必须和中断使用相同的寄存器组。当没用NOAREGS 命令做明确的声明,编译器将使用绝对寄存器寻址方式访问函数选定(即用using 或REGISTERBANK 指定)的寄存器组,当函数假定的和实际所选的寄存器组不同时,将产生不可预知的结果,从而可能出现参数传递错误,返回值可能会在错误的寄存器组中。 举一例子:当需要在中断内和中断外调用同一个函数,假定按照程序的流程控制,不会出现函数的递归调用现象,这样的调用会不会出现问题?若确定不会发生重入情况,则有以下两种情况: 1、如果ISR 和主程序使用同一寄存器组(主程序缺省使用BANK 0,若ISR 没有使用using 为其指定寄存器区,则缺省也使用BANK 0),则不需其他设置。 2、如果ISR 和主程序使用不同的寄存器组(主程序缺省使用BANK 0,ISR 使用using 指定了其他BANK),则被调用函数必须放在: #pragma NOAREGS #pragma AREGS 控制参数对中,指定编译器不要对该函数使用绝对寄存器寻址方式;或者也可在Options->C51,选中“Dont use absolute register accesses”,使所有代码均不使用绝对寄存器寻址方式(这样,执行效率将稍有降低)。不论以上的哪一种情况,编译器均会给出重入警告,需手工更改OVERLAY 参数,做重入说明。

寄存器与7种寻址方式

一、寄存器 总共有14个16位寄存器,8个8位寄存器 通用寄存器: 数据寄存器: AH(8位) AL(8位) AX(16位) (AX和AL又称累加器) BH(8位) BL(8位) BX(16位) (BX又称基址寄存器,唯一作为存储器指针使用寄存器) CH(8位) CL(8位) CX(16位) (CX用于字符串操作,控制循环的次数,CL 用于移位) DH(8位) DL(8位) DX(16位) (DX一般用来做32位的乘除法时存放被除数或者保留余数) 指针寄存器: SP 堆栈指针(存放栈顶地址) BP 基址指针(存放堆栈基址偏移) 变址寄存器:主要用于存放某个存储单元地址的偏移,或某组存储单元开始地址的偏移, 即作为存储器(短)指针使用。作为通用寄存器,它们可以保存16位算术逻辑运算中的操 作数和运算结果,有时运算结果就是需要的存储单元地址的偏移. SI 源地址(源变址寄存器) DI 目的地址(目的变址寄存器) 控制寄存器: IP 指令指针 FLAG 标志寄存器 ①进位标志CF,记录运算时最高有效位产生的进位值。

②符号标志SF,记录运算结果的符号。结果为负时置1,否则置0。 ③零标志ZF,运算结果为0时ZF位置1,否则置0。 ④溢出标志OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。 ⑤辅助进位标志AF,记录运算时第3位(半个字节)产生的进位值。 ⑥奇偶标志PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。 段寄存器 CS 代码段IP DS 数据段 SS 堆栈段SP BP ES 附加段 二、七种寻址方式: 1、立即寻址方式: 操作数就包含在指令中。作为指令的一部分,跟在操作码后存放在代码段。 这种操作数成为立即数。立即数可以是8位的,也可以是16位的。 例如: 指令: MOV AX,1234H 则: AX = 1234H 2、寄存器寻址方式: 操作数在CPU内部的寄存器中,指令指定寄存器号。 对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP和BP等。对于8位操作数,寄存器可以是AL 、AH、BL、BH、CL、CH、DL、DH。 这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数 因而可以取得较高的运算数度。

ARM中断及相关寄存器

ARM中断及相关寄存器 要正确应用ARM处理器必须首先对它的系统寄存器进行正确配置,下面简要介绍一下ARM寄存器,包括一些中断寄存器设置如中断状态(0x8000.0240,0x8000.1240,0x8000.2240)和中断屏蔽寄存器(0x8000.0280,0x8000.1280,0x8000.2280)。 ARM中断寄存器主要包括: ·中断模式寄存器可以设置2个中断源为IRQ或FIQ方式。 ·中断挂起寄存器,当有中断请求产生时,相应的位会被硬件置1,处于挂起状态。当进入中断处理程序时,必须通过软件清除这个标志位,以标志响应中断请求。 ·中断屏蔽寄存器,当需要屏蔽某些中断源时,可以设置相对应的位。 ·中断优先级寄存器可以设置21个中断源优先级的高低。 ·中断偏移寄存器,中断响应时通过读这个寄存器可以查到当前的中断源。 如表1所示是ARM的一些系统寄存器列表。 表1 ARM系统寄存器列表 系统寄存器中的每一位或几位都对应系统功能的控制、状态等信息。例如: ·SYSCON1中的UARTIEN、LCD EN位分别控制异步串口1与LCD显示的使能。 ·SYSCON2中的SDRAM Z用来设置SDRAM存储器的位宽。 ·SYSCON3中的CLKCTL用来在18MHz、37MHz、49MHz和74MHz中选择一种作

为系统工作频率。 与系统运行紧密相关的其他寄存器如表2所示,对它们进行正确设置,就可以启用 SDRAM、LCD或者串行通信口。 表2 ARM的其他重要寄存器列表 数据手册上是这么说的: INTPND 寄存器中的26 个位对应着每一个中断源。当某个中断产生时,INTPND 中相 应的pending 位就会置1,说明该中断还未被处理。中断服务程序中必须清除该pending 位,从而使系统能够及时响应下一次中断。INTPND 是一个只读寄存器,清除pending 位的方式 是向I_ISPC/F_ISPC 的相应位写入“1”。在多个中断同时发生时,INTPND 将所有发生的中断pending 位都置1。虽然中断请求可以通过INTMSK 寄存器屏蔽,但是如果被屏蔽的中断 发生了,INTPND 中的pending 位仍然会被置1。

飞思卡尔MC9S12XS128单片机中断优先级设置简易教程

本教程试图用最少的时间教你飞思卡尔XS128单片机的中断优先级设置方法和中断嵌套的使用,如果是新手请先学习中断的基本使用方法。 先来看看XS128 DataSheet 中介绍的相关知识,只翻译有用的: 七个中断优先级 每一个中断源都有一个可以设置的级别 高优先级中断的可以嵌套低优先级中断 复位后可屏蔽中断默认优先级为1 同一优先级的中断同时触发时,高地址(中断号较小)的中断先响应 注意:高地址中断只能优先响应,但不能嵌套同一优先级低地址的中断 下面直接进入正题,看看怎么设置中断优先级: XS128中包括预留的中断一共有128个中断位,如果为每个中断都分配一个优先级寄存器的话会非常浪费资源,因此飞思卡尔公司想出了这样一种办法:把128个中断分为16个组,每组8个中断。每次设置中断时,先把需要的组别告诉某个寄存器,再设置8个中断优先寄存器的某一个,这样只需9个寄存器即可完成中断的设置。 分组的规则是这样的:中断地址位7到位4相同的中断为一组,比如MC9SX128.h中 这些中断的位7到位3都为D,他们就被分成了一组。0~F正好16个组。

INT_CFADDR就是上面说到的用来设置组别的寄存器: 我们需要设置某个组别的中断时,只要写入最后8位地址就行了,比如设置SCI0的中断优先级,就写入0xD0。 设置好组别之后,我们就要该组中相应的中断进行设置,设置中断的寄存器为 这其实是一组寄存器,一共有8个,每个都代表中断组中的一个中断。对应规则是这样的:中断地址的低四位除以2 比如还是SCI0,低四位是6,除以二就是3,那么我们就需要设置INT_CFDATA3 往INT_CFDATAx中写入0~7就能设置相应的中断优先级了 拿我本次比赛的程序来举个例子:我们的程序中需要3个中断:PIT0,PORTH,SCI0。PIT0定时检测传感器数值,PORTH连接干簧管进行起跑线检测,SCI0接收上位机指令实现急停等功能。因此中断优先级要SCI0>PORTH>PIT0。 我们先要从头文件中找出相应中断的地址: PIT0【7:4】位为7,选择中断组: INT_CFADDR=0x70;

单片机中断寄存器汇总

定时/计数器寄存器 1.工作方式寄存器TMOD(P134) TMOD 为T0.T1的工作方式寄存器,其各位的格式如下:TMOD 定时器1 定时器0 位7 GATE ——T1的门控位。 当GATE=0时,只要控制TR1置1,即可启动定时器T1开始工作; 当GATE=1时,除需要将TR1置1外,还要使INT1引脚为高电平,才能启动相应的定时器开始工作。 位6 C/—T ——T1的功能选择位。 当C/—T=0时,T1为定时器方式; 当C/—T=0时,T1为计数器方式; 位5和位4 M1和M0——T1的方式选择位。 由这两位的组合可以定义T1的3种工作方式 定时器T1工作方式选择表 如右表: 位3 GATE ——T0的门控位。 当GATE=0时,只要控制TR0置1,即可启动定时器T0开始工作; 当GATE=1时,除需要将TR0置1外,还要使INT0引脚为高电平,才能启动相应的定时器开始工作。 位2 C/T ——T1的功能选择位。 当C/—T=0时,T0为定时器方式; 当C/—T=0时,T0为计数器方式; 位1和位0 M1和M0—T0的方式选择位。 由这两位的组合可以定义T1的3种工作方式 定时器T0工作方式选择表 TMOD 不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半节定义定时器0,高半字节定义定时器1。复位时,TMOD 所有位均为0,定时器处于停止工作状态。 定时/计数器控制寄存器 TCON(P135) TCON 的作用是控制定时器的启/停,标志定时器的溢出和中断情况。定时器控制寄存器TCON 各位格式如下:TCON(88H) 当定时器1计满溢出时,由硬件使TF1置1,并且申请中断。进入中断服务程序后,由硬件自动清0,在查询方式下用软件清0。 TR1(TCON.6)——定时器1运行控制位。 当TR1=1时,启动定时器1工作; 当TR1=0时,关闭定时器1。 TF0(TCON.5) )——定时器T0溢出标志 其功能及操作情况同TF1。 TR0(TCON.4) ——定时器T0运行控制位。 其功能及操作情况同TR1。 IE1((TCON.3) ——外部中断1请求标志 位。外部中断源1有中 IE1置1, CPU 响应该中断后,硬件清0。 IT1(TCON.2) ——外部中断1触发方式选择位。 IE0((TCON.1 )——外部中断0请求标志位。 IT0((TCON.0) ——外部中断0触发方式选择位。 TCON 的低四位与中断有关;当系统复位时,TCON 的所有位清零。

Cortex M3学习笔记 02 寄存器,中断控制器

Cortex M3学习笔记 02 寄存器,中断控制器 好像百度看了我的文章一样,上次笔记中写了一些对抱怨审核太慢的内容,结果第二天就审核好了,不知道这次速度怎么样…… 1、名词定义 MSP:主堆栈指针; PSP:进程堆栈指针; 2、寄存器 通用寄存器:32位一个,不多说,一共22个。 R0~R15,其中R13是个有两个堆栈指针寄存器的功能,一共17个;另外还有5个特殊功能寄存器。下面来理解。 a) 通用寄存器 R0~R12: 用于数据操作,使用Thumb-2可以全部访问,使用Thumb只能访问R0~R7。 R13: 堆栈指针(SP):包括主堆栈指针(MSP),进程堆栈指针(PSP) PUSH和POP指令的用法解释: PUSH {R0} // *(--R13)=R0;R13是long*型指针 POP {R0} // R0=*R13++ R13的最低两位强制为0,且读取同样也为0; R14: 连接寄存器(LR):保存子程序返回时的地址; R15: 程序计数器(PC):PC返回的地址是当前那指令的地址+4。 例如: 0x4000 MOV R0 , PC ; //R0=0x4004; 当针对执行一条写入R15指令时,写入R15的地址被当成一个指令地址,程序从这个地址处开始执行,但是不更新LR寄存器,相当于引发一次跳转; PC的LSB读回内容始终为0,不论是直接写入PC的值,还是使用分

支跳转命令,都要求加载到PC的值是奇数(LSB=1),用以表明处理器是在Thumb状态下执行。若写入0,则视为企图跳转到ARM模式,Cortex-M3将产生一个fault异常。 b) 特殊功能寄存器 程序状态寄存器组(PSRs); 分为: 应用状态寄存器(APSR)为[27~31]; 中断状态寄存器(IPSR)为[0~8]; 执行状态寄存器(EPSR)为[10~15],[24~26]; 共计32位 自己画个0~31的寄存器 “位”表格,很直观。 中断屏蔽寄存器组(PRIMASK、FAULTMASK、 BASEPRI); PRIMASK相当于中断总开关, 当PRIMASK=1时,屏蔽所有中断(除NMI和fault外)。 FAULTMASK屏蔽错误中断。 BASEPRI优先级屏蔽寄存器中断。 控制寄存器(CONTROL)。 第1.定义特权级别:特权级线程模式,用户级线程模式; CONTROL[0]=0是特权级; CONTROL[0]=1是用户级; 第2.选择当前堆栈指针:主堆栈MSP,备用堆栈。 CONTROL[1]=0是主堆栈(复位缺省); CONTROL[1]=1是备用堆栈, 特殊功能寄存器不存在地址,只能被专用的MSR和MRS指令访问。使用方式: MRS , ; 读特殊功能寄存器的值到通用寄存器; MSR , ; 写通用寄存器的值到特殊功能寄存器; 其中是通用寄存器,是特殊寄存器; 例如: · MOV R0,#0x01; MOV RPIMASK,R0; · MOV R0,0x60; MOV BASEPRI,R0;

相关主题