串行中断寄存器控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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;初始化串行通信口

相关文档
最新文档