1、串行通信实验报告串行通信实验报告班级 姓名 学号 日期 一、 实验目的:1、 掌握单片机串行口工作方式的程序设计,及简易 三线式通讯的方法。2、 了解实现串行通讯的硬环境、数据格式的协议、 数据交换的协议。3、 学习串口通讯的程序编写方法。二、 实验要求1.单机自发自收实验:实现自发自收。编写相应程序,通过发光二极管观察 收发状态。2.利用单片机串行口,实现两个实验台之间的串行通讯。 其中一个实验台作 为发送方,另一侧为接收方。三、 实验说明通讯双方的RXD TXD信号本应经过电平转换后再行交叉连接,本实验中为 减少连线可将电平转换电路略去,而将双方的 RXD TXD直接交叉连接。也可以 将本
2、机的TXD接到RXD0连线方法:在第一个实验中将一台实验箱的 RXD和TXD相连,用P1.0连接 发光二极管。波特率定为600, SMOD=0在第二个实验中,将两台实验箱的 RXD和TXD交叉相连。编写收发程序, 一台实验箱作为发送方,另一台作为接收方,编写程序,从内部数据存储器 20H3FH单元中共32个数据,采用方式1串行发送出去,波特率设为600。通过 运行程序观察存储单元内数值的变化。四、 程序甲方发送程序如下:ORG 0000HLJMP MAINORG 0023HLJMP COMNTORG 1000HMAIN: MOV SP,#53HMOV 78H,#20HMOV 77H,00HMO
3、V 76H,20HMOV 75H,40HACALL TRANSHERE: SJMP HERETRANS: MOV TMOD,#20HMOV TH1,#0F3HMOV TL1,#0F3HMOV PCON,#80HSETB TR1MOV SCON,#40HMOV IE,#00HCLR F0MOV SBUF,78HWAIT1: JNB TI,WAIT1CLR TIMOV SBUF,77HWAIT2: JNB TI,WAIT2CLR TIMOV SBUF,76HWAIT3: JNB TI,WAIT3CLR TIMOV SBUF,75HWAIT4: JNB TI,WAIT4CLR TIMOV IE,#9
4、0HMOV DPH,78HMOV DPL,77HMOVX A,DPTRMOV SBUF,AWAIT: JNB F0,WAITRETCOM_INT: CLR TIINC DPTRMOV A,DPHCJNE A,76H,END1MOV A,DPLCJNE A,75H,END1SETB F0CLR ESCLR EARETEND1: MOVX A,DPTRMOV SBUF,ARETIEND乙方发送程序如下:ORG 0000HLJMPMAINORG0023HLJMPCOM_INTORG1000HMAIN: MOV SP,#53HACALL RECEIHERE: SJMP HERERECEI: MOV R
5、0,#78HMOVTMOD,#20HMOVTH1,#0F3HMOVTL1,#0F3HMOVPCON,#80HSETBTR1MOVSCON,#50HMOVIE,#90HCLRF0CLR7FHWAIT: JNB 7FH,WAITRETCOM_INT: PUSH DPLPUSHDPHPUSHAccCLRRIJB F0,R_DATAMOVA,SBUFMOVR0,ADECR0CJNER0,#74H,RETNSETBF0RETN: POP AccPOP DPHPOP DPLRETIR_DATA: MOV DPH,78HMOV DPL,77HMOV A,SBUFMOVX DPTR,AINC 77HMOV A
6、,77HJNZ END2INC 78HEND2: MOV A,76HCJNE A,78H,RETNMOVA,75HCJNEA,77H,RETNCLRESCLREASETB7FHSJMPRETNEND五、实验过程中遇到的主要问题 OUTBIT equ 08002h ; 位控制口 OUTSEG equ 08004h ; 段控制口 IN equ 08001h ; 键盘读入口HasRcv equ 20h.0 ; 接收标志位LEDBuf equ 40h ; 显示缓冲RCVBuf equ 50H ; 接收缓冲ORG 0000H LJMP START; 串行口中断程序ORG 0023HJNB TI,S0_R
7、CLR TINOPSJMP S0_RETS0_R: ; 接收数据CLR RIMOV RCVBUF,SBUF ; 保存数据SETB HasRcv ; 提示收到数据 NOPS0_RET:RETILEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay: ; 延时子程序 mov r7, #0DelayLoop:djnz r7, DelayLoop djnz r6, DelayLoop retDisplayLED:movr0, #LEDBufmovr1,
8、 #6; 共 6 个八段管movr2, #00100000b; 从左边开始显示Loop:movdptr, #OUTBITmova, #0movxdptr, a; 关所有八段管mova, r0movdptr, #OUTSEGmovxdptr,amovdptr, #OUTBITmova, r2movxdptr, a ; 显示一位八段管mov r6, #1call Delaymova, r2; 显示下一位rramovr2, aincr0djnzr1, LoopretTestKey:movdptr, #OUTBITmova, #0movxdptr, a; 输出线置为 0movdptr, #INmovx
9、a, dptr; 读入键状态cplaanla, #0fh; 高四位不用retKeyTable: ; 键码定义 db 16h, 15h, 14h, 0ffhdb 13h, 12h, 11h, 10hdb 0dh, 0ch, 0bh, 0ahdb 0eh, 03h, 06h, 09hdb 0fh, 02h, 05h, 08hdb 00h, 01h, 04h, 07hGetKey:movdptr, #OUTBITmovP2, dphmovr0, #Low(IN)movr1, #00100000bmovr2, #6KLoop:mova, r1; 找出键所在列cplamovxdptr, acplarra
10、movr1, a; 下一列movxa, r0cplaanla, #0fhjnzGoon1; 该列有键入djnzr2, KLoopmovr2, #0ffh ;没有键按下 , 返回0ffhsjmpExitGoon1:movr1, a; 键值 = 列 X 4 +行mova, r2dec a rl a rl amovr2, a; r2 = (r2-1)*4mova, r1; r1 中为读入的行值movr1, #4LoopC:rrca; 移位找出所在行jcExitincr2; r2 = r2+ 行值djnzr1, LoopCExit:mova, r2; 取出键码mov dptr, #KeyTable m
11、ovc a, a+dptr mov r2, aWaitRelease:mov clr movxdptr, #OUTBIT adptr, a; 等键释放movr6, #10callDelaycallTestKeyjnzWaitReleasemova, r2retSTART:MOVSP, #60HMOVIE, #0 ; DISABLE ALL INTERRUPTMOVTMOD,#020H; 定时器 1 工作于方式 2 (8 位重装 )MOVTH1, #0F3H ;波特率?2400BPS 12MHzMOVTL1, #0F3HANLPCON,#07FH ;SMOD 位清零orlPCON,#80hMOV
12、SCON,#050H; 串行口工作方式设置MOVLEDBuf, #0ffh ; 显示 8.8.8.8.movLEDBuf+1, #0ffhmovLEDBuf+2, #0ffhmov mov mov SETBLEDBuf+3, #0ffhLEDBuf+4, #0LEDBuf+5, #0TR1SETBESSETBEA;movsbuf,a;jnb ti,$MLoop:jbHasRcv, RcvData; 收到数据?callDisplayLED; 显示callTestKey; 有键入 ?jzMLoop; 无键入 , 继续显示callGetKey; 读入键码anla, #0fh ;通讯口输出键码MOVSBUF,ALJMPMLoopRcvData:clrHasRcv; 是mova, RcvBuf; 显示数据movb,aanla,#0fh; 显示低位movdptr, #LEDMapmovca, a+dptrmovLEDBuf+5, amova,bswapa; 显示高位anla,#0fhmovdptr, #LEDMapmovca, a+dptrmovLEDBuf+4, aljmpMLoopEND六、实验后的心得体会
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1