修改以上代码,利用汇编语言编程,采集ADC的数字量, 当数字量在0~800之间,LED7(GPIOE13,0xc001e020,配置功能寄存器GPIOEALTFN0,输出使能GPIOEOUTENB,0xc001e004,输出0xc001e000)亮; 当数字量在800~1600之间,LED8(GPIOC17,0xc001c024,配置功能寄存器GPIOCALTFN1,GPIOCOUTENB,0xc001c004,输出0xc001c000)亮; 当数字量在1600~2400之间,LED9(GPIOC8,0xc001c020,寄存器GPIOCALTFN0,输出使能GPIOCOUTENB,0xc001c004,输出0xc001c000)亮; 当数字量在2400~3200之间;LED10(GPIOC7,0xc001c020,配置功能寄存器GPIOCALTFN0,输出使能GPIOCOUTENB,0xc001c004,,输出0xc001c000)亮; 当数字量在3200~4000之间,LED7~LED10全亮,同时蜂鸣器(GPIOC14)响。
时间: 2024-03-20 11:41:33 浏览: 23
以下是修改后的代码,实现了采集ADC的数字量,并根据数字量点亮不同的LED灯以及蜂鸣器。
```
.arm
.global adc
adc:
bl led__beep_init @ 初始化LED和蜂鸣器
ldr r1, =0xc0012004 @ r1 = 0xc0012004
ldr r0, [r1] @ r0 = *r1
mov r2, #1
orr r0, r0, r2, lsl #28 @ r0 = r0 | (r2<<28)
str r0, [r1] @ *r1 = r0
ldr r1, =0xc0053000 @ r1 = 0xc0053000
ldr r0, [r1] @ r0 = *r1
ldr r2, =0xc001e020 @ r2 = 0xc001e020
ldr r3, =0xc001e004 @ r3 = 0xc001e004
ldr r4, =0xc001e000 @ r4 = 0xc001e000
ldr r5, =0xc001c024 @ r5 = 0xc001c024
ldr r6, =0xc001c004 @ r6 = 0xc001c004
ldr r7, =0xc001c000 @ r7 = 0xc001c000
ldr r8, =0xc001c020 @ r8 = 0xc001c020
ldr r9, =0xc001c008 @ r9 = 0xc001c008
ldr r10, =0xc001c014 @ r10 = 0xc001c014
loop:
ldr r0, [r1] @ r0 = *r1
and r0, r0, #0xFFF @ r0 = r0 & 0xFFF
cmp r0, #800
blt led7 @ 小于800,LED7亮
cmp r0, #1600
blt led8 @ 小于1600,LED8亮
cmp r0, #2400
blt led9 @ 小于2400,LED9亮
cmp r0, #3200
blt led10 @ 小于3200,LED10亮
b allleds @ 其他情况,LED7~LED10全亮,蜂鸣器响
led7:
str r4, [r2] @ LED7亮
str r2, [r3] @ GPIOEOUTENB = 1
str r3, [r5] @ GPIOEALTFN0 = 0
b loop
led8:
str r7, [r5] @ LED8亮
str r5, [r6] @ GPIOCOUTENB = 1
str r6, [r8] @ GPIOCALTFN1 = 1
b loop
led9:
str r7, [r8] @ LED9亮
str r8, [r6] @ GPIOCOUTENB = 1
str r6, [r8] @ GPIOCALTFN0 = 1
b loop
led10:
str r7, [r8] @ LED10亮
str r8, [r6] @ GPIOCOUTENB = 1
str r6, [r9] @ GPIOCALTFN0 = 1
str r6, [r10] @ GPIOCALTFN1 = 1
b loop
alleds:
str r7, [r2] @ LED7~LED10全亮
str r7, [r5]
str r7, [r8]
str r2, [r3] @ GPIOEOUTENB = 1
str r5, [r6] @ GPIOCOUTENB = 1
str r8, [r9]
str r8, [r10]
bl led_beep_on @ 蜂鸣器响
b loop
```