串行通信的实验报告.docx
- 文档编号:1835328
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:10
- 大小:16.68KB
串行通信的实验报告.docx
《串行通信的实验报告.docx》由会员分享,可在线阅读,更多相关《串行通信的实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
串行通信的实验报告
串行通信实验报告
一、实验目的:
1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。
2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。
3、学习串口通讯的程序编写方法。
二、实验要求
1.单机自发自收实验:
实现自发自收。
编写相应程序,通过发光二极管观察收发状态。
2.利用单片机串行口,实现两个实验台之间的串行通讯。
其中一个实验台作为发送方,另一侧为接收方。
三、实验说明
通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。
也可以将本机的TXD接到RXD上。
连线方法:
在第一个实验中将一台实验箱的RXD和TXD相连,用P1.0连接发光二极管。
波特率定为600,SMOD=0。
在第二个实验中,将两台实验箱的RXD和TXD交叉相连。
编写收发程序,一台实验箱作为发送方,另一台作为接收方,编写程序,从内部数据存储器20H~3FH单元中共32个数据,采用方式1串行发送出去,波特率设为600。
通过运行程序观察存储单元内数值的变化。
四、程序
甲方发送程序如下:
ORG0000H
LJMPMAIN
ORG0023H
LJMPCOM_INT
ORG1000H
MAIN:
MOVSP,#53H
MOV78H,#20H
MOV77H,00H
MOV76H,20H
MOV75H,40H
ACALLTRANS
HERE:
SJMPHERE
TRANS:
MOVTMOD,#20H
MOVTH1,#0F3H
MOVTL1,#0F3H
MOVPCON,#80H
SETBTR1
MOVSCON,#40H
MOVIE,#00H
CLRF0
MOVSBUF,78H
WAIT1:
JNBTI,WAIT1
CLRTI
MOVSBUF,77H
WAIT2:
JNBTI,WAIT2
CLRTI
MOVSBUF,76H
WAIT3:
JNBTI,WAIT3
CLRTI
MOVSBUF,75H
WAIT4:
JNBTI,WAIT4
CLRTI
MOVIE,#90H
MOVDPH,78H
MOVDPL,77H
MOVXA,@DPTR
MOVSBUF,A
WAIT:
JNBF0,WAIT
RET
COM_INT:
CLRTI
INCDPTR
MOVA,DPH
CJNEA,76H,END1
MOVA,DPL
CJNEA,75H,END1
SETBF0
CLRES
CLREA
RET
END1:
MOVXA,@DPTR
MOVSBUF,A
RETI
END
乙方发送程序如下:
ORG0000H
LJMPMAIN
ORG0023H
LJMPCOM_INT
ORG1000H
MAIN:
MOVSP,#53H
ACALLRECEI
HERE:
SJMPHERE
RECEI:
MOVR0,#78H
MOVTMOD,#20H
MOVTH1,#0F3H
MOVTL1,#0F3H
MOVPCON,#80H
SETBTR1
MOVSCON,#50H
MOVIE,#90H
CLRF0
CLR7FH
WAIT:
JNB7FH,WAIT
RET
COM_INT:
PUSHDPL
PUSHDPH
PUSHAcc
CLRRI
JBF0,R_DATA
MOVA,SBUF
MOV@R0,A
DECR0
CJNER0,#74H,RETN
SETBF0
RETN:
POPAcc
POPDPH
POPDPL
RETI
R_DATA:
MOVDPH,78H
MOVDPL,77H
MOVA,SBUF
MOVX@DPTR,A
INC77H
MOVA,77H
JNZEND2
INC78H
END2:
MOVA,76H
CJNEA,78H,RETN
MOVA,75H
CJNEA,77H,RETN
CLRES
CLREA
SETB7FH
SJMPRETN
END
五、实验过程中遇到的主要问题
OUTBITequ08002h;位控制口
OUTSEGequ08004h;段控制口
INequ08001h;键盘读入口
HasRcvequ20h.0;接收标志位
LEDBufequ40h;显示缓冲
RCVBufequ50H;接收缓冲
ORG0000H
LJMPSTART
;串行口中断程序
ORG0023H
JNBTI,S0_R
CLRTI
NOP
SJMPS0_RET
S0_R:
;接收数据
CLRRI
MOVRCVBUF,SBUF;保存数据
SETBHasRcv;提示收到数据
NOP
S0_RET:
RETI
LEDMAP:
;八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
Delay:
;延时子程序
movr7,#0
DelayLoop:
djnzr7,DelayLoop
djnzr6,DelayLoop
ret
DisplayLED:
movr0,#LEDBuf
movr1,#6;共6个八段管
movr2,#00100000b;从左边开始显示
Loop:
movdptr,#OUTBIT
mova,#0
movx@dptr,a;关所有八段管
mova,@r0
movdptr,#OUTSEG
movx@dptr,a
movdptr,#OUTBIT
mova,r2
movx@dptr,a;显示一位八段管
movr6,#1
callDelay
mova,r2;显示下一位
rra
movr2,a
incr0
djnzr1,Loop
ret
TestKey:
movdptr,#OUTBIT
mova,#0
movx@dptr,a;输出线置为0
movdptr,#IN
movxa,@dptr;读入键状态
cpla
anla,#0fh;高四位不用
ret
KeyTable:
;键码定义
db16h,15h,14h,0ffh
db13h,12h,11h,10h
db0dh,0ch,0bh,0ah
db0eh,03h,06h,09h
db0fh,02h,05h,08h
db00h,01h,04h,07h
GetKey:
movdptr,#OUTBIT
movP2,dph
movr0,#Low(IN)
movr1,#00100000b
movr2,#6
KLoop:
mova,r1;找出键所在列
cpla
movx@dptr,a
cpla
rra
movr1,a;下一列
movxa,@r0
cpla
anla,#0fh
jnzGoon1;该列有键入
djnzr2,KLoop
movr2,#0ffh;没有键按下,返回0ffh
sjmpExit
Goon1:
movr1,a;键值=列X4+行
mova,r2
deca
rla
rla
movr2,a;r2=(r2-1)*4
mova,r1;r1中为读入的行值
movr1,#4
LoopC:
rrca;移位找出所在行
jcExit
incr2;r2=r2+行值
djnzr1,LoopC
Exit:
mova,r2;取出键码
movdptr,#KeyTable
movca,@a+dptr
movr2,a
WaitRelease:
movdptr,#OUTBIT;等键释放
clra
movx@dptr,a
movr6,#10
callDelay
callTestKey
jnzWaitRelease
mova,r2
ret
START:
MOVSP,#60H
MOVIE,#0;DISABLEALLINTERRUPT
MOVTMOD,#020H;定时器1工作于方式2(8位重装)
MOVTH1,#0F3H;波特率?
2400BPS@12MHz
MOVTL1,#0F3H
ANLPCON,#07FH;SMOD位清零
orlPCON,#80h
MOVSCON,#050H;串行口工作方式设置
MOVLEDBuf,#0ffh;显示8.8.8.8.
movLEDBuf+1,#0ffh
movLEDBuf+2,#0ffh
movLEDBuf+3,#0ffh
movLEDBuf+4,#0
movLEDBuf+5,#0
SETBTR1
SETBES
SETBEA
;movsbuf,a
;jnbti,$
MLoop:
jbHasRcv,RcvData;收到数据?
callDisplayLED;显示
callTestKey;有键入?
jzMLoop;无键入,继续显示
callGetKey;读入键码
anla,#0fh;通讯口输出键码
MOVSBUF,A
LJMPMLoop
RcvData:
clrHasRcv;是
mova,RcvBuf;显示数据
movb,a
anla,#0fh;显示低位
movdptr,#LEDMap
movca,@a+dptr
movLEDBuf+5,a
mova,b
swapa;显示高位
anla,#0fh
movdptr,#LEDMap
movca,@a+dptr
movLEDBuf+4,a
ljmpMLoop
END
六、实验后的心得体会
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串行 通信 实验 报告