
 

list p=16f873 a

#include <p16f873a.inc>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF  & _BODEN_ON &  _XT_OSC 


;  & _XT_OSC


;CP_OFF is code protect off
;_WDT_OFF es wacht dog apagado
;_PWRTE_ON  Enable power-up delay timer




; _XT_OSC oscilador a cristal


; ver forma de onda de la alimentacion
; a que valor esta configurado el puerto a?
; org 0x05 ORG 5  Línea de inicio

;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 
intcon equ 0x0B  
optionr equ 0x81 
trisa equ 0x85 
trisb equ 0x86 
TEMP1 equ 0x21
TEMP2 equ 0x22


; modificacion
    CMCON equ 0x9c

    ADCON0 equ 0x1f

    ADCON1 equ 0x9f
; fin modificacion


#define LED porta,0            
#define BANK1 bsf status,5 
#define BANK0 bcf status,5 

org 0x00 ;aparentemente bien


;///// Etapa configuración

; salto al BANK0

       bcf status,5 ; bank0
     
       bcf intcon,4 ;desabilito las int externas



; pongo en cero los temporizadores


       movlw 00h
       movwf TEMP1

       movlw 00h
       movwf TEMP2




; Deshabilito las int

       bcf intcon, 7 ;desabilito las int generales 

;BANK1

       bsf status,5 ; bank1
     
; Puerto B como salida entero  

       movlw 00h
       movwf trisb

;BANK0

       bcf status,5 ; bank0
     
       movlw 00h
       movwf portb

  
;BANK1
       bsf status,5 ; bank1


; modifiaciones

     movlw 0xff
     movwf CMCON 

     bsf ADCON1,0
     bsf ADCON1,1
     bsf ADCON1,2
     bsf ADCON1,3


;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'00000000'
       movwf trisa


;BANK0
      bcf status,5 ; bank0

      movlw 0xff
      movwf porta


funciona   
          
; BTFSC f,b, Comprueba un bit "b" de "f" y salta si es 0

 vuelta  
       call encendido
       btfsc porta,0
       goto vuelta
       goto tr

 
  tr   call apagado
       btfsc porta,0
       goto tr 
       goto vuelta 

goto funciona 


encendido

       movlw	b'00000010'
       movwf	portb

call retardo
call retardo

       movlw	b'01000000'
       movwf	portb

call retardo
call retardo

       movlw	b'00000010'
       movwf	portb

call retardo
call retardo

       movlw	b'01000000'
       movwf	portb

return



apagado

      ; movlw	0x00
       
movlw	b'01000010'
movwf	portb

call retardo
call retardo
call retardo

return



retardo 

       MOVLW .200
       MOVWF TEMP1 
  BBBB MOVLW .250 
       MOVWF TEMP2 
  AAAA NOP
       NOP
       NOP
       NOP
       NOP 
       NOP
       NOP
       NOP
       NOP
       NOP 
       DECFSZ TEMP2 
       GOTO AAAA 
       DECFSZ TEMP1 
       GOTO BBBB 
       RETLW 0 

return  


end

