《串行通信实验报告.doc》由会员分享,可在线阅读,更多相关《串行通信实验报告.doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、. .串行通信实验报告班级 学号 日期一、实验目的:1、掌握单片机串行口工作方式的程序设计,及简易 三线式通讯的方法。2、了解实现串行通讯的硬环境、数据格式的协议、 数据交换的协议。3、学习串口通讯的程序编写方法。二、实验要求1.单机自发自收实验:实现自发自收。编写相应程序,通过发光二极管观察收发状态。 2利用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,另一侧为接收方。三、实验说明通讯双方的RXD、TXD信号本应经过电平转换后再行穿插连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接穿插连接。也可以将本机的TXD接到RXD上。连线方法:在第一个
2、实验中将一台实验箱的RXD和TXD相连,用P1.0连接发光二极管。波特率定为600,SMOD=0。 在第二个实验中,将两台实验箱的RXD和TXD穿插相连。编写收发程序,一台实验箱作为发送方,另一台作为接收方,编写程序,从内部数据存储器20H3FH单元中共32个数据,采用方式1串行发送出去,波特率设为600。通过运行程序观察存储单元内数值的变化。四、程序甲方发送程序如下:ORG 0000H LJMP MAIN ORG 0023H LJMP _INT ORG 1000HMAIN: MOV SP,#53HMOV 78H,#20H MOV 77H,00H MOV 76H,20HMOV 75H,40H
3、ACALL TRANSHERE: SJMP HERETRANS: MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H MOV PCON,#80H SETB TR1 MOV SCON,#40H MOV IE,#00H CLR F0 MOV SBUF,78HWAIT1: JNB TI,WAIT1 CLR TI MOV SBUF,77HWAIT2: JNB TI,WAIT2 CLR TI MOV SBUF,76HWAIT3: JNB TI,WAIT3 CLR TI MOV SBUF,75HWAIT4: JNB TI,WAIT4 CLR TI MOV IE,#90H M
4、OV DPH,78H MOV DPL,77H MOVX A,DPTR MOV SBUF,AWAIT: JNB F0,WAIT RET_INT: CLR TI INC DPTR MOV A,DPH CJNE A,76H,END1 MOV A,DPL CJNE A,75H,END1 SETB F0 CLR ES CLR EA RETEND1: MOVX A,DPTR MOV SBUF,A RETI END乙方发送程序如下: ORG 0000H LJMP MAIN ORG 0023H LJMP _INT ORG 1000HMAIN: MOV SP,#53H ACALL RECEIHERE: SJMP
5、 HERERECEI: MOV R0,#78H MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H MOV PCON,#80H SETB TR1 MOV SCON,#50H MOV IE,#90H CLR F0 CLR 7FHWAIT: JNB 7FH,WAIT RET_INT: PUSH DPL PUSH DPH PUSH Acc CLR RI F0,R_DATA MOV A,SBUF MOV R0,A DEC R0 CJNE R0,#74H,RETN SETB F0RETN: POP Acc POP DPH POP DPL RETIR_DATA: MOV D
6、PH,78H MOV DPL,77H MOV A,SBUF MOVX DPTR,A INC 77H MOV A,77H JNZ END2 INC 78HEND2: MOV A,76H CJNE A,78H,RETN MOV A,75H CJNE A,77H,RETN CLR ES CLR EA SETB 7FH SJMP RETN END五、实验过程中遇到的主要问题OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN equ 08001h ; 键盘读入口HasRcv equ 20h.0 ; 接收标志位LEDBuf equ 40h ; 显示缓冲RC
7、VBuf equ 50H ; 接收缓冲 ORG 0000H LJMP START; 串行口中断程序 ORG 0023H JNB TI,S0_R CLR TI NOP SJMP S0_RETS0_R: ; 接收数据 CLR RI MOV RCVBUF,SBUF ; 保存数据 SETB HasRcv ; 提示收到数据 NOPS0_RET: RETILEDMAP: ; 八段管显示码 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay: ; 延时子程序 mov r7, #0De
8、layLoop: djnz r7, DelayLoop djnz r6, DelayLoop retDisplayLED: 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
9、, r2 ; 显示下一位 rr a mov r2, a inc r0 djnz r1, Loop retTestKey: mov dptr, #OUTBIT mov a, #0 movx dptr, a ; 输出线置为0 mov dptr, #IN movx a, dptr ; 读入键状态 cpl a anl a, #0fh ; 高四位不用 retKeyTable: ; 键码定义 db 16h, 15h, 14h, 0ffh db 13h, 12h, 11h, 10h db 0dh, 0ch, 0bh, 0ah db 0eh, 03h, 06h, 09h db 0fh, 02h, 05h, 0
10、8h db 00h, 01h, 04h, 07hGetKey: mov dptr, #OUTBIT mov P2, dph mov r0, #Low(IN) mov r1, #00100000b mov r2, #6KLoop: 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 ExitGoon1: mov r1, a ;
11、 键值 = 列 X 4 + 行 mov a, r2 dec a rl a rl a mov r2, a ; r2 = (r2-1)*4 mov a, r1 ; r1中为读入的行值 mov r1, #4LoopC: rrc a ; 移位找出所在行 jc Exit inc r2 ; r2 = r2+ 行值 djnz r1, LoopCExit: mov a, r2 ; 取出键码 mov dptr, #KeyTable movc a, a+dptr mov r2, aWaitRelease: mov dptr, #OUTBIT ; 等键释放 clr a movx dptr, a mov r6, #1
12、0 call Delay call TestKey jnz WaitRelease mov a, r2 retSTART: 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 LE
13、DBuf+1, #0ffh mov LEDBuf+2, #0ffh mov LEDBuf+3, #0ffh mov LEDBuf+4, #0 mov LEDBuf+5, #0 SETB TR1 SETB ES SETB EA ;mov sbuf,a ;jnb ti,$MLoop: HasRcv, RcvData ; 收到数据? call DisplayLED ; 显示 call TestKey ; 有键入? jz MLoop ; 无键入, 继续显示 call GetKey ; 读入键码 anl a, #0fh ; 通讯口输出键码 MOV SBUF,A LJMP MLoopRcvData: 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六、实验后的心得体会. .word.
限制150内