TODOPIC

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:
   
CASO25:
   MOVLW   50
   SUBWF   CONTADOR,W
   BTFSC   STATUS,C
   GOTO   FINCASO25
;-------------------------------------------------------------------------------
   MOVLW   B'10011110'
   MOVWF   PORTB
   BTFSC   CONTADOR,0
   GOTO   FINSWITCH
   MOVLW   B'10'
   XORWF   PORTA,F
   GOTO   FINSWITCH
FINCASO25:
   
CASO30:
   MOVLW   60
   SUBWF   CONTADOR,W
   BTFSC   STATUS,C
   GOTO   FINCASO30
;-------------------------------------------------------------------------------
   MOVLW   B'00000010'
   XORWF   PORTB,F
   BSF   PORTB,0
   BTFSC   CONTADOR,0
   GOTO   FINSWITCH           ;AQUI ES EL OTRO ERROR QUE ME LANZA
   MOVLW   B'10'
   XORWF   PORTA,F
   GOTO   FINSWITCH
FINCASO30:
   
CASO50:
   MOVLW   100
   SUBWF   CONTADOR,W
   BTFSC   STATUS,C
   GOTO   FINCASO50

   MOVLW   B'01110011'
   MOVWF   PORTB
   BSF   PORTA,VP2
   BCF   PORTA,VP1
   GOTO   FINSWITCH
FINCASO50:
   
CASO55:
   MOVLW   110
   SUBWF   CONTADOR,W
   BTFSC   STATUS,C
   GOTO   FINCASO55

   MOVLW   B'01110011'
   MOVWF   PORTB
   BTFSS   CONTADOR,0
   GOTO   FINSWITCH
   MOVLW   B'01'
   XORWF   PORTA,F
   GOTO   FINSWITCH
FINCASO55:
   
CASO60:
   MOVLW   120
   SUBWF   CONTADOR,W
   BTFSC   STATUS,C
   GOTO   FINCASO60

   MOVLW   B'00010000'
   BTFSS   CONTADOR,0
   BSF W,   VP1
   XORWF   PORTB,F
   BSF   PORTB,3
   BTFSC   CONTADOR,0
   GOTO   FINSWITCH
   MOVLW   B'01'
   XORWF   PORTA,F
   GOTO   FINSWITCH
FINCASO60:
   
OTHERWISE:
   MOVLW   B'10011110'
   MOVWF   PORTB
   BCF   PORTA,VP2
   BSF   PORTA,VP1
   CLRF   CONTADOR
FINSWITCH:
   MOVLW   B'10100000'
   MOVWF   INTCON
   RETFIE
   END

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
  1. __CONFIG_CP_OFF & _PWRTE_OFF & _WDT_ON & _XT_OSC
  2.  
  3. ORG 0
  4. GOTO PRINCIPAL
  5.  
  6. ORG 4
  7. 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
  1. LIST P = 16F84A r=dec

O sea:

Código: ASM
  1. 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
  1. FINSWITCH:
  2.    MOVLW   B'10100000'
  3.    MOVWF   INTCON
  4.    RETFIE

Deberias reemplazarlo por

Código: ASM
  1. FINSWITCH:
  2.    BCF   INTCON, T0IF
  3.    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.