Interrupciones del TMR1
Publicado por Santiago (1 intervención) el 25/05/2017 04:48:54
Hola a todos. Esta es mi primera vez aqui y mis habilidades en programacion no son muy buenas. Tengo que hacer un temporizador de 500ms y cada ese tiempo prender o apagar un led que se encontrará en PORTA,1. Debo realizarlo con interrupciones cuando el TMR1 se desborde y por eso es que no hay nada en el buque principal.
Primero que nada, no se si la programacion esta bien. Segundo, no estoy seguro porque (segun algunas simulaciones que he realizado) el LED se prende una vez pero nunca logra apagarse. Si alguien puede ayudarme cuanto antes lo agradeceria mucho!!
Primero que nada, no se si la programacion esta bien. Segundo, no estoy seguro porque (segun algunas simulaciones que he realizado) el LED se prende una vez pero nunca logra apagarse. Si alguien puede ayudarme cuanto antes lo agradeceria mucho!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
ORG 0x00
GOTO INICIO
;******************************************************************************
; Vector de Interrupcion
;******************************************************************************
ORG 0x04
GOTO ISR
;******************************************************************************
; Programa principal
;******************************************************************************
INICIO
BANCO1
MOVLW B'11111111'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISA
BSF PIE1,TMR1IE ;HABILITO INTERRUPCION POR DESBORDAMIENTO
BANCO0
MOVLW B'00110001' ;PRESCALER EN 8 Y PRENDO TEMPORIZADOR
MOVWF T1CON
BSF INTCON,GIE ;INTERRUPCIONES GLOBALES
BSF INTCON,PEIE ;HABILITO INTERRUPCIONES PERIFERICAS
BUCLE_PRINCIPAL
GOTO BUCLE_PRINCIPAL
ISR
BCF T1CON,0 ;APAGA EL TEMPORIZADOR
MOVWF BCKP_W ;BACK UP DE DATOS
SWAPF STATUS,W
MOVWF BCKP_STAT
SWAPF STATUS,W
BTFSC PIR1,TMR1IF ;BANDERA EN 0?
GOTO TMR1ISR ;NO, VA A TMR1ISR
TMR1ISR
BCF PIR1,TMR1IF ;LIMPIA BANDERA
MOVLW 0x0B ;30
MOVWF TMR1H
MOVLW 0xDC ;36
MOVWF TMR1L
BSF T1CON,0 ;PRENDO EL TEMPORIZADOR
BTFSC PORTA,1 ;LED APAGADO?
GOTO APAGAR
GOTO PRENDER
PRENDER
BSF PORTA,1
GOTO FIN_INTERRUPCION
APAGAR
BCF PORTA,1
GOTO FIN_INTERRUPCION
FIN_INTERRUPCION
SWAPF BCKP_STAT
MOVWF STATUS
SWAPF BCKP_W,F
SWAPF BCKP_W,W
RETFIE
END
Valora esta pregunta
0