立即注册 登录
返回首页

uid:249645的个人空间

日志

单片机串行口与PC机通讯实验

已有 858 次阅读2017-11-15 14:31

一.实验要求 

利用8031单片机串行口,实现与PC机通讯。 

本实验实现以下功能,将从实验机键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到实验机的数码管上。 

二.实验目的 

1.掌握串行口工作方式的程序设计,掌握单片机通讯的编制。 

2.了解实现串行通讯的硬环境,数据格式的协议,数据交换的协议。 

3.了解PC机通讯的基本要求。 

三.实验电路及连线  

实验电路已在实验机监控电路上构成。 

CS8279接8700H。 模块中的十个短路套都套在8279侧。 

8279状态口地址为8701H;8279数据口地址为8700H; 

四.实验说明 

1.当用GR命令执行程序时,实验机内部会将8031串行口电路切换与PC机通讯,无须连线。 

2.程序执行前,进入LCA51,加载程序后,才进入调试菜单工具中的对话窗口,然后执行GR0,就可实行单片机串行口与PC机通信实验。 

五.实验程序框图  

     
六.实验程序:  
Z8279 EQU 8701H ;8279 状态/命令口地址 
D8279 EQU 8700H ;8279 数据口地址 
LEDMOD EQU 00H ;左边输入 八位字符显示 
               ;外部译码键扫描方式,双键互锁 
LEDFEQ EQU 2FH ;扫描速率 
LEDCLS EQU 0C1H ;清除显示 RAM 
LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址 
READKB EQU 40H ;读 FIFO RAM 地址 0 的命令字 

ORG 0000H 
AJMP START 
ORG 0040H 
START: 
MOV SP,#60H 
LCALL INIT8279 ;初始化8279 
MOV SCON,#50H ;串口 方式 1 
MOV TMOD,#20H ;T1 方式 1 
MOV TL1,#0FDH ;波特率 9600 的常数 
MOV TH1,#0FDH 
SETB TR1 ;开中断 
SETB ET1 
SETB EA 
WAIT: 
JBC RI,DIS_REC ;是否接收到数据 
LCALL GETKEY ;读键盘 
CJNE A,#0FFH,WAIT ;是否有键输入 
MOV SBUF,B ;串口输出键盘输入的值 
NOP 
SS: JBC TI,WAIT ;是否发送完毕 
SJMP SS 

DIS_REC: 
MOV A,SBUF ;读串口接收到的数据 
CLR C 
SUBB A,#30H ;以下判定输入是否在0-F 
JC ERROR 
SUBB A,#0AH 
JNC DIS_REC1 
ADD A,#0AH 
SJMP DIS_REC2 
DIS_REC1: 
SUBB A,#7H 
JC ERROR 
SUBB A,#6H 
JNC ERROR 
ADD A,#10H 
DIS_REC2: 
MOV R4,#00H 
MOV R5,A 
LCALL DISLED ;显示输入的数字(0-F) 
ERROR: AJMP WAIT 

INIT8279: ;8279初始化子程序 
PUSH DPH ;保存现场 
PUSH DPL 
PUSH ACC 
LCALL DELAY ;延时 
MOV DPTR ,#Z8279 
MOV A,#LEDMOD ;置8279工作方式 
MOVX @DPTR,A 
MOV A,#LEDFEQ ;置键盘扫描速率 
MOVX @DPTR,A 
MOV A,#LEDCLS ;清除 LED 显示 
MOVX @DPTR,A 
POP ACC ;恢复现场 
POP DPL 
POP DPH 
RET 
               ;读取键盘子程序 
               ;输入: 无 ; 输出: B: 读到的键码 A: 按键的标志 
GETKEY: PUSH DPH ;保存现场 
PUSH DPL 
PUSH PSW 
MOV DPTR,#Z8279 
MOVX A,@DPTR ;读8279状态 
ANL A,#07H ;屏蔽D7-D3 
JNZ GETVAL ;判断是否有键输入 
MOV A,#0H ;置标志(无键输入) 
SJMP NKBHIT 
GETVAL: MOV A,#READKB ;读 FIFO RAM 命令 
MOVX @DPTR,A 
MOV DPTR,#D8279 
MOVX A,@DPTR ;读键 
ANL A,#0FH ;屏蔽 SHIFT 和 CTRL 键 
MOV DPTR,#KEYCODE ;键码表起始地址 
MOVC A,@A+DPTR ;查表 
MOV B,A ;置返回键值 
MOV A,#0FFH ;置标志(有键输入) 
NKBHIT: POP PSW ;恢复现场 
POP DPL 
POP DPH 
RET 
              ;显示字符子程序 
              ;输入: R4,位置 R5,值 
DISLED: PUSH DPH ;保存现场 
PUSH DPL 
PUSH ACC 
MOV A,#LEDWR0 ;置显示起始地址 
ADD A,R4 ;加位置偏移量 
MOV DPTR,#Z8279 
MOVX @DPTR,A ;设定显示位置 
MOV DPTR,#LEDSEG ;置显示常数表起始位置 
MOV A,R5 
MOVC A,@A+DPTR ;查表 
MOV DPTR,#D8279 
MOVX @DPTR,A ;显示数据 
POP ACC ;恢复现场 
POP DPL 
POP DPH 
RET 

DELAY: ;延时子程序 
PUSH 0 ;保存现场 
PUSH 1 
MOV 0,#0H 
DELAY1: MOV 1,#0H 
DJNZ 1,$ 
DJNZ 0,DELAY1 
POP 1 ;恢复现场 
POP 0 
RET 
                 ;LED显示常数表 
LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7' 
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F' 
DB 0BFH,086H,0DBH,0CFH,0E6H,0EDH,0FDH,087H ;'0.,1.,2.,3.,4.,5.,6.,7.' 
DB 0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H ;'8.,9.,A.,B.,C.,D.,E.,F.' 
DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_, ,I,O,P, ' 
                ;键盘键码表 
KEYCODE:DB 30H,31H,32H,33H,34H,35H,36H,37H ;'1,2,Q,W,A,S,+,Z' 
DB 38H,39H,41H,42H,43H,44H,45H,46H ;'3,4,E,R,D,F,X,C' 
DB 47H,48H,49H,4AH,4BH,4CH,4DH,4EH ;'5,6,T,Y,G,H,V,B' 
END 

路过

鸡蛋

鲜花

握手

雷人

全部作者的其他最新日志

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部