汇编实现流水灯

.text 
.global _start
_start: 
@定时器使能
	ldr r0,=0x50000a28  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	orr r1,r1,#(0x3<<4) @将数据的第四、五位置1
	str r1,[r0] 		@将数据写回

@将PE10,PF10,PE8管脚设置为输出模式
	ldr r0,=0x50006000  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	bic r1,r1,#(0x33<<16)@将16,17,20,21四位置0
	orr r1,r1,#(0x11<<16)@将16,20位置1
	str r1,[r0] 		@将数据写回
@PF10
	ldr r0,=0x50007000  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	bic r1,r1,#(0x33<<16)@将16,17,20,21四位置0
	orr r1,r1,#(0x11<<16)@将16,20位置1
	str r1,[r0] 		@将数据写回

@将PE10,PF10,PE8管脚设置为推挽输出
	ldr r0,=0x50006004  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	bic r1,r1,#(0x5<<8)@将10,8位置0
	str r1,[r0] 		@将数据写回
@PF10
	ldr r0,=0x50007004  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	bic r1,r1,#(0x5<<8)@将10,8位置0
	str r1,[r0] 		@将数据写回

@将PE10,PF10,PE8管脚设置为低速输出
	ldr r0,=0x50006008  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	bic r1,r1,#(0x33<<20)@将16,17,20,21两位置0
	str r1,[r0] 		@将数据写回
@PF10
	ldr r0,=0x50007008  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	bic r1,r1,#(0x33<<20)@将16,17,20,21两位置0
	str r1,[r0] 		@将数据写回

@将PE10,PF10,PE8管脚输出设置为没有上拉下拉电阻
	ldr r0,=0x5000600c  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	bic r1,r1,#(0x33<<20)@将16,17,20,21两位置0
	str r1,[r0] 		@将数据写回
@PF10
	ldr r0,=0x5000700c  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	bic r1,r1,#(0x33<<20)@将16,17,20,21两位置0
	str r1,[r0] 		@将数据写回
@PE10,PF10,PE8管脚输出高低电平

loop:
@LED1亮
	ldr r0,=0x50006014  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	orr r1,r1,#(0x1<<10)@将10位置0
	str r1,[r0] 		@将数据写回
	bl delay
@LED1灭
	ldr r0,=0x50006014  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	bic r1,r1,#(0x1<<10)@将10位置0
	str r1,[r0] 		@将数据写回
	bl delay

@LED2亮
	ldr r0,=0x50007014  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	orr r1,r1,#(0x1<<10)@将10位置0
	str r1,[r0] 		@将数据写回
	bl delay
@LED2灭
	ldr r0,=0x50007014  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	bic r1,r1,#(0x1<<10)@将10位置0
	str r1,[r0] 		@将数据写回

@LED3亮
	ldr r0,=0x50006014  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	orr r1,r1,#(0x1<<8)@将8位置0
	str r1,[r0] 		@将数据写回
	bl delay
@LED3灭
	ldr r0,=0x50006014  @向r0寄存器中写入起始地址
	ldr r1,[r0] 		@从起始地址开始读4字节数据进入r1
	bic r1,r1,#(0x1<<8)@将8位置0
	str r1,[r0] 		@将数据写回
	bl delay
	b loop

@封装延时函数

delay:
    LDR R4,=0X10000000
mm:
    cmp r4,#0
    subne r4,r4,#1
    bne mm
    mov pc,lr  @程序返回


.end 

你可能感兴趣的:(汇编,java,前端)