历史上的今天
今天是:2024年12月27日(星期五)
2019年12月27日 | 51单片机汇编学习例程(5)——USART串口篇
2019-12-27 来源:51hei
5.ASM5_USART: 串口发送0-9及换行,接收任意数据并显示
/**
******************************************************************************
* @file USART.asm
* @author Alex——小白
* @version V1.0
* @date 2019.9.1
* @brief 自动发送数据0-9和换行,接收的数据会打印该数据
******************************************************************************
* @attention All Rights Reserved
**/
ORG 0000H ;程序执行的起始地址
LJMP Main ;跳转到main函数
ORG 0023H ;串口中断地址
LJMP UARTInterrupt ;声明UART是中断4函数名称
ORG 0100H ;程序跳转到0100H开始执行
Main:
MOV SP,#60H
LCALL InitUART ;初始化串口参数
MOV DPTR,#Num_Tab ;DPTR指向数组
MOV R0,#00H ;变量清零
While:
MOV A,R0 ;变量赋值
MOVC A,@A+DPTR ;读取数组数据
LCALL SendOneByte ;串口打印数据
LCALL Delay ;延时1s
INC R0 ;变量自加
CJNE R0,#0CH,Next ;判断是否为12,是清零,否则跳转
MOV R0,#00H
Next:
SJMP While
InitUART:
MOV TMOD,#20H ;2400bps
MOV SCON,#50H ;设置波特率重装值(256-12000000/12/32/2400)=243=F3
MOV TH1,#0F3H ;赋初值
MOV TL1,TH1
MOV PCON,#00H
SETB EA ;总中断开启
SETB ES ;串口中断开启
SETB TR1 ;定时器1中断开启
RET
UARTInterrupt:
PUSH ACC ;ACC值押栈,避免主循环使用冲突
JB RI,Is_Receive ;判断是否在接收数据
CLR TI ;否则清除发送标志位
RETI
Is_Receive:
CLR RI ;清除接收标志位
MOV A,SBUF ;将获取的数据储存到A
LCALL SendOneByte ;接收数据,再发送出去
POP ACC ;AC值释放
RETI
SendOneByte:
CLR ES ;关闭串口中断
CLR TI ;清除发送标志位
MOV SBUF,A ;将数据A发送出去
SendFinish:
JNB TI,SendFinish ;判断是否发送完毕
CLR TI ;是,则清除标志位
SETB ES ;开启串口中断
RET
Delay: ;t=t1*8=1s,修改R5的值即可更改时间(不精准)
MOV R5, #08H ;单周期,8次
D1: ;t1=t2*250=500*250=125000
MOV R6, #0FAH
D2:
MOV R7, #0FAH ;t2=250*2=500
D3:
DJNZ R7, D3 ;R7=250自减,直到为0跳出循环,双周期
DJNZ R6, D2 ;R6=250自减,直到为0跳出循环,双周期
DJNZ R5, D1 ;R5=100自减,直到为0跳出循环,双周期
RET
Num_Tab: ;0-9,0A0D换行
DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,0AH,0DH
上一篇:51单片机音乐盒 仿真+程序
史海拾趣
|
随着汽车拥有量的增加,发生交通事故的概率也随之增加,发生事故后用传统的方法进行分析、判断、维修有一定的困难。这样,就给人们提出了一个问题,怎样及时、准备地分析故障的存在,客观地分析事故的责任。由此联系到飞机上装的“黑匣子”,一旦飞 ...… 查看全部问答> |
|
目前用ut6410想实现 radio的功能使用si47xx的模块 ut6410本身有提供i2c的接口和驱动 kernel linux2.6.24 硬件部份問題排除 有用示波器 sda sck脚位有讯号出来. 现在遇到的状况是想从user space透过i2c对si47xx丢cmd 但是write read回传都是-1 部 ...… 查看全部问答> |
|
背光代码 volatile S3C2440A_IOPORT_REG * v_pIOPregs= NULL; BOOL BacklightInitialize() { BOOL bRet = TRUE; BL_PowerOn(TRUE); & ...… 查看全部问答> |
|
如何以DSD模式将多个,Pcm4222,pcm1792,连接到Ti的dsp上? 如何以DSD模式将多个,Pcm4222,pcm1792,连接到Ti的dsp上? 还有个什么TDM模式是什么? Tms320vc5402如何连接到异步SRam?… 查看全部问答> |
|
msp430芯片RAM居然不能外扩??很郁闷,最近程序大了,需要大于2K的RAM了,可是msp430芯片RAM不能外扩,这个怎么办呢?课题做到一半,555555555555 谢谢各位,请出出主意!… 查看全部问答> |
|
TinyOS在MSP430F2618+CC2520平台上移植交流 目前TinyOS还仅支持MSP430低端的MCU比如f1611,以及CC2420等射频芯片。针对MSP430高端系列单片机,以及TI推出的第二代射频芯片CC2520还未能支持 前段时间把TinyOS移植到了上述平台上,基本功能都已经实现,针对无线协议栈还需要进一步优化!希望有 ...… 查看全部问答> |
|
做了块CC2500模块,模块发射数据很正常,但是接收的数据全部异常,找了两天了还没找到原因,程序问题已经排除(用别人的模块发射和接受都正常),请懂的人帮下小弟,小弟搞开始搞RF… 查看全部问答> |
|
我的笔记本电脑是WIN7 32位系统,之前没有装过CCS软件,现在只要安装CCS V5.4就会遇到如图所示的错误,然后就自动退出安装程序,安装之前我已经退出了360并且关闭了防火墙,请问同志们有遇到这问题的吗?给个解答… 查看全部问答> |




