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

上传人:b****4 文档编号:3636922 上传时间:2022-11-24 格式:DOCX 页数:12 大小:730.40KB
下载 相关 举报
广州大学单片机原理与接口技术实验串行通讯实验.docx_第1页
第1页 / 共12页
广州大学单片机原理与接口技术实验串行通讯实验.docx_第2页
第2页 / 共12页
广州大学单片机原理与接口技术实验串行通讯实验.docx_第3页
第3页 / 共12页
广州大学单片机原理与接口技术实验串行通讯实验.docx_第4页
第4页 / 共12页
广州大学单片机原理与接口技术实验串行通讯实验.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

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

《广州大学单片机原理与接口技术实验串行通讯实验.docx》由会员分享,可在线阅读,更多相关《广州大学单片机原理与接口技术实验串行通讯实验.docx(12页珍藏版)》请在冰豆网上搜索。

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

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

广州大学学生实验报告

实验课程名称

单片机原理与接口技术实验

成绩

 

实验项目名称

串行通讯实验

指导老师

 

一、实验目的

二、实验原理

三、使用仪器、材料

四、实验步骤

五、实验过程原始记录(数据、图表、计算等)

六、实验结果及分析

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 equ08002h ;位控制口

OUTSEG equ08004h ;段控制口

IN   equ08001h ;键盘读入口

HasRcvequ 20h.0 ;接收标志位

LEDBufequ 40h  ;显示缓冲

RCVBufequ 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     ;键值=列X4+行

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  ;DISABLEALLINTERRUPT

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 语句前,去掉anla,#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、说明实验程序采用的是哪种串行通讯方式。

根据语句MOVSCON,#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,所以会造成累积误差。

 

 

 

 

继续阅读

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1