TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Arim en 24 de Abril de 2007, 20:30:36
-
Hola!
Quería saber si podrían ayudarme con mi problema. Una vez que terminé mi programa, y probé de simularlo unas cuantas veces, justo antes de grabarlo, el Mplab no me dejó abrir la ventana Watch Windows para ver cómo se modifican algunos registros de propósito general con los que cuenta mi programa. Al final, luego de grabarlo, no funcionó como se esperaba.
También quería preguntarles si al simular una interrupción, el Mplab permite hacer esto cuantas veces uno quiera. A mí me deja hacerlo sólo una vez, ¿será por algún error en la programación?
Desde ya, les agradezco.
Saludos
Arim
-
Hola!
Quería saber si podrían ayudarme con mi problema. Una vez que terminé mi programa, y probé de simularlo unas cuantas veces, justo antes de grabarlo, el Mplab no me dejó abrir la ventana Watch Windows para ver cómo se modifican algunos registros de propósito general con los que cuenta mi programa. Al final, luego de grabarlo, no funcionó como se esperaba.
Bueno, es muy raro que no te funcione, tal vez tengas algún problema en tu pc o no configuraste bien algo.
También quería preguntarles si al simular una interrupción, el Mplab permite hacer esto cuantas veces uno quiera. A mí me deja hacerlo sólo una vez, ¿será por algún error en la programación?
Es muy probable, si de alguna forma no 'reseteas' el evento o flag que produjo la interrupción, es probable que no se vuelva a activar.
Si tu código está bien, el MPSIM simula bastante bien a un pic.
Podrías subir algo del código para verificar mejor.
-
Acá les mando el código por si encuentran dónde puede estar el error. Creo que el flag queda reseteado (BCF INTF, antes de salir de la interrupción), pero tal vez me equivoque. :-)
Desde ya, muchas gracias.
Arim
__________________________________________________________
LIST P=16F84
RADIX HEX
#INCLUDE P16F84.INC
;ASIGNACIONES
CONT EQU 0x0C
A EQU 0x0D
PDel0 EQU 0x0E
PDel1 EQU 0x0F
ORG 00H
GOTO INICIO
;INTERRUPCIÓN
ORG 04H
BCF INTCON,GIE
BCF INTCON,INTE
CALL SOUND
BCF INTCON,INTF
RETFIE
;PROGRAMA PRINCIPAL
INICIO
BSF STATUS,RP0
CLRF TRISA
MOVLW B'00111111'
MOVWF TRISB
BCF STATUS,RP0
BSF INTCON,GIE
BSF INTCON,INTE
CLRF PORTA
CLRF CONT
CLRF A
TEST MOVLW d'9'
SUBWF A,0
BTFSC STATUS,Z
GOTO SALIDA
BTFSC PORTB,3
INCF CONT
CALL RET
INCF A
GOTO TEST
SALIDA MOVFW CONT
MOVWF PORTA
CLRF CONT
CLRF A
GOTO TEST
;RETARDO
RET movlw .110 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .181 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 ciclo delay
decfsz PDel1,1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0,1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
SOUND
BSF PORTB,7
BSF PORTB,6
CALL RET
CALL RET
CALL RET
BCF PORTB,7
BCF PORTB,6
CALL RET
CALL RET
BSF PORTB,7
BSF PORTB,6
CALL RET
CALL RET
CALL RET
BCF PORTB,7
BCF PORTB,6
RETURN
END
__________________________________________________________
-
He visto esto que no me gusta
;INTERRUPCIÓN
ORG 04H
BCF INTCON,GIE
BCF INTCON,INTE
CALL SOUND
BCF INTCON,INTF
RETFIE
Porqué apagas el GIE? porqué apagas el INTE?
. El GIE se apaga solo , lo apaga el PIC al ocurrir una interrupción
. El INTE si lo deshabilitas, precisamente no volverá a ocurrir la interrupción
Saludos