历史上的今天
今天是:2024年10月12日(星期六)
2021年10月12日 | STM8与汇编语言(10)--UART应用之二
2021-10-12 来源:eefocus
下面这个实验程序比较简单,它是在上篇基础上,增加了查询方式从UART接收一个字符的子程序。主循环中,等待接收一个字符,然后将接收到的字符再发送出去。如果与WINDOWS的超级终端相连,则键盘上按什么按键,则显示对应的字符。
同样还是利用ST的开发工具,生成一个汇编程序的框架,然后修改其中的main.asm,修改后的代码如下。
编译通过后,下载到开发板,运行程序。在PC机上运行超级终端,波特率为9600,然后从键盘上输入按键,屏幕上就显示对应的字符。
stm8/
#include "mapping.inc"
#include "STM8S207C_S.INC"
; 定义堆栈空间的起始位置和结束位置
stack_start.w EQU $stack_segment_start
stack_end.w EQU $stack_segment_end
segment 'rom' ; 下面开始定义一个段,该段位于ROM中
main.l ; 定义复位后的第一条指令的标号(即入口地址)
;
; 首先要初始化堆栈指针
LDW X,#stack_end
LDW SP,X
CALL UART3_Init ; 初始化串口3
MAIN_LOOP.L
CALL UART3_RecvChar
CALL UART3_SendChar
JRA MAIN_LOOP ; 进入无限循环
UART3_Init.l ; 串口初始化子程序
LD A,#0 ; 禁止UART发送和接收
LD LINUART_CR2,A
LD A,#0
LD LINUART_CR1,A ; b5 = 0,允许UART
; b2 = 0,禁止校验
LD A,#0 ; b5,b4 = 00,1个停止位
LD LINUART_CR3,A
; 设置波特率,必须注意以下几点:
; (1) 必须先写BRR2
; (2) BRR1存放的是分频系数的第11位到第4位,
; (3) BRR2存放的是分频系数的第15位到第12位,和第3位到第0位
; 例如对于波特率位9600时,分频系数=2000000/9600=208
; 对应的十六进制数为00D0,BBR1=0D,BBR2=00
LD A,#$00
LD LINUART_BRR2,A
LD A,#$0D
LD LINUART_BRR1,A ; 实际的波特率分频系数为00D0(208)
; 对应的波特率为2000000/208=9600
LD A,#$0C ; b3 = 1,允许发送
; b2 = 1,允许接收
LD LINUART_CR2,A
RET
;
UART3_SendChar.l ; 发送字符的子程序
PUSH A ; 将要发送的字符保存到堆栈中
SENDCHAR_1.L
LD A,LINUART_SR ; 读取当前状态寄存器的值
AND A,#$80 ; 若发送寄存器不空,则等待
JREQ SENDCHAR_1
POP A ; 从堆栈中恢复要发送的字符
LD LINUART_DR,A ; 将要发送的字符送到数据寄存器
RET
; 函数功能:从UART3接收一个字符
; 输入参数:无
; 输出参数:无
; 返 回 值:寄存器A -- 从串口读回的字符
; 备 注:无
UART3_RecvChar.l
RECVCHAR_1.L
LD A,LINUART_SR
AND A,#$20
JREQ RECVCHAR_1
LD A,LINUART_DR
RET
interrupt NonHandledInterrupt
NonHandledInterrupt.l
iret
; 下面定义中断向量表
segment 'vectit'
dc.l {$82000000+main} ; reset
dc.l {$82000000+NonHandledInterrupt} ; trap
dc.l {$82000000+NonHandledInterrupt} ; irq0
dc.l {$82000000+NonHandledInterrupt} ; irq1
dc.l {$82000000+NonHandledInterrupt} ; irq2
dc.l {$82000000+NonHandledInterrupt} ; irq3
dc.l {$82000000+NonHandledInterrupt} ; irq4
dc.l {$82000000+NonHandledInterrupt} ; irq5
dc.l {$82000000+NonHandledInterrupt} ; irq6
dc.l {$82000000+NonHandledInterrupt} ; irq7
dc.l {$82000000+NonHandledInterrupt} ; irq8
dc.l {$82000000+NonHandledInterrupt} ; irq9
dc.l {$82000000+NonHandledInterrupt} ; irq10
dc.l {$82000000+NonHandledInterrupt} ; irq11
dc.l {$82000000+NonHandledInterrupt} ; irq12
dc.l {$82000000+NonHandledInterrupt} ; irq13
dc.l {$82000000+NonHandledInterrupt} ; irq14
史海拾趣
|
IEEE 802.11a :使用5GHz频段,传输速度54Mbps,与802.11b不兼容 IEEE 802.11b :使用2.4GHz频段,传输速度11Mbps IEEE 802.11g :使用2.4GHz频段,传输速度54Mbps,可向下兼容802.11b 目前IEEE 802.11b最常用,但IEEE 802.11g更具下一代标准 ...… 查看全部问答> |
|
我在网上下载了一个源代码是基于CC2430的zigbee 点对点的实例通信代码,但是看不懂, 能不能帮我解释一下程序的大致框架和实现原理,诸如 hal层 cul层 是实现什么的,程序如何工作的?十分感谢了 TI(德州仪器公司)的CC2430芯片的库函数以及一些 ...… 查看全部问答> |
|
基于CE或者MOBILE系统的数字对讲机(类似于日常在小区中保安用的对讲机(可以广播或者对单个人聊),只不过通过PDA来实现,PDA是CE或者MOBILE的操作系统),诚招可以有能力挡此重任者,最好有现成的,直接购买的最好。 QQ:470987784 电话:(0) ...… 查看全部问答> |
|
在CF卡中保存hive based registry的问题,急求解决 小弟在ce platfrom builder 5.0定制CE,加入hive的就不能开机了,黑屏,键盘没反映。 时间紧急,急求兄弟帮忙!!! 1,目标平台是X86主板,芯片组为INTEL 852,用了INTEL 852的BSP包。 2,存储设备为CF卡,主板认作IDE4;也用IDE硬盘试过,一样不能 ...… 查看全部问答> |
|
对于TI的M3系列的开发板,普及率还不是很高,为什么这么说?我主要参考了淘宝里的开发板的销售情况,发现其他公司,尤其是现在比较热的××公司,你只要到淘宝上一搜,遍地都是。这里面良莠不齐,难免 ...… 查看全部问答> |
|
HARDWARE DESIGN TECHNIQUES Prototyping Analog Circuits Evaluation Boards Noise Reduction and Filtering for Switching Power Supplies Low Dropout References and Regulators EMI/RFI Considerations Sensors and Cable Shielding … 查看全部问答> |




