为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

广州大学单片机原理与接口技术实验串行通讯实验

2019-09-16 18页 doc 42KB 37阅读

用户头像

is_852287

暂无简介

举报
广州大学单片机原理与接口技术实验串行通讯实验广州大学学生实验报告 实验课程名称 单片机原理与接口技术实验 成绩   实验项目名称 串行通讯实验 指导老师   一、 实验目的 二、 实验原理 三、 使用仪器、材料 四、 实验步骤 五、 实验过程原始记录(数据、图表、计算等) 六、 实验结果及分析 1、实验目的 1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。 2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。 3、学习串口通讯的中断方式的程序编写方法。 二、实验原理 显示电路和键盘电路和实验七一致。...
广州大学单片机原理与接口技术实验串行通讯实验
广州大学学生实验 实验课程名称 单片机原理与接口技术实验 成绩   实验项目名称 串行通讯实验 指导老师   一、 实验目的 二、 实验原理 三、 使用仪器、材料 四、 实验步骤 五、 实验过程原始记录(数据、图表、计算等) 六、 实验结果及 1、实验目的 1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的。 2、了解实现串行通讯的硬环境、数据格式的、数据交换的协议。 3、学习串口通讯的中断方式的程序编写方法。 二、实验原理 显示电路和键盘电路和实验七一致。 串口连线如下: 连线 连接孔1 连接孔2 1 甲方TXD 乙方RXD 2 甲方RXD 乙方TXD 3 甲方GND 乙方GND 4 KEY/LED_CS CS0       1、8051RXD、TXD接线柱在POD51/96仿真板上。 2、通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。也可以将本机的TXD接到RXD上,这样按下的键,就会在本机LED上显示出来。 3、若想与标准的RS232设备通信,就要做电平转换,输出时要将TTL电平换成RS232电平,输入时要将RS232电平换成TTL电平。可以将仿真板上的RXD、TXD信号接到实验板上的“用户串口接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的RS232设备。可以用实验仪上的逻辑分析仪采样串口通信的波形。 目的是利用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,另一侧为接收方。发送方读入按键值,并发送给接收方,接收方收到数据后在LED上显示。 实验程序框图: 3、使用仪器、材料 1、LAB6000 通用微控制器实验系统。 2、计算机,WAVE 集成调试软件。 3、连线若干。 四、实验步骤 1、编制程序。 2、进行实验线路的接线。 3、按要求进行实验系统的联接与启动。 4、输入程序并检查,保存程序,编译程序。 5、用示波器观测串口线上数据的变化 5、实验过程原始记录 实验程序如下: OUTBIT  equ 08002h  ; 位控制口 OUTSEG  equ 08004h  ; 段控制口 IN      equ 08001h  ; 键盘读入口 HasRcv equ  20h.0  ; 接收标志位 LEDBuf equ  40h    ; 显示缓冲 RCVBuf equ  50H    ; 接收缓冲 ORG    0000H LJMP    START ; 串行口中断程序 ORG    0023H JNB    TI,S0_R CLR    TI NOP SJMP    S0_RET S0_R:                          ; 接收数据 CLR    RI MOV    RCVBUF,SBUF    ; 保存数据 SETB    HasRcv        ; 提示收到数据 NOP S0_RET: RETI LEDMAP:              ; 八段管显示码 db    3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db    7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h Delay:              ; 延时子程序 mov  r7, #0 DelayLoop: djnz  r7, DelayLoop djnz  r6, DelayLoop ret DisplayLED: mov  r0, #LEDBuf mov  r1, #6          ; 共6个八段管 mov  r2, #00100000b  ; 从左边开始显示 Loop: mov  dptr, #OUTBIT mov  a, #0 movx  @dptr, a        ; 关所有八段管 mov  a, @r0 mov  dptr, #OUTSEG movx  @dptr,a mov  dptr, #OUTBIT mov  a, r2 movx  @dptr, a        ; 显示一位八段管 mov  r6, #1 call  Delay mov  a, r2          ; 显示下一位 rr    a mov  r2, a inc  r0 djnz  r1, Loop ret TestKey: mov  dptr, #OUTBIT mov  a, #0 movx  @dptr, a        ; 输出线置为0 mov  dptr, #IN movx  a, @dptr        ; 读入键状态 cpl  a anl  a, #0fh        ; 高四位不用 ret KeyTable:                    ; 键码定义 db    16h, 15h, 14h, 0ffh db    13h, 12h, 11h, 10h db    0dh, 0ch, 0bh, 0ah db    0eh, 03h, 06h, 09h db    0fh, 02h, 05h, 08h db    00h, 01h, 04h, 07h GetKey: mov  dptr, #OUTBIT mov  P2, dph mov  r0, #Low(IN) mov  r1, #00100000b mov  r2, #6 KLoop: mov  a, r1          ; 找出键所在列 cpl  a movx  @dptr, a cpl  a rr    a mov  r1, a          ; 下一列 movx  a, @r0 cpl  a anl  a, #0fh jnz  Goon1          ; 该列有键入 djnz  r2, KLoop mov  r2, #0ffh      ; 没有键按下, 返回 0ffh sjmp  Exit Goon1: mov  r1, a          ; 键值 = 列 X 4 + 行 mov  a, r2 dec  a rl    a rl    a mov  r2, a          ; r2 = (r2-1)*4 mov  a, r1          ; r1中为读入的行值 mov  r1, #4 LoopC: rrc  a              ; 移位找出所在行 jc    Exit inc  r2              ; r2 = r2+ 行值 djnz  r1, LoopC Exit: mov  a, r2          ; 取出键码 mov  dptr, #KeyTable movc  a, @a+dptr mov  r2, a WaitRelease: mov  dptr, #OUTBIT  ; 等键释放 clr  a movx  @dptr, a mov  r6, #10 call  Delay call  TestKey jnz  WaitRelease mov  a, r2 ret START: MOV  SP,  #60H MOV  IE,  #0    ; DISABLE ALL INTERRUPT MOV  TMOD,#020H  ; 定时器1工作于方式2 (8位重装) MOV  TH1, #0F3H  ; 波特率?2400BPS @ 12MHz MOV  TL1, #0F3H ANL  PCON,#07FH  ; SMOD 位清零 orl  PCON,#80h MOV  SCON,#050H  ; 串行口工作方式设置 MOV  LEDBuf,  #0ffh    ; 显示 8.8.8.8. mov  LEDBuf+1, #0ffh mov  LEDBuf+2, #0ffh mov  LEDBuf+3, #0ffh mov  LEDBuf+4, #0 mov  LEDBuf+5, #0 SETB  TR1 SETB  ES SETB  EA MLoop: jb  HasRcv, RcvData  ; 收到数据? call  DisplayLED      ; 显示 call  TestKey          ; 有键入? jz    MLoop            ; 无键入, 继续显示 call  GetKey          ; 读入键码 MOV  SBUF,A LJMP  MLoop RcvData: clr  HasRcv          ; 是 mov  a, RcvBuf        ; 显示数据 mov  b,a anl  a,#0fh          ; 显示低位 mov  dptr, #LEDMap movc  a, @a+dptr mov  LEDBuf+5, a mov  a,b swap  a                ; 显示高位 anl  a,#0fh mov  dptr, #LEDMap movc  a, @a+dptr mov  LEDBuf+4, a ljmp  MLoop END      指导上的程序缺少显示高位键码的部分,而且把高位键码覆盖了,而且缺少了循环的入口地址,这里把循环入口地址放在jb  HasRcv, RcvData  语句前,去掉anl a,#0fh 增加了显示高位键码程序段 mov  a,b swap  a                ; 显示高位 anl  a,#0fh mov  dptr, #LEDMap movc  a, @a+dptr mov  LEDBuf+4, a 实验现象: 自发自收,本机RXD连本机TXD 按下here键显示键码12 按下RST键显示键码FF 2串口助手和伟福互连连接情况如下: 显示出串口助手上的信息 六、实验结果及分析 1、 画出硬件连线示意图。 单机自发自收: key/LED_CS-------CS0 本机RXD----------本机TXD 两台机互连: 甲方                乙方      甲方key/LED_CS-------甲方CS0 乙方key/LED_CS-------乙方CS0 2、 说明程序的执行是否已实现程序设计的要求。 改进后的程序已实现了利用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,另一侧为接收方。发送方读入按键值,并发送给接收方,接收方收到数据后在LED上显示的功能。 3、 说明实验程序采用的是哪种串行通讯方式。 根据语句MOV SCON,#050H,可知使用的串行通讯方式是方式1,该方式波特率可变,由定时器一的预设值和SMOD位决定波特率,是常用的通信方式。 4、 据实验系统的振荡器,计算实验程序的波特率。 实验系统的晶振为6Mhz,根据语句 MOV  TH1, #0F3H  ANL  PCON,#07FH  orl  PCON,#80h 波特率=(2^SMOD/32)*f/12/(2^8-X) 其中f为晶振频率,X为定时器1预设值,6MHZ/16/12/13 约等于2403.8,想设定的波特率应该是2400,这是由于使用6MHZ的晶振造成的,如果使用11.0592MHZ的晶振,则设定常用波特率时不会出现误差,另外单片机波特率误差对2片同晶振同型号单片机之间通信不会有影响,例如本实验双机都是以2403.8的实际波特率在通信。而波特率误差对计算机和单片机之间通信有影响,应为计算机波特率较准,软件设定为2400就为2400,而此时单片机的实际波特率依然是2403.8,所以会造成累积误差。         继续阅读
/
本文档为【广州大学单片机原理与接口技术实验串行通讯实验】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索