Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: JacksonTeran en 22 de Enero de 2017, 19:47:05
Título: Semaforo Vehicular con pic16f84a
Publicado por: JacksonTeran en 22 de Enero de 2017, 19:47:05
Buenas tardes! El siguiente codigo no me compila. Porque el TMR0 En el principal parece estar mal y posteriormente en el goto finswitch en el caso25 (ahi especifico). Soy nuevo programando. Si alguien me podria echar una mano. Super agradecido.
LIST P = 16F84A r=dec #INCLUDE <P16F84A.INC> __CONFIG_CP_OFF & _PWRTE_OFF & _WDT_ON & _XT_OSC
ORG 0 GOTO PRINCIPAL
ORG 4 GOTO IRQ
;DEFINICION DE CONSTANTES CUENTA EQU 16 ;VALOR DE CUENTA DEL TMR0 (256-240) RP2 EQU 7 ;BITS DE LOS SEMAFOROS DE PEATONES RP1 EQU 6 VP2 EQU 1 VP1 EQU 0 ;------------------------------------------------------------------------------- CONTADOR EQU 0X10 RETARDO EQU 0X11 ;------------------------------------------------------------------------------- PRINCIPAL: MOVLW B'10000111' BSF STATUS,RP0 MOVWF OPTION_REG BCF STATUS,RP0 ;------------------------------------------------------------------------------- BSF STATUS,RP0 CLRF TRISB CLRF TRISA BCF STATUS,RP0 ;------------------------------------------------------------------------------- CLRF CONTADOR MOVLW B'10011110' MOVWF PORTB BCF PORTA,VP2 BSF PORTA,VP1 ;------------------------------------------------------------------------------- MOVLW CUENTA MOVWF TMR0 ;AQUI ME LANZA EL PRIMER ERROR ;------------------------------------------------------------------------------- MOVLW B'10100000' MOVWF INTCON ESPERA: CLRWDT GOTO ESPERA IRQ: MOVLW CUENTA MOVWF TMR0 INCF RETARDO MOVLW 5 SUBWF RETARDO,W BTFSS STATUS,Z GOTO FINSWITCH CLRF RETARDO INCF CONTADOR,F CASO20: MOVLW 40 SUBWF CONTADOR,W BTFSC STATUS,C GOTO FINCASO20 ;------------------------------------------------------------------------------- MOVLW B'10011110' MOVWF PORTB BCF PORTA,VP2 BSF PORTA,VP1 GOTO FINSWITCH FINCASO20:
Título: Re:Semaforo Vehicular con pic16f84a
Publicado por: KILLERJC en 22 de Enero de 2017, 22:48:39
Los unicos errores que me dio tu programa, fueron:
Estas lineas:
Código: ASM
__CONFIG_CP_OFF & _PWRTE_OFF & _WDT_ON & _XT_OSC
ORG 0
GOTO PRINCIPAL
ORG 4
GOTO IRQ
- Estan en la primer columna, deberian ir justo a las demas instrucciones - El __CONFIG le falta un espacio, si te fijas esta junto __CONFIG y _CP_OFF
Esta linea le falta una coma
Código: ASM
LIST P = 16F84A r=dec
O sea:
Código: ASM
LIST P = 16F84A , r=dec
---------------- El RETFIE activa las interrupciones de vuelta, asi que no debes activarla, simplemente limpiar el flag.. Entonces este codigo:
Código: ASM
FINSWITCH:
MOVLW B'10100000'
MOVWF INTCON
RETFIE
Deberias reemplazarlo por
Código: ASM
FINSWITCH:
BCF INTCON, T0IF
RETFIE
--------------------------
No me meti a ver que hacias con el programa, eso queda cuestion tuya. Tambien te faltaria la proteccion de la interrupcion en la que se guardan STATUS y W, pero como no tenes nada en tu loop principal no vas a tener ningun problema de usarlo por ahora asi.