2017-01-21 1 views
0

왜 changetime이 호출되지 않습니까? 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 

에서 첫 선에서하지만 정확히 결코 PC가 changetime에 갈 생각 allthing 않습니다.

+0

인터럽트를 활성화 했습니까? – Jester

+0

네, 저는 i (SEI) –

+2

을 설정합니다. ISR이'changetime'에 빠지면 정말 원하는 것입니까? –

답변

0

저는 외부 인터럽트에 대해 혼란스러워한다고 생각합니다. 난 당신이 내가 어떻게 문제를 해결하는 몇 가지 일반적인 아이디어를 줄 것이다 뭘 원하는지 알 수 없기 때문에 모든

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

첫째, 8 비트 AVR 마이크로 컨트롤러에 대한 외부 인터럽트에 대한 좋은 튜토리얼이있다. 현재 외부 인터럽트 지시어를 정의 :

.ORG $002 
RJMP changetime 

이 부분은 외부 인터럽트가 일어나는 경우 changetime로 이동 ($ 002 경우에는 외부 인터럽트 0)라고 말한다. 따라서 우리는 PORTD의 비트 2를 활성화해야합니다. 외부 인터럽트 0은 SREG I- 플래그 및 해당 인터럽트 마스크가 설정된 경우 외부 핀 INT0에 의해 활성화 될 수 있습니다. 따라서 외부에서 시간을 변경하려면 해당 PIN을 활성화해야합니다.

+0

몇 가지 의견을 추가하고 원하는 것을 설명하면 코드에 도움이 될 수 있습니다. – alpay

관련 문제