汇编语言(Assembly Language)是一种用于电子计算机、微处理器、微控制器或其它可编程器件的低级语言。
在单片机出现之初,由于性能限制,都是使用汇编进行开发。随着技术的发展,制程工艺的提升,单片机的处理速度越来越快,越来越多的单片机使用C语言开发。如今,一些低端MCU还在使用汇编开发;一些高要求程序优化的场合也会使用汇编;MCU/MPU的启动初始化部分也是汇编。本小结就带领读者感受下如何使用汇编操作开发板LED灯。
在编写代码前,本应该分析《开发板原理图》和《参考手册》,从而得知需要操作哪些外设寄存器,但这不是本小结主要内容,具体的分析方法放在后面对应的实验章节,读者暂时无需深入理解以下内容的由 来:
有了以上基础,就可以编程控制LED灯了,本章涉及的代码位于100ASK_STM32F103开发板资料的“5_程序源码\0_单片机开发模式的发展\1_使用汇编开发\”。
如代码段 6.2.1 所示。汇编代码对初学者不友好,读者对代码内容不理解也正常,也无需深入理解汇编指令,这里主要目的是展示如何用汇编操作寄存器。
; Reset handler
Reset_Handler PROC
; 使能 GPIOB
LDR R0, =(0x40021000 + 0x18) ; RCC_APB2ENR
LDR R1, [R0]
ORR R1, R1, #(1<<3)
STR R1, [R0]
; 设置 GPIOB0 为输出引脚
LDR R0, =(0x40010C00 + 0) ; GPIOB_ CRL
LDR R1, [R0]
ORR R1, R1, #(1<<0)
STR R1, [R0]
MainLoop
; 设置 GPIIOB0 输出高电平
LDR R0, =(0x40010C00 + 0xc) ; GPIOB_ODR
LDR R1, [R0]
ORR R1, R1, #(1<<0)
STR R1, [R0]
BL Delay
; 设置 GPIIOB0 输出低电平
LDR R0, =(0x40010C00 + 0xc) ; GPIOB_ODR
LDR R1, [R0]
BIC R1, R1, #(1<<0)
STR R1, [R0]
BL Delay
B MainLoop
Delay
LDR R0, =300000
DelayLoop
SUBS R0, #1
BNE DelayLoop
BX LR
NOP
ENDP
END
以上汇编代码就实现了对开发板三色灯的红色灯交替闪烁效果,读者可以打开配套资料的“5_程序源码\0_单片机开发模式的发展\1_使用汇编开发\ Project\Led_Reg.uvprojx”工程,编译、下载,体验效果。
可以感受到,使用汇编编写程序,生涩难懂,因此越来越少的单片机使用汇编来编写代码,下面再来体验下C语言实现一样的效果。
百问网技术论坛:
http://bbs.100ask.net/
百问网嵌入式视频官网:
https://www.100ask.net/index
百问网开发板:
淘宝:https://100ask.taobao.com/
天猫:https://weidongshan.tmall.com/
技术交流群(鸿蒙开发/Linux/嵌入式/驱动/资料下载)
QQ群:869222007(已满)752871361
单片机-嵌入式Linux交流群:
QQ群:536785813