ARM第一次

.text 
.global _start
_start: 
@使能GPIOE和GPIOF的外设时钟
LDR R0,=0X50000A28  @将AHB4使能寄存器的地址放进R0中
LDR R1,[R0]         @将R0中存放的内存地址的4字节数据读取到R1中
ORR R1,R1,#0X32     @使能GPIOE、GPIOF和GPIOB的时钟
STR R1,[R0]         @AHB4使能寄存器的值重新写进内存地址中
@设置PE10,PE8,PF10引脚为输出模式
LDR R0,=0X50006000  @将GPIOE的模式寄存器的地址放进R0中
LDR R1,=0X50007000  @将GPIOF的模式寄存器的地址放进R1中
LDR R5,=0X50003000	@将GPIOB的模式寄存器的地址放进R5中
LDR R7,=(0X303<<12)
LDR R8,=(0X101<<12)
LDR R2,[R0]         @将R0中存放的内存地址的4字节数据读取到R2中
LDR R3,[R1]         @将R1中存放的内存地址的4字节数据读取到R3中
LDR R6,[R5]			@将R5中存放的内存地址的4字节数据读取到R6中
BIC R2,R2,#(0X3F<<16)  @将GPIOE的模式寄存器的[21:16]位置清0
BIC R3,R3,R7   @将GPIOF的模式寄存器的[21:20]位置清0
BIC R6,R6,#(0X3<<12)
ORR R2,R2,#(0X15<<16)  @将GPIOE的模式寄存器的[20]、[16]和[18]位置置1
ORR R3,R3,R8   @将GPIOF的模式寄存器的[20]和[12]位置置1
ORR R6,R6,#(0X1<<12)
STR R2,[R0]         @将GPIOE的模式寄存器的值重新写进内存地址中
STR R3,[R1]         @将GPIOF的模式寄存器的值重新写进内存地址中
STR R6,[R5]
@设置PE10,PE8,PF10引脚为推挽输出
LDR R0,=0X50006004  @将GPIOE的输出模式寄存器的地址放进R0中
LDR R1,=0X50007004  @将GPIOF的输出模式寄存器的地址放进R1中
LDR R5,=0X50003004	@将GPIOB的模式寄存器的地址放进R5中
LDR R2,[R0]         @将R0中存放的内存地址的4字节数据读取到R2中
LDR R3,[R1]         @将R1中存放的内存地址的4字节数据读取到R3中
LDR R6,[R5]			@将R5中存放的内存地址的4字节数据读取到R6中
BIC R2,R2,#(0X7<<8)    @将GPIOE的输出模式寄存器的[10]和[8]位置清0
BIC R3,R3,#(0X11<<6)   @将GPIOF的输出模式寄存器的[10]位置清0
BIC R6,R6,#(0X1<<6)
STR R2,[R0]         @将GPIOE的输出模式寄存器的值重新写进内存地址中
STR R3,[R1]         @将GPIOF的输出模式寄存器的值重新写进内存地址中
STR R6,[R5]
@设置PE10,PE8,PF10引脚为低速输出
LDR R0,=0X50006008  @将GPIOE的输出速度寄存器的地址放进R0中
LDR R1,=0X50007008  @将GPIOF的输出速度寄存器的地址放进R1中
LDR R5,=0X50003008	@将GPIOB的模式寄存器的地址放进R5中
LDR R7,=(0X303<<12)
LDR R2,[R0]         @将R0中存放的内存地址的4字节数据读取到R2中
LDR R3,[R1]         @将R1中存放的内存地址的4字节数据读取到R3中
LDR R6,[R5]			@将R5中存放的内存地址的4字节数据读取到R6中
BIC R2,R2,#(0X3F<<16)  @将GPIOE的模式寄存器的[21:16]位置清0
BIC R3,R3,R7   @将GPIOF的模式寄存器的[21:20]位置清0
BIC R6,R6,#(0X3<<12)
STR R2,[R0]         @将GPIOE的输出速度寄存器的值重新写进内存地址中
STR R3,[R1]         @将GPIOF的输出速度寄存器的值重新写进内存地址中
STR R6,[R5]
@设置PE10,PE8,PF10引脚无需上拉下拉电阻
LDR R0,=0X5000600C  @将GPIOE的输出速度寄存器的地址放进R0中
LDR R1,=0X5000700C  @将GPIOF的输出速度寄存器的地址放进R1中
LDR R5,=0X5000300C	@将GPIOB的模式寄存器的地址放进R5中
LDR R7,=(0X303<<12)
LDR R2,[R0]         @将R0中存放的内存地址的4字节数据读取到R2中
LDR R3,[R1]         @将R1中存放的内存地址的4字节数据读取到R3中
LDR R6,[R5]			@将R5中存放的内存地址的4字节数据读取到R6中
BIC R2,R2,#(0X3F<<16)  @将GPIOE的模式寄存器的[21:16]位置清0
BIC R3,R3,R7   @将GPIOF的模式寄存器的[21:20]位置清0
BIC R6,R6,#(0X3<<12)
STR R2,[R0]         @将GPIOE的输出速度寄存器的值重新写进内存地址中
STR R3,[R1]         @将GPIOF的输出速度寄存器的值重新写进内存地址中
STR R6,[R5]

loop:
	BL LED1_ON
	BL delay

	BL LED1_OFF
	BL delay

	BL LED2_ON
	BL delay

	BL LED2_OFF
	BL delay

	BL LED3_ON
	BL delay

	BL LED3_OFF
	BL delay

	BL BEEP_ON
	BL delay

	BL BEEP_OFF
	BL delay

	BL FAN_ON
	BL delay

	BL FAN_OFF
	BL delay

	BL MOTOR_ON
	BL delay

	BL MOTOR_OFF
	BL delay
	B loop
LED1_ON:
    LDR R0,=0X50006014  @将GPIOE的输出数据寄存器的地址放进R0中
    LDR R1,[R0]         @将R0中存放的内存地址的4字节数据读取到R1中
    BIC R1,R1,#(0X1<<10)
    ORR R1,R1,#(0X1<<10)
	STR R1,[R0]
	MOV PC,LR
LED1_OFF:
    LDR R0,=0X50006014  @将GPIOE的输出数据寄存器的地址放进R0中
    LDR R1,[R0]         @将R0中存放的内存地址的4字节数据读取到R1中
    BIC R1,R1,#(0X1<<10)
	STR R1,[R0]
	MOV PC,LR
LED2_ON:
    LDR R0,=0X50007014  @将GPIOF的输出数据寄存器的地址放进R0中
    LDR R1,[R0]         @将R0中存放的内存地址的4字节数据读取到R1中
    ORR R1,R1,#(0X1<<10)
	STR R1,[R0]
	MOV PC,LR
LED2_OFF:
    LDR R0,=0X50007014  @将GPIOF的输出数据寄存器的地址放进R0中
    LDR R1,[R0]         @将R0中存放的内存地址的4字节数据读取到R1中
    BIC R1,R1,#(0X1<<10)
	STR R1,[R0]
	MOV PC,LR
LED3_ON:
    LDR R0,=0X50006014  @将GPIOE的输出数据寄存器的地址放进R0中
    LDR R1,[R0]         @将R0中存放的内存地址的4字节数据读取到R1中
    ORR R1,R1,#(0X1<<8)
	STR R1,[R0]
	MOV PC,LR
LED3_OFF:
    LDR R0,=0X50006014  @将GPIOE的输出数据寄存器的地址放进R0中
    LDR R1,[R0]         @将R0中存放的内存地址的4字节数据读取到R1中
    BIC R1,R1,#(0X1<<8)
	STR R1,[R0]
	MOV PC,LR
BEEP_ON:
	LDR R0,=0X50003014
	LDR R1,[R0]
	ORR R1,R1,#(0X1<<6)
	STR R1,[R0]
	MOV PC,LR
BEEP_OFF:
	LDR R0,=0X50003014
	LDR R1,[R0]
	BIC R1,R1,#(0X1<<6)
	STR R1,[R0]
	MOV PC,LR
FAN_ON:
	LDR R0,=0X50006014  @将GPIOE的输出数据寄存器的地址放进R0中
    LDR R1,[R0]         @将R0中存放的内存地址的4字节数据读取到R1中
    ORR R1,R1,#(0X1<<9)
	STR R1,[R0]
	MOV PC,LR
FAN_OFF:
	LDR R0,=0X50006014  @将GPIOE的输出数据寄存器的地址放进R0中
    LDR R1,[R0]         @将R0中存放的内存地址的4字节数据读取到R1中
    BIC R1,R1,#(0X1<<9)
	STR R1,[R0]
	MOV PC,LR
MOTOR_ON:
	LDR R0,=0X50007014  @将GPIOF的输出数据寄存器的地址放进R0中
    LDR R1,[R0]         @将R0中存放的内存地址的4字节数据读取到R1中
    ORR R1,R1,#(0X1<<6)
	STR R1,[R0]
	MOV PC,LR
MOTOR_OFF:
 	LDR R0,=0X50007014  @将GPIOF的输出数据寄存器的地址放进R0中
    LDR R1,[R0]         @将R0中存放的内存地址的4字节数据读取到R1中
    BIC R1,R1,#(0X1<<6)
	STR R1,[R0]
	MOV PC,LR
delay:
	LDR R4,=0X10000000
mm:
	CMP R4,#0X0
	SUBNE R4,R4,#0X1
	BNE mm
	MOV PC,LR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值