2、串行口方式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 ;发送数据区首址
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 ;返回
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论