单片机原理及应用第2版课后答案第6章习题答案

发布时间 : 星期日 文章单片机原理及应用第2版课后答案第6章习题答案更新完毕开始阅读

出的校验和进行比较,向甲机发送一个状态字,表示正确(00H)或出错(0FFH),出错则要求甲机重发。甲机收到收到乙机发送的接收正确应答信号(00H)后,即结束发送,否则,就重发一次数据。

甲机采用查询方式进行数据发送,乙机采用中断方式进行数据接收。双方约定传输波特率为2400bps,两机主频均为11.059MHz,双机串行口都工作于方式1,查表6-2可知SMOD=0,定时器T1采用工作模式2,初值为F4H。 甲机发送子程序:

ORG 2000H

SEND: MOV TMOD, #20H ; 定时器1设为模式2

MOV TL1, #0F4H MOV TH1, #0F4H ; 置定时器初值 SETB TR1 ; 启动T1 MOV SCON, #50H ; 设串行口为方式2 MOV PCON, #00H ; SMOD=0

TLLS: MOV SBUF, #0AAH ; 发送请求接收信号 WFS1: JBC TI, RYD1 ; 等待发送

SJMP WFS1

RYD1: JBC RI, RYD2 ; 等待乙机回答

SJMP RYD1 RYD2: MOV A, SBUF ; 接收应答信号

XRL A, #0BBH

JNZ TLLS ; 乙机未准备好,继续联络

SDD1: MOV R0, #40H ; 首地址40H→R0

MOV R1, #10H ; 数据个数→R1 MOV R2, #00H ; 清校验和寄存器

SDD2: MOV SBUF, @R0 ; 发送一个数据

MOV A, R2 ADD A, @R0 ; 求校验和 MOV R2, A ; 保存校验和 INC R0

WFS2: JBC TI, SDD3 ; 等待发送

SJMP WFS2

SDD3: DJNZ R1, SDD2 ; 数据块是否发送完

MOV SBUF, R2 ; 发送校验和

WFS3: JBC TI, RYD3

SJMP WFS3

RYD3: JBC RI, RYD4 ; 等待乙机回答

SJMP RYD3

RYD4: MOV A, SBUF

JNZ SDD1 ; 回答出错则重发

RET

乙机接收子程序:

ORG 2000H

RECV:

MOV TMOD, #20H MOV TL1, #0F4H MOV TH1, #0F4H SETB TR1 MOV SCON, #50H MOV PCON, #00H MOV R0, #40H MOV R1, #10H MOV 50H, #00H SETB 7FH SETB 7EH SETB ES SETB EA LOOP:

SJMP

LOOP 中断服务子程序:

CLR

EA

CLR RI JB 7FH, RCMD JB 7EH, DATA MOV A, SBUF CJNE A, 50H, ERR MOV A, #00H MOV

SBUF, A WFS1: JNB

TI, WFS1 CLR TI SJMP

RETN ERR: MOV

A, #0FFH MOV

SBUF, A WFS2: JNB

TI, WFS2 CLR TI SJMP

AGAN

RCMD: MOV

A, SBUF XRL A, #0AAH JZ TYDX SJMP

RETN TYDX: MOV SBUF, #0BBH WFS3: JNB

TI, WFS3 CLR TI CLR 7FH SJMP

RETN

; 定时器1设为模式2 ; 置定时器初值 ; 启动T1 ; 设串行口为方式2 ; SMOD=0 ; 首地址40H→R0 ; 数据个数→R1 ; 清校验和寄存器 ; 标志位初始置1 ; 允许接收中断 ; 开中断 ; 等待中断

; 清中断 ; 是请求接收信号吗 ; 是数据块吗 ; 接收校验和 ; 判断发送是否正确 ; 正确,发00H ; 等待发送 ; 出错,发0FFH ; 等待发送 ; 接收甲机请求信号 ; 发送应答信号0BBH ; 等待发送

DATA: MOV

MOV INC ADD MOV DJNZ CLR SJMP

AGAN: SETB

SETB MOV MOV MOV

RETN: SETB

RETI

A, SBUF ; 接收数据 R0, A DPTR A, 50H ; 求校验和 50H, A ; 保存校验和 R1, RETN

7EH ; 数据接收完后清数据标志位 RETN 7FH 7EH ; 恢复标志位 DPTR, #2000H ; 首地址2000H→DPTR R1, #10 ; 数据个数→R1 50H, #00H ; 清校验和寄存器 EA ; 开中断

9.8051以方式2进行串行通信,假定波特率为1200bps,第9位作奇偶校验位,以中断方式发送。请编写程序。 答案: 主程序:

ORG

MAIN: MOV

MOV MOV MOV MOV SETB SETB

LOOP: SJMP

2000H

SCON, #80H PCON, #00H R0, #30H R1, #50H R2, #20 ES EA LOOP

; 将串行口设置为方式2,REN=1 ; SMOD=0

; 发送数据区首地址→R0 ; 接收数据区首地址→R1 ; 置发送数据个数→R2 ; 开中断 ; 等待中断

中断服务子程序:

ORG 0023H AJMP SOUT ; 转至中断服务程序 ORG 0200H

SOUT: CLR TI ; 清发送中断标志

DJNZ R2, LOOP1 ; 数据未发送完,继续发送 SJMP RR1 ; 发送完返回

LOOP1: MOV A, @R0 ; 取发送数据到A

MOV C, PSW.0 MOV TB8, C MOV SBUF, A ; 发送数据 INC R0 ; 指向下一个数据

RR1: RETI

10.8051以方式3进行串行通信,假定波特率为1200bps,第9位作奇偶验位,以查询方式接收。请编写程序。

答案:

ORG 2000H

RECV: MOV TMOD, #20H ; 定时器1设为模式2

MOV TL1, #0E8H MOV TH1, #0E8H ; 置定时器初值 SETB TR1 ; 启动T1 MOV SCON, #0D0H ; 将串行口设置为方式3,REN=1 MOV PCON, #00H ; SMOD=0 MOV R1, #20H ; 接收数据区首地址→R1 MOV R2, #16 ; 置发送数据个数→R2

WAIT: 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单片机输入、输出电平不兼容。因此实际应用中

联系合同范文客服:xxxxx#qq.com(#替换为@)