微机实验:双机双向串行通讯

单片机实验

27人已加入

描述

微机实验:双机双向串行通讯

实验目的

掌握串行通讯的原理和编程

实验内容:

在两次实验板之间进行串行通讯,其连接线路如图9-1示。

本实验将在两机之间实现双向通讯,既可以甲机向乙机发送,也可以乙机向甲机发送,两机具有相同的硬件配置和程序软件。

实验中,发送的数据由键盘输入。为了获得16进制数,键盘布置如同实验八中图8-2。两机的显示格式也相同,如图9-2示。

在一台机上,利用键盘输入16进制数后,一方面显示于本机的最左两只数码管,另一方面又通过串行通讯接口传送到另一台机上。该机接收到数据后,在本机的最右两只数码管上显示出来。

为实现上述功能,流程框图见图9-3。参考程序如下。

ORG   0000H

LJMP  MAIN

ORG  0023

LJMP  COM

ORG  0780

;主程序

MAIN:

MOV  SP, #60H

;设堆栈

MOV  DPTR, #0B000H

;8155初始化

MOV  A, #03H

;A、B口输出,C口输入

MOVX  @DPTR, A

MOV  A, #11H

;初始显示全“一”

MOV  R0, #2AH

 MP0:

MOV  @R0, A

INC  R0

CJNE  R0, #30H, MP0

MOV  TMOD, #20H

;T1方式

MOV  TH1, #0F4H

;波特率

MOV  TL1, #0F4H

SETB  TR1

;启动T1

MOV  SCON, #50H

;串行口方式,允许接收

MOV  PCON, #00H

MOV  PSW, #00H

CLR  00H

;标志“00H”清零

SETB  EA

;开CPU中断

SETB  ES

;开串行中断

DIS:

LCAL  DISP

;调用显示

LCAL  KS1

;键按下?

JZ  MP1

;无键按下,转

LCALL  KEYP

;键值送2AH、2BH

MP1:

SETB  RS0

;选用工作区1

MOV  R0, #2AH

;置传送数据块首地址

MOV  SBUF, @R0

;发送第一字节

INC  R0

CLR  RS0

;恢复工作区0

LJMP  DIS

ORG  07D0

COM:

PUSH  PSW

;PSW入栈保护

SETB  RS0

;工作区1

JB  R1 ,RX

;若是接收,转

 TX:

CLR  T1

;发送

CJNE  R0, #2C, TX1

;未发送完,转

SJMP  TX2

;发送完

TX1:

MOV  SBUF, @R0

;继续发送

INC  R0

TX2:

POP  PSW

;恢复PSW

RETI

 RX:

JB  00H, RX1

;接收的不是第一个数据,转

MOV  R0, #2E

;置接收数据块的首地址

SETB  00H

 RX1:

MOV  @R0, SBUF

;接收

INC  R0

CJNE  R0, #30H, RX2

;未接收完,转

CLR “00”

;接收完,“00”位复0

 RX2:

POP  PSW

RETI

实验要求:

将两次实验板按图9-1接线。把上述程序同时输入甲、乙两机,然后连续运行。在一台机上按键输入发送数据,检查另一台机上的接线数据。如出现不正常,可用单步或断点法检查。

思考题:

1、上述程序上,通讯波特率是多少?

2、串行通讯程序中,如何开始发送数据?又如何判别该数据已经发送?

3、串行通讯程序中,如何判断已经接收数据?又如何读出接收数据?

4、把甲机CPU内RAM 30~3FH的一组数据向乙机发送,乙机收到的数据放在片内RAM 30~~3FH。对显示和键输入没有要求。试编写程序。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分