Estoy peleándome con las interrupciones. Tengo programada una interrupción en el temporizador 1 para cuando haga overflow. Lo hace correctamente el problema es que tras la interrupción cuando vuelve al programa principal vuelve a entrar a la interrupción de temporizador 1. vuelve a ejecutarse al interrupción y al salir continua el programa principal sin problemas.
Le he dado vueltas y no entiendo porque realiza 2 veces la interrupción. Porque cuando hace overflow se activa el TF1 y al entrar en la interrupción, el TF1 se desactiva. No se si hago algo mal o es cosa del simulador. Os dejo el código por si veis algo:
$MOD51 ; This includes 8051 definitions for the Metalink assembler
ZERBAIT EQU 20H
BESTE EQU 30H
ORG 00H
LJMP 30H
ORG 13H ;interrupcion int1
LJMP INT_EX1
ORG 1BH ;interrupcion timer1
LJMP INT_ET1
ORG 30H ;Programa principal
SETB EA
SETB EX1
SETB ET1
CLR PX1
SETB PT1
MOV TMOD,#10H
SETB TR1
MOV TH1,#0FFH
MOV TL1,#00H
BUCLE: MOV A,R0
ADDC A,#ZERBAIT
JMP BUCLE
INT_EX1:
PUSH ACC
PUSH PSW
MOV A,#BESTE
CLR C
POP PSW
POP ACC
RETI
INT_ET1:
PUSH ACC
PUSH PSW
CLR ET1 ;Esto está de sobra pero sino se repite dos veces la interrupción del temporizador 1
ADD A,#BESTE
DA A
POP PSW
POP ACC
RETI
NOP
END