
 

list p=16f873 a

#include <p16f873a.inc>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF  & _BODEN_OFF &  _XT_OSC 


;poner otro led y hacer que prenda uno y se apague el
;otro al mismo tiempo


; _CP_OFF:            Protección de código DESACTIVADO.
; _DEBUG_OFF:         Debug en circuito DESACTIVADO.
; _WRT_PROTECT_OFF:   Protección a escritura en memoria de programa DESACTIVADO.
; _CPD_OFF:           Protección de código de datos DESACTIVADO.
; _LVP_OFF:           Programación en baja tensión DESACTIVADO.
; _BODEN_OFF:         Reset por Brown-out DESACTIVADO.
; _MCLRE_ON:          Reset por pin externo ACTIVADO.
; _PWRTE_ON:          Retraso al reset ACTIVADO.
; _WDT_OFF:           Watchdog DESACTIVADO.
; _XT_OSC:            Oscilador externo del tipo XT.


; El Brown-out Reset es un sistema muy simple que hace que el PIC entre en modo Reset,
; no hace nada, si la alimentación VCC baja de un cierto valor que es configurable.
; Se configura activándolo en el registro correspondiente y seleccionando el nivel
; de voltaje por debajo del cual queremos que el PIC permanezca reseteado. Lo suyo
; es trabajar en conjunción con el Power On Timer que debidamente configurado
; lo que hace es "liberar" el Reset tras un tiempo programado despues de haberse 
; estabilizado el PIC.





status equ 0x03  
porta equ 0x05 
portb equ 0x06 
portc equ 0x07 
intcon equ 0x0B  
optionr equ 0x81 
trisa equ 0x85 
trisb equ 0x86
trisc equ 0x87  
posicion equ 0x21
estado equ 0x22
giro equ 0x23
TEMP1 equ 0x25
TEMP2 equ 0x26
modificacion equ 0X25
; modificacion
CMCON equ 0x9c
ADCON0 equ 0x1f
ADCON1 equ 0x9f
; fin modificacion

; si vede ir asta la posicion cero

; si deve elejir para que lkado moverse

#define LED porta,0            
#define BANK1 bsf status,5 
#define BANK0 bcf status,5 

org 0x00 

        goto neo
 
org 0x04 ; vector de interrupcion

   btfss giro,7
   goto uno
   bcf giro,7
   goto afuera 
uno bsf giro,7

afuera


retfie

neo

;///////////////////////////////////////////// Etapa configuración

; cero

       movlw b'00000000'
       movwf giro
   


;Habilito las int

       bcf status,5 ; bank0

       bsf intcon, 7 ;habilito las int generales  
                     ;bit 7: GIE: bit de habilitación global de Interrupciones
                         ;1= Habilita el permiso de interrupciones
                         ;0= Inhabilita todas las interrupciones
     
       bsf optionr,6 ;1:Interrupción por flanco ascendente  en el pin RB0/INT 
                     ;0:Interrupción por flanco: descendente en el pin RB0/INT


       bcf intcon,5    ;bit 5: T0IE: bit de habilitación de la interrupción por desbordamiento del TMR0
                            ;1= Habilita la interrupción
                               ;0= Inhabilita la interrupción


       bsf intcon,4 ;habilito las int externas
                    ;bit 4: INTE: bit de habilitación de la interrupción externa por el pin RB0/INT
                         ;1= Habilita la interrupción
                         ;0= Inhabilita la interrupción


       bcf intcon,3 ;bit 3: RBIE: bit de habilitación de interrupción por cambio de nivel en el PORTB
                             ;1= Habilita la interrupción
                             ;0= Inhabilita la interrupción



;bit 2: T0IF: flag de indicación de desbordamiento de TMR0
;1= El TMR0 se ha desbordado.  Se borra por software
;0= El TMR0 no se ha desbordado
;bit 1: INTF: flag de estado de la interrupción externa INT
;1= La interrupción externa se ha producido.  Se borra por software
;0= La interrupción externa no se ha producido
;bit 0: RBIF: flag de indicación de interrupción por cambio de nivel en PORTB
;1= Se ha producido un cambio de nivel en los pines RB7:RB4.  Se borra por
;software.
;0= No se ha producido un cambio de nivel en los pines RB7:RB4



;BANK1

       bsf status,5 ; bank1
     
; Puerto B como:
;               bit0 entrada inter           1
;               bit1 salida led conectado    0
;               bit2 entrada canal a encoder 1
;               bit3 entrada canal b encoder 1
;               bit4 entrada cero    encoder 1
;               bit5 salida nada conectado   0
;               bit6 salida led conectado    0
;               bit7 salida nada conectado   0
 
       movlw b'00011101'
       movwf trisb

;BANK0

       bcf status,5 ; bank0
     
       movlw 00h
       movwf portb

  
;BANK1
       bsf status,5 ; bank1


; modificaciones

     movlw 0xff
     movwf CMCON  ;IMPORTANTE!!!!!! 

     

    movlw 0x06
    movwf ADCON1 ;IMPORTANTE!!!!!!


   
;BANK0

     bcf status,5 ; bank0

     bsf ADCON0,0
     bsf ADCON0,1
     bsf ADCON0,2
     bsf ADCON0,3
 

;Fin modificaciones







;Puerto A como entrada

;BANK1
       bsf status,5 ; bank1


       movlw b'11111111'
       movwf trisa

   ;BANK0
      bcf status,5 ; bank0

      movlw 0x00
      movwf porta


;Puerto C como salida

;BANK1
       bsf status,5 ; bank1


       movlw b'00000000' ; esta bien todo como salida
       movwf trisc

   ;BANK0
      bcf status,5 ; bank0

      movlw 0x00
      movwf portc


;///////////////////////////////////////////// FIN CONFIGURACION

;   A     B     C     D

;1 	ON 	  ON 	OFF   OFF 	

; b'11000000'

;2 	OFF   ON 	ON 	  OFF 

; b'01100000'

;3 	OFF   OFF 	ON 	  ON 	

; b'00110000'

;4 	ON 	  OFF 	OFF   ON

; b'10010000'


control
 
  btfss giro,7
  goto lado
   call horario
   
   goto afuerasi
lado call antihorario

afuerasi

 
goto control



horario



      movlw b'11000000'
      movwf portc
  call retardacion 
  

     movlw b'01100000'
    movwf portc
  call retardacion 
 
 
     movlw b'00110000'
     movwf portc

  call retardacion 
  

      movlw  b'10010000'
      movwf portc
  call retardacion 


 
return


antihorario



      movlw b'10010000'
      movwf portc
  call retardacion 
  

     movlw b'00110000'
    movwf portc
  call retardacion 
 
 
     movlw b'01100000'
     movwf portc

  call retardacion 
  

      movlw  b'11000000'     
      movwf portc
  call retardacion 


 
return


retardacion 

DEL500 MOVLW .100 ;.200
       MOVWF TEMP1 
  BBBB MOVLW .100   ;.250 
       MOVWF TEMP2 
  AAAA NOP 
        
       DECFSZ TEMP2 
       GOTO AAAA 
       DECFSZ TEMP1 
       GOTO BBBB 
       RETLW 0 

return  


end

