★8.1.4  串行接口通信测试

★8.1.4 串行接口通信测试

通过测试单片机串行接口通信的原理,完成串行接口扩充程序的仿真。

1 单片机按键输入显示与PC双机通信

从如图8-4所示的原理图中可看出,单片机的P1口连接4×4键盘,按键开关输入数字字符,可在共阳极数码管上显示出来,单片机可通过串行接口与PC相连,串行接口通信完成收发数据。

978-7-111-54295-7-Chapter08-7.jpg

图8-4 PC与单片机双机通信原理图

程序如下。

ORG 0000H

AJMP START

START:MOV TMOD,#20H;定时器1工作在工作方式2

MOV TL1,#253;设置波特率为9600bit/s

MOV TH1,#253

SETB TR1;启动定时

MOV SCON,#50H;串行接口工作于方式1,允许接收

MAIN:JB RI,JIESHOU;检测是否收到数据

MOV R2,#04H;进行行扫描,共4行

MOV R7,#11101111B;列扫描初值,11101111

LOP0:MOV P1,R7;将列值送到P1口

JB P1.0,LOP1;判断第0行是否按下,如果没按下转向LOP1

MOV A,#00H;第0行按下,给累加器送行值“00”

LJMP NEXT;转跳生成键值

LOP1:JB P1.1,LOP2;判断第1行是否按下,如果没按下转向LOP2

MOV A,#04H;第1行按下,给累加器送行值“04”

LJMP NEXT;转跳生成键值

LOP2:JB P1.2,LOP3;判断第2行是否按下,如果没按下转向LOP3

MOV A,#08H;第2行按下,给累加器送行值“08”

LJMP NEXT;转跳生成键值

LOP3:JB P1.3,LOP4;判断第3行是否按下,如果没按下转向LOP4

MOV A,#0CH;第3行按下,给累加器送行值“0C”

LJMP NEXT;转跳生成键值

LOP4:PUSH ACC;A中存的是行值

MOV A,R7;如果第0列所对应的行都没有按下,则扫描第1列

RL A

MOV R7,A

POP ACC

DJNZ R2,LOP0;判断4行4列是否扫描结束,若未结束,则继续扫描

LJMP MAIN;若扫描4行4列结束,则重新扫描

NEXT:CLR C

PUSH ACC;保存行值

MOV 30H,A;将行值存在内存单元30H里面

MOV A,#04H

SUBB A,R2;算出列值,并存在A中

ADD A,30H;生成键值,A=行基值+列值

MOV R6,A;R6中存键值

POP ACC;将行值重新放回累加器中

MOV A,R6;将键值送到ACC累加器中

MOV SBUF,A;发送键值

JNB TI,$

CLR TI

AJMP MAIN

JIESHOU:CLR RI

MOV A,SBUF;将接收到的数据送到累加器

MOV DPTR,#TABLE;至TABLE中取段选码

MOVC A,@A+DPTR

MOV P2,A;将选中的段选码送到P2口显示

AJMP MAIN

TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H;共阳极段选码表

DB 92H,82H,0F8H,80H,90H,88H

DB 83H,0C6H,0A2H,86H,84H

END

由图8-4所示的电路原理图,在加入仿真程序后测试,可直接通过按键按下的状态在数码管显示器上显示输出对应的数字字符,而单片机可通过串口与PC相连,串行接口通信即完成收发数据。如图8-5所示是两片单片机(甲机和乙机)之间双向通信的原理图。加载的仿真程序可参考前面章节的内容。

978-7-111-54295-7-Chapter08-8.jpg

图8-5 单片机之间(甲机和乙机)双向通信原理图

2 单片机发送数据给PC

单片机与PC间的虚拟通信电路原理图如图8-6所示。使用时要通过通信电缆与PC串行通信口(COM)接好。单片机的发送脚TXD经MAX232电平转换后接PC的接收引脚,PC的发送脚RXD经电平转换后接单片机的接收引脚,接地端相连。单片机和PC之间可以进行虚拟通信。在仿真界面选择“Virtual Terminal”选项打开虚拟终端窗口,可显示字符。

程序如下:

ORG 0000H

SJMP START

ORG 0030H

START:MOV SP,#5FH;初始化堆栈

MOV SCON,#10000000B;串行接口工作方式2

978-7-111-54295-7-Chapter08-9.jpg

图8-6 单片机发送字符给PC原理图

MOV A,#0AEH;待送的数据

SEND:MOV C,P

MOV TB8,C

MOV SBUF,A

LOOP:JBC TI,NEXT;判断是否送完?

AJMP LOOP

NEXT:ACALL DELAY;延时

CPL A;A的值AAH取反之后是55H

LJMP SEND

DELAY: ;延时程序

MOV R7,#100

D1:MOV R6,#250

D2:NOP

NOP

NOP

NOP

DJNZ R6,D2

DJNZ R7,D1

RET

END

单片机与PC串行接口通信仿真接口电路如图8-7所示。在图中单片机即可向PC发送字符串。在仿真界面中选择“Virtual Terminal”选项打开虚拟终端窗口,可显示输入字符串,数码管还可显示PC发送的数字字符。

978-7-111-54295-7-Chapter08-10.jpg

图8-7 单片机与PC串行接口通信仿真