51汇编练习——串行口的传输

编写一个发送程序:采用串口工作方式1将8051单片机P1口采集的8位数据实时串行传输。无需奇偶校验,采用中断方式。波特率为9600波特(晶振频率为11.0592MHz)。

ORG 0000H
LJMP MAIN
ORG 0023H ;串行口中断入口地址
LJMP INT_TI
ORG 0030H

MAIN:MOV SCON,#40H ;串行口工作方式1,REN发送时取0,接收时取1
MOV PCON,#00H ;SMOD置0
MOV TMOD,#20H ;定时计数器工作方式2
MOV TH1,#0FDH ;设置溢出率初值
MOV TL1,#0FDH
SETB TR1 ;TCON按位寻址,打开定时计数器
MOV IE,#90H ;开启中断使能
MOV RO,#90H ;P1口首地址
MOV R2,#08H ;计数
LCALL SEND
SJMP $

INT_TI:CLR TI ;串行接口控制器发送中断标志
INC R0 ;地址加1
DJNZ R2,CONT
CLR ES;关闭中断

JIESHU: RETI

CONT:LCALL SEND ;调用中断传输子程序
SJMP JIESHU ;传输完成后结束程序

SEND:MOV A,@R0 ;读入P1口采集的数据
MOV SBUF,A ;串行口发送数据
RET	
END

编写一个接收程序:8051单片机采用串口工作方式1接收8位串行数据,由P1口输出。无需奇偶校验,采用中断方式。波特率为9600波特(晶振频率为11.0592MHz)。

ORG 0000H
LJMP MAIN
ORG 0023H ;串行口中断入口地址
LJMP INT_RI
ORG 0030H

MAIN:MOV SCON,#50H ;串行口工作方式1
MOV PCON,#00H ;SMOD置0
MOV TMOD,#20H ;定时计数器工作方式2
MOV TH1,#0FDH ;设置溢出率初值
MOV TL1,#0FDH
SETB TR1 ;打开定时计数器
MOV IE,#90H ;
MOV RO,#90H ;P1口首地址
MOV R2,#08H ;计数
SJMP $

INT_RI:CLR RI ;串行接口控制器接收中断标志
MOV A,SBUF ;串行口接收数据
INC R0 ;地址加1
DJNZ R2,JIESHOU

JIESHOU:MOV @R0,A;串行口接收数据放入P1 
DJNZ,R2,ERR
CLR ES	

ERR: RETI
END

如果需要加上奇偶校验,只需奇偶校验位TB8取1,并在中断服务子程序中添上:

INT_RI:MOV A,SBUF ;以接收数据结束为例
MOV C,P
JC LP0
JB RB8,ERR ;RB8奇偶校验标志位
SJMP JIESHOU

LP0:JNB RB8,ERR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wayne_Fine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值