串行通信实验报告.docx
《串行通信实验报告.docx》由会员分享,可在线阅读,更多相关《串行通信实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
![串行通信实验报告.docx](https://file1.bdocx.com/fileroot1/2023-2/1/551f11b9-e25a-462c-9c9b-f7e496062ff5/551f11b9-e25a-462c-9c9b-f7e496062ff51.gif)
串行通信实验报告
串行通信实验报告
班级姓名学号日期
一、实验目的:
1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。
2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。
3、学习串口通讯的程序编写方法。
二、实验要求
1.单机自发自收实验:
实现自发自收。
编写相应程序,通过发光二极管观察收发状态。
2.利用单片机串行口,实现两个实验台之间的串行通讯。
其中一个实验台作为发送方,另一侧为接收方。
三、实验说明
通讯双方的RXDTXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXDTXD直接交叉连接。
也可以将本机的TXD接到RXD±0
连线方法:
在第一个实验中将一台实验箱的RXD和TXD相连,用P1.0连接发光二极管。
波特率定为600,SMOD=0
在第二个实验中,将两台实验箱的RXD和TXD交叉相连。
编写收发程序,一台实验箱作为发送方,另一台作为接收方,编写程序,从内部数据存储器20H~3FH单元中共32个数据,采用方式1串行发送出去,波特率设为600。
通过运行程序观察存储单元内数值的变化。
四、程序
甲方发送程序如下:
ORG0000H
LJMPMAIN
ORG0023H
LJMPCOM」NT
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
LJMP
MAIN
ORG
0023H
LJMP
COM_INT
ORG
1000H
MAIN:
MOVSP,#53H
ACALLRECEI
HERE:
SJMPHERE
RECEI:
MOVR0,#78H
MOV
TMOD,#20H
MOV
TH1,#0F3H
MOV
TL1,#0F3H
MOV
PCON,#80H
SETB
TR1
MOV
SCON,#50H
MOV
IE,#90H
CLR
F0
CLR
7FH
WAIT:
JNB7FH,WAIT
RET
COM_INT:
PUSHDPL
PUSH
DPH
PUSH
Acc
CLR
RI
JBF0,R_DATA
MOV
A,SBUF
MOV
@R0,A
DEC
R0
CJNE
R0,#74H,RETN
SETB
F0
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
MOV
A,75H
CJNE
A,77H,RETN
CLR
ES
CLR
EA
SETB
7FH
SJMP
RETN
END
五、实验过程中遇到的主要问题OUTBITequ08002h;位控制口OUTSEGequ08004h;段控制口INequ08001h;键盘读入口
HasRcvequ20h.0;接收标志位
LEDBufequ40h;显示缓冲
RCVBufequ50H;接收缓冲
ORG0000HLJMPSTART
;串行口中断程序
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,DelayLoopdjnzr6,DelayLoopret
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;显示一位八段管
movr6,#1
callDelay
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:
;键码定义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:
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
decarlarla
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
;取出键码
movdptr,#KeyTablemovca,@a+dptrmovr2,a
WaitRelease:
movclrmovx
dptr,#OUTBITa
@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
movmovmovSETB
LEDBuf+3,#0ffh
LEDBuf+4,#0
LEDBuf+5,#0
TR1
SETB
ES
SETB
EA
;mov
sbuf,a
;jnbti,$
MLoop:
jb
HasRcv,RcvData
;收到数据?
call
DisplayLED
;显示
call
TestKey
;有键入?
jz
MLoop
;无键入,继续显示
call
GetKey
;读入键码
anl
a,#0fh;
通讯口输出键码
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
六、实验后的心得体会