串行通信实验报告.doc
. .串行通信实验报告班级 学号 日期一、实验目的:1、掌握单片机串行口工作方式的程序设计,及简易 三线式通讯的方法。2、了解实现串行通讯的硬环境、数据格式的协议、 数据交换的协议。3、学习串口通讯的程序编写方法。二、实验要求1.单机自发自收实验:实现自发自收。编写相应程序,通过发光二极管观察收发状态。 2利用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,另一侧为接收方。三、实验说明通讯双方的RXD、TXD信号本应经过电平转换后再行穿插连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接穿插连接。也可以将本机的TXD接到RXD上。连线方法:在第一个实验中将一台实验箱的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 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 MOV 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 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 DPH,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 ; 显示缓冲RCVBuf 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, #0DelayLoop: 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, 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, 08h 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 ; 键值 = 列 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, #10 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 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 ;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.