MOV MOV MOV MOV SETB SETB SJMP
PCON, #00H R0, #30H R1, #50H R2, #20 ES EA LOOP
; SMOD=0
; 发送数据区首地址→R0 ; 接收数据区首地址→R1 ; 置发送数据个数→R2 ; 开中断 ; 等待中断
LOOP:
中断服务子程序:
ORG 0023H AJMP SOUT ORG 0200H
SOUT: CLR TI
DJNZ R2, LOOP1 SJMP RR1
LOOP1: MOV A, @R0 MOV MOV MOV INC
RR1: RETI
; 转至中断服务程序
; 清发送中断标志 ; 数据未发送完,继续发送 ; 发送完返回
; 取发送数据到A
C, PSW.0 TB8, C SBUF, A ; 发送数据 R0 ; 指向下一个数据
10.8051以方式3进行串行通信,假定波特率为1200bps,第9位作奇偶验位,以查询方式接收。请编写程序。
答案:
RECV:
ORG
MOV MOV MOV
2000H
TMOD, #20H TL1, #0E8H TH1, #0E8H
; 定时器1设为模式2
; 置定时器初值 ; 启动T1
; 将串行口设置为方式3,REN=1 ; SMOD=0
; 接收数据区首地址→R1 ; 置发送数据个数→R2 ; 等待接收到数据
WAIT:
SETB TR1 MOV SCON, #0D0H MOV PCON, #00H MOV R1, #20H MOV R2, #16 JBC RI, PRI
SJMP WAIT
PRI: MOV A, SBUF ; 读接收数据
JNB PSW.0, PZEO ; P=0则跳转
JNB RB8, ERR ; P=1,RB8=0转至出错 SJMP RIGHT ; P=1,RB8=1转至正确
PZEO: JB RB8, ERR ; P=0,RB8=1转至出错 RIGHT: MOV @R1, A ; 存放数据
INC R1 ; 指向下一个存储单元 DJNZ R2, WAIT ; 未接收完则继续接收 CLR F0 ; F0=0 RET
ERR: CLR REN
SETB F0 ; 置F0=1 RET
11.RS-232C总线标准是如何定义其逻辑电平的?实际应用中可以将MCS-51单片机串行口和PC机的串行口直接相连吗?为什么?
答案:
RS-232C采用负逻辑,即逻辑1用-5V~-15V表示,逻辑0用+5V~+15V表示。 PC机配置的是RS-232C标准接口,与MCS-51单片机输入、输出电平不兼容。因此实际应用中不能将MCS-51单片机串行口和PC机的串行口直接相连。
12.为什么RS-485总线比RS-232C总线具有更高的通信速率和更远的通信距离? 答案:
RS-232C由于发送器和接收器之间具有公共信号地,不可能使用双端信号,因此共模噪声会耦合到信号系统中,从而限制了RS-232C的信号传输速率和通信距离。而RS-485总线无论发送还是接收数据,均用两条线传送双端(差分)信号,因而大大提高了通信速率和通信距离。