Ensamblador - Interrupciones del TMR1

 
Vista:

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!!


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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder