装配中的中断向量有什么问题

时间:2017-01-21 17:45:01

标签: assembly avr atmega

为什么没有调用更改时间?    我想在int0的上升沿为真时做一些操作。 我设置了中断并做了所有我认为错误来自.org

的第一行
.include "m32def.inc"
.ORG $00
RJMP define
.ORG $002
RJMP changetime
.ORG $40
.DB $0C,$0A,$21,$11
.ORG $100
.DB $FC,$60,$DA,$F2,$66,$B6,$BE,$E0,$FE,$F6
.ORG $200
.DB $FB,$F6,$F1,$E2,$C4

define:
LDI R20,246
LDI R24,$41
OUT GICR,R24
LDI R24,$40
OUT GICR,R16
SEI
LDI R24,$03
OUT MCUCR,R24
SBI DDRD,0
SBI DDRD,1
LDI R16,$04
OUT SPH,R16
LDI R16,$00
OUT SPL,R16

changetime:
LDI R20,$FF
CPI R21,5
BRNE dochangetime
LDI R21,0
RJMP exitchangetime
dochangetime:
LDI R31,$03
MOV R30,R21
LPM R20,Z
INC R21
LOPP:RJMP LOPP
exitchangetime:
RETI

但是从来没有电脑改变时间。

1 个答案:

答案 0 :(得分:0)

我认为你对外部中断感到困惑。关于8位AVR微控制器的外部中断有一个很好的教程:

http://www.avr-tutorials.com/interrupts/The-AVR-8-Bits-Microcontrollers-External-Interrupts

首先,由于我不知道你想做什么,我会提出一些如何解决问题的一般性建议。您已在此处定义了外部中断指令:

.ORG $002
RJMP changetime

这部分说明当外部中断发生时(对于$ 002,它是外部中断0)跳转到更改时间。所以要中断我们应该启用PORTD的第2位。如果SREG I标志和相应的外部引脚INT0可以激活外部中断0 中断屏蔽已设置。因此,如果您想在外部更改时间,则应启用相应的PIN。