- 0
- 0
- 约1.49万字
- 约 90页
- 2019-11-06 发布于广东
- 举报
把接收到的32个字节数据存放到20H~3FH中,波特率为1200,若奇校验出错,将进位标志C置1 。 ORG 0000H MOV TMOD,#20H ;设T1为定时器方式2 MOV TL1,#0E8H ;设T1时间常数 MOV TH1,#0E8H MOV R0,#20H ;接收缓冲区首址 MOV R7,#32 ;接收字节计数器 例 通过串行口接收带奇偶校验位的数据块 LOOP:ACALL SP-IN ;调用带奇校验的串行口接 ; 收子程序 JC ERROR ;校验错,转出错处理 MOV @R0,A ;存入 INC R0 DJNZ R7,LOOP ;未接收完,则继续 ERROR:… ;校验错,处理 SP-IN:MOV SCON, ;设串行口为方式 ; 1,启动接收 JNB RI,$ CLR RI MOV A,SBUF ;接收一个字节 MOV C,P ;检查奇校验位,若出错,C=1 CPL C ANL A,#7FH ;去掉校验位后的ASCII码数据 RET 7.5.4 方式2和3的编程和应用 方式2接收/发送的一帧信息是11位:第0位是起始位(0);第1~8位是数据位;第9位是程控位,可由用户置TB8决定;第10位是停止位。 · 方式2的波特率为: 波特率=振荡器频率/n 其中:当 SMOD=0时,n=64 ; 当 SMOD=l时,n=32。 方式2和方式3基本一样,仅波特率设置不同。 工作方式2发送的一帧信息为11位:1位起始位,8位数据位,1位可编程为1或0的第9位(可用作奇偶校验位或数据/地址标志位)和1位停止位。 奇偶校验位的发送是在将发送数据写入发送缓冲器SBUF之前,先将奇偶标志写入SCON的TB8位。 例: 试编写串行接口以工作方式2发送数据的中断服务程序 ORG 0023H AJMP SPINT ?SPINT:CLR EA ;关中断 PUSH PSW ;保护现场 PUSH ACC SETB EA ;开中断 SETB PSW.4 ;切换寄存器工作组 CLR TI ;清除发送中断请求标志 MOV A,@R0 ;取数据,置奇偶标志位 MOV C,P ;奇偶标志位P送TB8 MOV TB8,C MOV SBUF,A ;数据写入发送缓冲器,启动发送 INC R0 ;数据地址指针加1 CLR 0AFH ;恢复现场 POP ACC POP PSW SETB 0AFH CLR PSW .4 ;切换寄存器工作组 RETI ;中断返回 例: 方式3和方式1的不同在于接收/发送的信息位数不同,而与方式2的不同仅在于波特率设置不同。 这里以双机通信为例。串行口以方式3进行接收和发送,以T1为波特率发生器,选择定时器方式2。 程序首先发送数据存放地址,而地址的高位存放在78H中,地址的低位存放在77H中;然后发送00H,01H,02H,…,FEH,共255个数据以后结束。 甲机的发送程序: ORG 0023H CLR TI RETI TRANSFER:MOV TMOD,#20H ;置T1为定时方式 2 MOV TL1,# 0F0H ;置T1定时常数 MOV TH1,# 0F0H SETB EA ;允许中断 CLR ES ;禁止串行口中断 CLR ET1 ;禁止定时器T1中断 MOV SCON,#0E0H ;置串行口方式 3 SETB TB8 ;表示发送的是地址 MOV SBUF,78H ;发送地址 JNB TI,$ CLR TI MOV SBUF,77H JNB TI,$ CLR TI M
原创力文档

文档评论(0)