我试着编写一些代码,但我是初学者在装配时我无法完成我想在按下按钮时闪烁2个指示灯。我可以在没有按钮的情况下使LED闪烁,但我无法使用按钮。
@ STM32F107 - 装配模板
.thumb
.syntax unified
@保留STACKINIT变量。 .equ STACKINIT,0x20008000 .equ DELAY,80000
.equ RCC_APB2ENR, 0x40021018 @
.equ GPIOD_CRL, 0x40011400 @ D portuna clock
.equ GPIOD_ODR, 0x4001140C @ D portunu output olarak belirledik 0x0C offset
.equ GPIOC_CRL, 0x40011000 @ C portuna clock
.equ GPIOC_IDR, 0x40011008 @ C portunu input olarak belirledik 0x08 offset
.section .text
.word STACKINIT
.word _start + 1
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ Main代码从这里开始 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
_start:
LDR R6, = RCC_APB2ENR @ Load peripheral clock enable regiser
LDR R5, [R6] @ Read its content
ORR R5, 0x00000020 @ Buranın nasıl bulunacağını biliyorum portlara göre - Bit( A 2 B 3 C 4 D 5 ...)
STR R5, [R6] @ Store back the result in Perihperal clock enable register
@ Make GIOOD Pin1 as output pin (Page 170 from RM0008)
LDR R6, = GPIOD_CRL @ Load GPIOD control register low (Pin1 is in CRL register)
LDR R5, = 0x22222222 @ hepsi output yap
STR R5, [R6] @ Store back the result in GPIOD control register low
@ Enable GPIOC Peripheral Clock (
LDR R6, = RCC_APB2ENR
LDR R5, [R6]
ORR R5, 0x00000010 @ c portu
STR R5, [R6]
@ Make GIOOC Pins as input pin
LDR R6, = GPIOC_CRL
LDR R5, = 0x11111111 @ hepsi input mu oldu butonların bilmiyorum ?
STR R5, [R6]
dongu:
LDR R6, = GPIOC_IDR
LDR R5, = 0x00000001
STR R5, [R6]
BTFSC GPIOC,1
GOTO dongu
@ Set GIOOD Pin1 to 1 (Page 172 from RM0008)
LDR R6, = GPIOD_ODR @ Load GPIOD output data register
LDR R5, = 0x00000001 @ 1. lede elaktirik ver :)
STR R5, [R6] @ Store back the result in GPIOD output data register
LDR R1, = 1460000
循环: SUBS R1,1 BNE循环
LDR R6, = GPIOD_ODR @ Load GPIOD output data register
LDR R5, = 0x00000002 @ 2. LED
STR R5, [R6]
LDR R1, = 1460000
LOOP1: SUBS R1,1 BNE loop1 B dongu
答案 0 :(得分:0)
两个问题,我认为您将端口C配置为输出而不是输入。模式应该是00而不是01.并且汇编程序应该捕获一个错字,你不想要0x40011008而不是0x4001108h作为端口c IDR的地址吗?只要端口c引脚0不是该规则的例外,端口应该重置为输入,只要端口c引脚0不是例外(我没有在寄存器描述中看到异常,它默认为0x44444444,这是所有端口都是数字的输入)您可以在RCC中启用端口C后轮询IDR。