单片机通识之UART通信协议(如何用汇编实现)

本文详细介绍了基于特定12MHz单指令周期芯片的UART串口通信实现,包括初始化IO口、数据传输和字符串传输的步骤。通过宏定义简化了IO口状态转换,并强调了波特率、指令执行时间和脉冲信号稳定时间(Tw)在通信中的重要性。文章还展示了如何处理8位数据传输和字符串转换为ASCII值的过程。

芯片简介

本文使用一款 12MHZ、单指令周期(指令周期为1/13微秒)的芯片。在继续阅读文章之前,请先查阅如下段落并了解其指令、寄存器及其他说明。

AR:16位立即数寄存器,可赋值一个16位的数值
eg:	AR		= 0x0000

AX:16位立即数寄存器,可赋值一个16位的数值
eg:	AX		= 0x0000

CX:16位立即数寄存器,可赋值一个16位的数值,配合LOOP指令使用,实现循环
eg:	CX		= 0x0006	;; 循环7次
		Your_Label:
				AR		= 0x0001
				LOOP	Your_Label		;; 每遇到LOOP指令,CX会自动 -1,当CX < 0时,会跳过此条指令向下运行
				
				JMP		Your_Label_1

P0:16为立即数寄存器,用于获取ROM中某个地址,配合 PM[] 使用,取出该地址中的值
eg:	P0			=	#Your_Label
		AR			= PM[P0]
		;; 此时的AR将变为 0x0001, 即取出P0指向地址中的值
		
		Your_Label:
				DW	0x0001, 0x0002 

PUSH:将该寄存器数值入栈保存
eg:	PUSH	AR
POP:出栈并将数值保存至该寄存器
eg:	POP		AR

JEQ:当结果为0时跳转(本文中仅理解为AR为0时跳转)至该标签
eg:	AR		= 0x0000
		JEQ		Your_Label;; 此时跳转至 Your_Lable
		AR		= 0x0001
		JEQ		Your_Label;; 此时不跳转,向下运行

JAC:C标志位是一个系统寄存器中的某一位,其作用是判断AR等寄存器是否溢出。
	 此外左移、右移指令会将移出的一位存储在C标志位中。JAC指令根据C标志位跳转,1-跳转;0-不跳转
eg:	AR		= 0x0001
		SRA		AR				;; SRA为右移指令,将最低位移出到C标志位,其余位依次向右移动1位
		JAC		Your_Label		;; 最低位为1,右移到C标志位,C标志位为1,则跳转。

JMP:无条件跳转
eg:	JMP		Your_Label
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值