1、乙方TXD3甲方GND乙方GND4KEY/LED_CSCS01、8051RXD、TXD接线柱在POD51/96仿真板上。2、通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。也可以将本机的TXD接到RXD上,这样按下的键,就会在本机LED上显示出来。3、若想与标准的RS232设备通信,就要做电平转换,输出时要将TTL电平换成RS232电平,输入时要将RS232电平换成TTL电平。可以将仿真板上的RXD、TXD信号接到实验板上的“用户串口接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的R
2、S232设备。可以用实验仪上的逻辑分析仪采样串口通信的波形。目的是利用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,另一侧为接收方。发送方读入按键值,并发送给接收方,接收方收到数据后在LED上显示。实验程序框图:3、使用仪器、材料1、LAB6000 通用微控制器实验系统。2、计算机,WAVE 集成调试软件。3、连线若干。四、实验步骤1、编制程序。2、进行实验线路的接线。3、按要求进行实验系统的联接与启动。4、输入程序并检查,保存程序,编译程序。5、用示波器观测串口线上数据的变化5、实验过程原始记录实验程序如下:OUTBIT equ 08002h ; 位控制口OUTSEG
3、 equ 08004h 段控制口IN equ 08001h 键盘读入口HasRcv equ 20h.0 接收标志位LEDBuf equ 40h 显示缓冲RCVBuf equ 50H 接收缓冲ORG 0000HLJMP START; 串行口中断程序 0023HJNB TI,S0_RCLR TINOPSJMP S0_RETS0_R: 接收数据 RIMOV RCVBUF,SBUF 保存数据SETB HasRcv 提示收到数据S0_RET:RETILEDMAP: 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h 7fh, 6fh, 77h, 7ch, 39
4、h, 5eh, 79h, 71hDelay: 延时子程序mov r7, #0DelayLoop:djnz r7, DelayLoop r6, DelayLoopretDisplayLED: r0, #LEDBuf r1, #6 共6个八段管 r2, #00100000b 从左边开始显示Loop: dptr, #OUTBIT a, #0movx dptr, a 关所有八段管 a, r0 dptr, #OUTSEG dptr,a a, r2 显示一位八段管 r6, #1call Delay a, r2 显示下一位rr a r2, ainc r0 r1, LoopTestKey: 输出线置为0 dp
5、tr, #IN a, dptr 读入键状态cplanl a, #0fh 高四位不用KeyTable: 键码定义 16h, 15h, 14h, 0ffh 13h, 12h, 11h, 10h 0dh, 0ch, 0bh, 0ah 0eh, 03h, 06h, 09h 0fh, 02h, 05h, 08h 00h, 01h, 04h, 07hGetKey: P2, dph r0, #Low(IN) r1, #00100000b r2, #6KLoop: a, r1 找出键所在列 dptr, a r1, a 下一列 a, #0fhjnz Goon1 该列有键入 r2, KLoop r2, #0ffh
6、 没有键按下, 返回 0ffhsjmp ExitGoon1: 键值 = 列 X 4 + 行decrl r2, a r2 = (r2-1)*4 r1中为读入的行值 r1, #4LoopC:rrc a 移位找出所在行jc r2 r2 = r2+ 行值 r1, LoopCExit: 取出键码 dptr, #KeyTablemovc a, a+dptrWaitRelease: dptr, #OUTBIT 等键释放clr r6, #10 TestKey WaitReleaseSTART: SP, #60H IE, #0 DISABLE ALL INTERRUPT TMOD,#020H 定时器1工作于方式
7、2 (8位重装) TH1, #0F3H 波特率?2400BPS 12MHz TL1, #0F3HANL PCON,#07FH SMOD 位清零orl PCON,#80h SCON,#050H 串行口工作方式设置 LEDBuf, #0ffh 显示 8.8.8.8. LEDBuf+1, #0ffh LEDBuf+2, #0ffh LEDBuf+3, #0ffh LEDBuf+4, #0 LEDBuf+5, #0 TR1 ES EAMLoop:jb HasRcv, RcvData 收到数据? DisplayLED 显示 TestKey 有键入?jz MLoop 无键入, 继续显示 GetKey 读入
8、键码 SBUF,A MLoopRcvData: 是 a, RcvBuf 显示数据 b,a a,#0fh 显示低位 dptr, #LEDMap LEDBuf+5, a a,bswap 显示高位 a,#0fh LEDBuf+4, aljmpEND 指导书上的程序缺少显示高位键码的部分,而且把高位键码覆盖了,而且缺少了循环的入口地址,这里把循环入口地址放在jb 语句前,去掉anl a,#0fh增加了显示高位键码程序段 实验现象:自发自收,本机RXD连本机TXD按下here键显示键码12按下RST键显示键码FF2串口助手和伟福互连连接情况如下:显示出串口助手上的信息六、实验结果及分析1、 画出硬件连线
9、示意图。单机自发自收:key/LED_CS-CS0本机RXD-本机TXD两台机互连:甲方 乙方甲方key/LED_CS-甲方CS0乙方key/LED_CS-乙方CS02、 说明程序的执行是否已实现程序设计的要求。改进后的程序已实现了利用单片机串行口,实现两个实验台之间的串行通讯。发送方读入按键值,并发送给接收方,接收方收到数据后在LED上显示的功能。3、 说明实验程序采用的是哪种串行通讯方式。根据语句MOV SCON,#050H,可知使用的串行通讯方式是方式1,该方式波特率可变,由定时器一的预设值和SMOD位决定波特率,是常用的通信方式。4、 据实验系统的振荡器,计算实验程序的波特率。实验系统的晶振为6Mhz,根据语句波特率=(2SMOD/32)*f/12/(28-X)其中f为晶振频率,X为定时器1预设值,6MHZ/16/12/13 约等于2403.8,想设定的波特率应该是2400,这是由于使用6MHZ的晶振造成的,如果使用11.0592MHZ的晶振,则设定常用波特率时不会出现误差,另外单片机波特率误差对2片同晶振同型号单片机之间通信不会有影响,例如本实验双机都是以2403.8的实际波特率在通信。而波特率误差对计算机和单片机之间通信有影响,应为计算机波特率较准,软件设定为2400就为2400,而此时单片机的实际波特率依然是2403.8,所以会造成累积误差。继续阅读