汇编十三、串口

本文介绍了通信的基本概念,包括单工、半双工和全双工通信模式,并详细讲解了51单片机中的串口通信,包括SBUF和SCON寄存器的作用,以及波特率的计算。此外,还提供了一个示例程序,展示如何实现PC机与MCU之间的串口数据交换,工作在4800波特率和方式1下。
摘要由CSDN通过智能技术生成

1、通信相关概念

(1)单工:只能接收或只能发送数据。

(2)半双工:既能发送数据,也能接收数据,但不能同时进行。

(3)全双工:可以同时进行发送和接收数据。

(4)单片机中常用的通信物理接口:I2C、SPI、USB、CAN、UART等。

2、串口

(1)串口:串行数据通信接口。

(2)51单片机串口为全双工模式。

(3)串口数据的一帧格式:UART frame = 起始位 + 数据位 +校验位 + 停止位。

3、寄存器

3.1、SBUF:串口数据缓冲器

(1)SBUF 物理上是有两个,逻辑地址只有一个。

(2)51单片机设有2个独立的接收、发送缓冲器,可以同时接收和发送数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可以共用一个地址码(99H)。两个缓冲器统称串行特殊功能寄存器SBUF。

(3)MOV  A,SBUF  ;接收

(4)MOV  SBUF,A  ;发送

3.2、SCON:串行口控制寄存器

(1)SMO位和SM1:串行口方式选择(常用的就是方式1)

(2)SM2位:多机通信位。

(3)REN:允许/禁止串行接收控制位。

(4)TB8,RB8,涉及到校验位,当下已经不用,奇偶校验误码率太高。校验可接收到数据后采用CRC校验。

(5) TI ,RI  中断标志位(硬件自动置位,必须软件清0),其他中断是中断服务程序执行完,中断标志位就自动清零了。

3.3、PCON:电源控制寄存器

(1)不可位寻址。

(2)SMOD为波特率选择位。

4、波特率计算

参照数据手册和STC-ISP软件。

5、示例程序

5.1、功能

(1)PC机通过串口发送数据到MCU,MCU将接收到的数据发回给PC机,通过串口助手查看。

(2)串口波特率为4800,串口工作方式为方式1。

5.2、代码

;PC机通过串口发送数据到MCU,MCU将接收到的数据发回给PC机,通过串口助手查看。
;---------------------------------------------------------------------------	
	ORG 0000H     ;ORG为程序段说明伪指令,它向汇编程序说明该程序段的起始地址,所以可以当中断向量地址用
	LJMP L_Main   ;跳转到L_Main标号处
	
	ORG 0023H     ;串口中断向量地址
	LJMP I_UART     ;跳转到I_UART标号处
	
L_Main:
	;your code
	;串口初始化,波特率4800
	ORL		PCON,#80H   ;使能波特率倍速位SMOD;PCON值与0x80H相或
	MOV TMOD,#0x20      ;定时器1为8位自动装载模式
	MOV TL1, #0F3H		;设置定时初始值,字母开头的16进制字母前面要加0
	MOV	TH1, #0F3H		;设置定时重载值

	MOV SCON,#0x50      ;8位数据,可变波特率
	SETB EA             ;总中断允许控制位设置为1
	SETB ES             ;串行口中断允许位
	
	CLR	 ET1			;关闭定时器1溢出中断
	SETB TR1            ;定时器1开始计时
	
;---------------------------------------
L_loop:
	SJMP L_Loop        ;相对转移
;---------------------------------------

F_UartSendByte:
   	MOV SBUF,A   ;中断中已把要发送的内容赋到A中
	JNB TI,$     ;发送完成;TI为0则跳转到当前位置$,等于1则往下执行;等于1则说明发送完成
	CLR TI       ;清发送中断请求标志位
	RET          ;子程序返回
	
;---------------------------------------
I_UART:	                  ;只处理接收程序
	PUSH ACC              ;ACC地址单元中的数据压栈
	PUSH PSW              ;程序状态字寄存器压栈
 	JBC TI,L_Exit         ;发送数据产生的中断直接退出中断;TI位为1则跳转到L_Exit处
	CLR RI                ;清中断接收标志位
	MOV A,SBUF            ;接收数据内容赋值给A
	LCALL F_UartSendByte  ;调用子程序   
L_Exit:
	POP	PSW	              ;程序状态字寄存器出栈
	POP ACC               ;ACC地址单元中的数据出栈
	RETI                  ;中断返回
;---------------------------------------
	END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

代码织梦师小猪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值