一、题目要求
利用单片机发送存放在内部20H~29H中的10个字符,晶振11.0592MHz,波特率为9600,由T1产生,请编写发送和接收程序
二、题目分析
分析这是一道基础的题目,考察了I/O最基本的应用。要利用51单片机发送内部RAM的数据,要知道工作原理。发送所需的波特率由定时器T1产生(波特率是指每秒发送二进制代码的位数,单位是bit/s),T1受TMOD控制,T1应该工作在方式2(8位自动装填)。要发送的数据送到寄存器SBUF中,在每一次定时把SBUF中的内容逐位送到TxD中输出。串口工作模式受SCON控制,REN=1时允许接受,REN=0时禁止接受,在这里使用工作方式1发送,REN=0。PCON控制着波特率的倍乘,在这里SMOD=0。
定时器初值的计算:,算得X=0FDH
综上所述,
TMOD=0010 0000B =20H
TH1=TL1=0FDH
SCON=0100 0000=40H
PCON=00H
三、发送程序代码实现:
MOV TMOD,#20H;寄存器初始化
MOV TH1,#0FDH
MOV TL1,#0FDH
MOV SCON,#40H
MOV PCON,#00H
MOV R2,#20H ;设置发送内容的指针和长度
MOV R0,#10H
SETB TR1 ;定时器启动
SENT:MOV A,@R2
MOV SBUF,A ;开始传送
DETC:JBC TI,GOON;等待一单元内容发送完毕
SJMP DETC
GOON:INC R2 ;指针+1
DJNZ R0,SENT ;发送完10个单元后退出
RET ;返回
接受程序代码实现:REN=1, SCON=0101 0000=50H
MOV TMOD,#20H;寄存器初始化
MOV TH1,#0FDH
MOV TL1,#0FDH
MOV SCON,#50H
MOV PCON,#00H
MOV R2,#20H ;设置接受内容存储单元的指针和长度
MOV R0,#10H
SETB TR1 ;定时器启动
RECE:JBC RI,STORE;当SBUF接受满后,RI置1,跳转到存储子程序
SJMP RECE
STORE: MOV A,SBUF
MOV @R2,A
INC R2 ;指针+1
DJNZ R0,RECE
RET
四、总结
根据题目要求,计算好要使用的寄存器的值和初值,接受和发送的逻辑很相似,发送时接受允许位REN=0,接受时REN=1,通过查询收发标志位来确认发送/接受完成。
五、图片来源
《单片机原理及接口技术》 段晨东主编 第2版 P170-171