★8.1.4 串行接口通信测试
通过测试单片机串行接口通信的原理,完成串行接口扩充程序的仿真。
1 单片机按键输入显示与PC双机通信
从如图8-4所示的原理图中可看出,单片机的P1口连接4×4键盘,按键开关输入数字字符,可在共阳极数码管上显示出来,单片机可通过串行接口与PC相连,串行接口通信完成收发数据。
图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所示是两片单片机(甲机和乙机)之间双向通信的原理图。加载的仿真程序可参考前面章节的内容。
图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
图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发送的数字字符。
图8-7 单片机与PC串行接口通信仿真