8.2.2 89C51串行口方式1的发送和接收

例8-4:89C51串行口按双工方式收发ASCII字符,最高位用来作奇偶校验位,采用奇校验方式,要求传送的波特率为1200b/s。编写有关的通信程序。
解:分析:
(1)7位ASCII码加1位奇校验共8位数据,故可采用串行口方式1。
2、串行口方式1 的发送和接收
(2)89C51单片机的奇偶校验位P是当累加器A中1的数目为奇数时,P=1。如果直接把P的值放入ASCII码的最高位,恰好成了偶校验,与要求不符。因此,要把P的值取反以后放入ASCII码最高位,才是要求的奇校验。
2、串行口方式1 的发送和接收
(3)双工通信要求收、发能同时进行。
(4)因为只是对一个主机编程,CPU只是把数据从接收缓冲器读出和把数据写入发送缓冲器。
(5)数据传送用中断方式进行。
(6)因为既有发送,也有接收,所以响应中断以后,通过检测是RI置位还是TI置位来判断是发送产生的中断还是接收产生的中断。
2、串行口方式1 的发送和接收
•(7)发送和接收都通过子程序来完成,
•(8)发送数据区的首地址为20H,接收数据区的首地址为40H。
•(9)fosc为6MHz,通过查波特率初值可知定时器的初装值为F3H。定时器T1采用工作模式2,可以避免计数溢出后用软件重装定时初值的工作。
2、串行口方式1 的发送和接收
程序清单:
主程序
MOV    TMOD ,#20H    ;定时器1设为模式2      MOV    TL1 , #0F3H      ;定时器初值
MOV    TH1 ,#0F3H      ;8位重装值
SETB  TR1                    ;启动定时器1
MOV    SCON ,#50H  ;设置为方式1,
;REN=1
MOV    R0 ,#20H          ;发送数据区首址
s1200
MOV    R1 ,#40H          ;接收数据取首址
ACALL  SOUT                ;先输出一个字符
SETB  ES
SETB  EA
SJMP  $                        ;等待中断中断服
ORG    0023H      ;串行口中断矢量地址    AJMP  SBR1      ;转至中断服务程序      ORG    0100H
SBR1:
JNB    RI ,SEND  ;TI=1,为发送中断      ACALL  SIN        ;RI=1,为接收中断
SJMP  NEXT      ;转至统一的出口SEND:
ACALL  SOUT    ;调用发送子程序NEXT:
RETI                    ;中断返回
2、串行口方式1 的发送和接收
发送子程序
SOUT:  CLR  TI
MOV  A ,@R0  ;取发送数据到A
MOV  C ,P          ;奇偶标识赋予C
CPL  C                  ;奇校验
MOV  ACC.7 ,C    ;(发送数据的第8位)                  INC  R0                  ;修改发送数据指针
MOV  SBUF ,A    ;发送ASCII码
RET                        ;返回接收子程序
SIN: CLR  RI
MOV  A ,SBUF    ;读出接收缓冲区内容
MOV  C ,P          ;取出校验位
CPL  C                  ;奇校验(应与接收数
;据的第8位进行比较
;检验)
ANL  A ,#7FH      ;删去校验位
MOV  @R1 ,A    ;读入接收缓冲区
INC  RI                ;修改接收数据指针
RET                      ;返回

本文发布于:2024-09-22 11:18:20,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/363570.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:中断   方式   发送   接收   串行口   数据   校验   采用
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议