串行中断寄存器控制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;初始化串行通信口