Saludos a todos, tengo problemas con este PIC , no puedo hacer
funcionar los pines 0 y 1 del pto GPIO, lo configuro como entradas
pero siempre me los lee en 0, ya hice de todo, configure los restantes
REG para ver si era un problema por ese lado y nada, aca esta el
codigo ASM, no es muy prolijo pero es un ejemplo, no uso INT, ni TMR0,
ni TMR1, ni Comparadores, nada, los tiempos los generos con retardos,
por favor ayuda, de antemano gracias, chauuuuuuuuuuuu
;Programa para alarma de moto, con entrada de inicio de encendido y entrada de panico
; pIC 12F629
GPIO EQU 0X05
CMCON EQU 0X19
TRISIO EQU 0X85
STATUS EQU 0X03
OPCION EQU 0X81
PIR1 EQU 0X0C
PIE1 EQU 0X8C
RPO EQU 0X05
WPU EQU 0X95
IOC EQU 0X96
OSCCAL EQU 0X90
INTCON EQU 0X8B
PDel0 EQU 0X20
PDel1 EQU 0X21
TEMPO EQU 0X22
MULTI EQU 0X23
PDel01 EQU 0X24
PDel11 EQU 0X25
PDel21 EQU 0X26
ORG 0x000 ; processor reset vector
GOTO MAIN ; go to beginning of program
ORG 0x004
MAIN CLRF STATUS
BSF STATUS,RPO ; BANCO 1
MOVLW 0X80
MOVWF OPCION ;DESHABILITO WEAK Y DEMAS
CLRF IOC
CLRF INTCON
CLRF PIE1
CLRF WPU
BCF STATUS,RPO ; BANCO 0
CLRF PIR1
CLRF GPIO
CLRF TEMPO
CLRF CMCON
BSF STATUS,RPO ; BANCO 1
MOVLW 0X3E
MOVWF TRISIO ;CONFIGURO GPIO ASI: 0-SALIDA y 1-2-3-4-5 ENTRADAS
BCF STATUS,RPO ; BANCO 0
BCF GPIO,0
START BTFSC GPIO,4
GOTO START
CALL REBOTE
CALL REBOTE
CALL REBOTE
BTFSC GPIO,4 ;PASARON 300mS???
GOTO START
CALL REBOTE
CALL REBOTE
CALL REBOTE
BTFSC GPIO,4 ;PASARON 600mS???
GOTO START
CALL REBOTE
CALL REBOTE
CALL REBOTE
BTFSC GPIO,4 ;PASARON 900mS???
GOTO START
CALL REBOTE
CALL REBOTE
CALL REBOTE
BTFSC GPIO,4 ;PASARON 1200mS???
GOTO START
CALL REBOTE
CALL REBOTE
CALL REBOTE
BTFSC GPIO,4 ;PASARON 1500mS???
GOTO START
CALL REBOTE
CALL REBOTE
CALL REBOTE
BTFSC GPIO,4 ;PASARON 1800mS???
GOTO START
CALL REBOTE
CALL REBOTE
CALL REBOTE
BTFSC GPIO,4 ;PASARON 2100mS???
GOTO START
BSF GPIO,0 ;HABILITO SALIDA osea prendo
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE ;ESPERO 0.5 SEGUNDOS DESPUES DE ENCENDIDO
ATRACO BTFSC GPIO,3
GOTO ATRACO ;se activo boton panico?
CALL REBOTE
CALL REBOTE
BTFSC GPIO,3 ;confirmo
GOTO ATRACO
GOTO APAGAR ;ok empiezo conteo tiempo
APAGAR BTFSC GPIO,1 ;reviso programacion tiempo
GOTO UNO ;GPIO0=0 y GPIO1=0 = 15SEG
BTFSC GPIO,2 ;GPIO0=1 y GPIO1=0 = 30SEG
GOTO SEG45 ;GPIO0=0 y GPIO1=1 = 45SEG
GOTO SEG15 ;GPIO0=1 y GPIO1=1 = 60SEG
UNO BTFSC GPIO,2
GOTO SEG60
GOTO SEG30
SEG15 MOVLW .15
MOVWF TEMPO
GOTO TIME
SEG30 MOVLW .30
MOVWF TEMPO
GOTO TIME
SEG45 MOVLW .45
MOVWF TEMPO
GOTO TIME
SEG60 MOVLW .60
MOVWF TEMPO
GOTO TIME
TIME CALL SEGUND
DECFSZ TEMPO,1
GOTO TIME ;ACABARON LOS 15 SEGUNDOS Y APAGO
OFF BTFSC GPIO,5 ;ES LENTO O RAPIDO EL APAGADO??
GOTO LENTO
GOTO RAPIDO
LENTO BCF GPIO,0 ;apago
CALL REBOTE
CALL REBOTE
CALL REBOTE
BSF GPIO,0 ;prendo
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
BCF GPIO,0 ;apago
CALL REBOTE
CALL REBOTE
CALL REBOTE
BSF GPIO,0 ;prendo
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
BCF GPIO,0 ;apago
CALL REBOTE
CALL REBOTE
CALL REBOTE
BSF GPIO,0 ;prendo
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
BCF GPIO,0 ;apago
CALL REBOTE
CALL REBOTE
CALL REBOTE
BSF GPIO,0 ;prendo
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
BCF GPIO,0 ;apago
CALL REBOTE
CALL REBOTE
CALL REBOTE
BSF GPIO,0 ;prendo
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
BCF GPIO,0 ;apago
CALL REBOTE
CALL REBOTE
CALL REBOTE
BSF GPIO,0
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
BCF GPIO,0 ;apago
CALL REBOTE
CALL REBOTE
CALL REBOTE
BSF GPIO,0 ;prendo
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
BCF GPIO,0 ;apago
CALL REBOTE
CALL REBOTE
CALL REBOTE
BSF GPIO,0 ;prendo
CALL REBOTE
CALL REBOTE
CALL REBOTE
CALL REBOTE
RAPIDO BCF GPIO,0
GOTO RAPIDO ;apago y finalizo
REBOTE 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.
SEGUND movlw .14 ; 1 set numero de repeticion (C)
movwf PDel01 ; 1 |
PLoop01 movlw .72 ; 1 set numero de repeticion (B)
movwf PDel11 ; 1 |
PLoop11 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel21 ; 1 |
PLoop21 clrwdt ; 1 clear watchdog
decfsz PDel21, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop21 ; 2 no, loop
decfsz PDel11, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop11 ; 2 no, loop
decfsz PDel01, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop01 ; 2 no, loop
PDelL11 goto PDelL21 ; 2 ciclos delay
PDelL21 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
END