ARM day3

思维导图:

编程实现3个LED灯亮灭

bash 复制代码
.text 
.global _start	@声明全局变量
_start: 		@汇编程序入口
	@使能GPIOE的外设时钟  RCC_MP_AHB4ENSETR的第[4]设置为1即可使能GPIOE时钟
	LDR R0,=0X50000A28   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	ORR R1,R1,#(0x1<<4)   @将第4位设置为1
	STR R1,[R0]  @将修改后的数值写回
	@使能GPIOE的外设时钟  RCC_MP_AHB4ENSETR的第[5]设置为1即可使能GPIOF时钟
	LDR R0,=0X50000A28   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	ORR R1,R1,#(0x1<<5)   @将第5位设置为1
	STR R1,[R0]  @将修改后的数值写回
 
	@设置PE10,PE8为输出  将GPIOE_MODER[21:20]设置为01,就能够让PE10为输出工作模式
	LDR R0,=0X50006000   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	BIC R1,R1,#(0x3<<20)   @将第21:20清0
	BIC R1,R1,#(0x3<<16)    @将第17:16清0  
	ORR R1,R1,#(0x1<<20)   @将第21:20设置为01
	ORR R1,R1,#(0x1<<16)   @将第17:16设置为01
	STR R1,[R0]  @将修改后的数值写回
	@设置PF10为输出  将GPIOE_MODER[21:20]设置为01,就能够让PE10为输出工作模式
	LDR R0,=0X50007000   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	BIC R1,R1,#(0x3<<20)   @将第21:20清0
	ORR R1,R1,#(0x1<<20)   @将第21:20设置为01
	STR R1,[R0]  @将修改后的数值写回
 
	@设置PE10,PE8为推完输出  将GPIOE_OTYPER寄存器[10]设置为0,就能够让PE10以推挽输出模式进行工作
	LDR R0,=0X50006004   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	BIC R1,R1,#(0x1<<10)   @将第10清0
	BIC R1,R1,#(0x1<<8)   @将第8清0
	STR R1,[R0]  @将修改后的数值写回
	@设置PF10为推完输出  将GPIOE_OTYPER寄存器[10]设置为0,就能够让PE10以推挽输出模式进行工作
	LDR R0,=0X50007004   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	BIC R1,R1,#(0x1<<10)   @将第10清0
	STR R1,[R0]  @将修改后的数值写回
 
	@设置PE10,PE8为低速输出
	LDR R0,=0X50006008   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	BIC R1,R1,#(0x3<<20)   @将第21:20清0
	BIC R1,R1,#(0x3<<16)   @将第17:16清0
	STR R1,[R0]  @将修改后的数值写回
	@设置PF10为低速输出
	LDR R0,=0X50007008   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	BIC R1,R1,#(0x3<<20)   @将第21:20清0
	STR R1,[R0]  @将修改后的数值写回
 
	@设置无上拉下拉电阻 
	LDR R0,=0X5000600C   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	BIC R1,R1,#(0x3<<20)   @将第21:20清0
	BIC R1,R1,#(0x3<<16)   @将第17:16清0
	STR R1,[R0]  @将修改后的数值写回
	@设置无上拉下拉电阻 
	LDR R0,=0X5000700C   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	BIC R1,R1,#(0x3<<20)   @将第21:20清0
	STR R1,[R0]  @将修改后的数值写回
 
loop:
    BL LED1_ON		@设置LED1亮
    BL LED2_OFF
    BL LED3_OFF
    BL DELAY
	
    BL LED1_OFF
    BL LED2_ON		@设置LED2亮
    BL LED3_OFF
    BL DELAY
	
    BL LED1_OFF
    BL LED2_OFF
    BL LED3_ON		@设置LED3亮
    BL DELAY
    b loop
 
LED1_ON:
    LDR R0,=0X50006014   @指定寄存器地址 pe10 50006000
    LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
    ORR R1,R1,#(0x1<<10)   @将第10设置为1
    STR R1,[R0]  @将修改后的数值写回 
    MOV PC,LR

LED1_OFF:
    LDR R0,=0X50006014   @指定寄存器地址
    LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
    BIC R1,R1,#(0x1<<10)   @将第10设置为0
    STR R1,[R0]  @将修改后的数值写回 
    MOV PC,LR

LED2_ON:
    LDR R0,=0X50007014   @指定寄存器地址 pf10 50007000
    LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
    ORR R1,R1,#(0x1<<10)   @将第10设置为1
    STR R1,[R0]  @将修改后的数值写回 
    MOV PC,LR
 
LED2_OFF:
    LDR R0,=0X50007014   @指定寄存器地址
    LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
    BIC R1,R1,#(0x1<<10)   @将第10设置为0
    STR R1,[R0]  @将修改后的数值写回 
    MOV PC,LR

LED3_ON:
    LDR R0,=0X50006014   @指定寄存器地址 pe8 5000
    LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
    ORR R1,R1,#(0x1<<8)   @将第8设置为1
    STR R1,[R0]  @将修改后的数值写回 
    MOV PC,LR

LED3_OFF:
    LDR R0,=0X50006014   @指定寄存器地址
    LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
    BIC R1,R1,#(0x1<<8)   @将第8设置为0
    STR R1,[R0]  @将修改后的数值写回 
    MOV PC,LR
 
DELAY:
    LDR R3,=0x10000000
MM:
    CMP R3,#0
    SUBNE R3,R3,#1
    BNE MM
    MOV PC,LR
.end
相关推荐
FreakStudio5 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘10 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u1521096484910 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150010 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼10 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
wohoo_wangzi10 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘10 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展10 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
AndyHeee10 天前
【SVC、PendSV(系统异常) 与 外设 IRQ 、NVIC笔记】
arm开发
集芯微电科技有限公司10 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设