;------------------------------------------------------------
; Código assembler generado por Niple V6.3.1
; Proyecto: actibar timer 
; Autor: JUAN PABLO CALVO
; Fecha: 22/06/2018
; PIC: 12F683
; Velocidad de reloj: Int 4 Mhz
; Descripcion: 
;------------------------------------------------------------


 LIST    P=PIC12F683


_FCMEN_OFF            equ  0x37FF
_IESO_OFF             equ  0x3BFF
_BOD_OFF              equ  0x3CFF
_CPD_OFF              equ  0x3FFF
_MCLRE_OFF            equ  0x3FDF
_PWRTE_ON             equ  0x3FEF
_WDT_OFF              equ  0x3FF7
_INTRC_OSC_NOCLKOUT   equ  0x3FFC

 __config _FCMEN_OFF & _IESO_OFF & _BOD_OFF & _CPD_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT


;------------------------------------------------------------
;                  Declaración de Registros
;------------------------------------------------------------
w                     equ  0x0000
tmr0                  equ  0x0001
status                equ  0x0003
gpio                  equ  0x0005
pclath                equ  0x000a
intcon                equ  0x000b
cmcon0                equ  0x0019
cmcon1                equ  0x001a
adcon0                equ  0x001f
_np_w                 equ  0x0020
_np_status            equ  0x0021
_np_tiempo            equ  0x0025
_np_tiempo1           equ  0x0026
_np_tiempo2           equ  0x0027
_np_tiempo3           equ  0x0028
_np_t_bak             equ  0x0029
_np_t1_bak            equ  0x002a
_np_t2_bak            equ  0x002b
_np_t3_bak            equ  0x002c
_np_timers            equ  0x002d
_np_t0_ini            equ  0x002e
_np_t0_cint_l         equ  0x002f
_np_t0_cint_h         equ  0x0030
_np_t0_cint1_l        equ  0x0031
_np_t0_cint1_h        equ  0x0032
opcion                equ  0x0081
trisio                equ  0x0085
ansel                 equ  0x009f
_np_banderas2         equ  0x0033


;------------------------------------------------------------
;                  Declaración de Bits
;------------------------------------------------------------
c                     equ  0   ;-
gie                   equ  7   ;-
gp0                   equ  0   ;-
inte                  equ  4   ;-
intedg                equ  6   ;-
intf                  equ  1   ;-
ps0                   equ  0   ;-
ps1                   equ  1   ;-
ps2                   equ  2   ;-
psa                   equ  3   ;-
rp0                   equ  5   ;-
t0cs                  equ  5   ;-
t0ie                  equ  5   ;-
t0if                  equ  2   ;-
t0se                  equ  4   ;-
to                    equ  4   ;-
z                     equ  2   ;-
tiempo_t0             equ  0   ;bandera de temporizacion por tmr0
sub_inte              equ  0   ;bandera de subrrutina cancelada por interrupcion.


;------------------------------------------------------------
;               Declaración de Registros EEPROM
;------------------------------------------------------------


;------------------------------------------------------------
;                        Inicio
;------------------------------------------------------------

   org 0x00
   goto paso2
   org 0x04
   movwf _np_w
   swapf _np_w,1
   movf status,w
   bcf status,rp0                   ;cambiar a banco 0

   movwf _np_status
   bcf status,rp0                   ;cambiar a banco 0

   movf _np_tiempo,w
   movwf _np_t_bak
   movf _np_tiempo1,w
   movwf _np_t1_bak
   movf _np_tiempo2,w
   movwf _np_t2_bak
   movf _np_tiempo3,w
   movwf _np_t3_bak
int_1
   btfss intcon,inte
   goto int_2
   btfsc intcon,intf
   goto inte_gp2
int_2
   bcf status,rp0                   ;cambiar a banco 0

   btfss intcon,t0ie
   goto salir__intes
   btfsc intcon,t0if
   goto inte_t0
int_3
salir__intes

   bsf _np_banderas2,sub_inte       ;activar la bandera de rutina cancelada por interrupcion
   bcf status,rp0                   ;cambiar a banco 0

   movf _np_t_bak,w
   movwf _np_tiempo
   movf _np_t1_bak,w
   movwf _np_tiempo1
   movf _np_t2_bak,w
   movwf _np_tiempo2
   movf _np_t3_bak,w
   movwf _np_tiempo3
   movf _np_status,w
   movwf status
   swapf _np_w,w
   retfie


   ;------------------------------------------------------------
   ;                      inicio de la interrupción por gp2
   ;------------------------------------------------------------
inte_gp2_salir
   bcf status,rp0                   ;cambiar a banco 0

   bcf intcon,intf
   goto salir__intes
inte_gp2

   bcf status,rp0                   ;cambiar a banco 0

   clrf tmr0
   bsf status,rp0                   ;cambiar a banco 1
   bcf opcion,psa                   ;asignacion del preescalado al tmr0
   bcf opcion,t0cs                  ;origen de la señal de reloj de tmr0 = reloj interno
   bcf opcion,ps0                   ;configurar preescalado a 128
   bsf opcion,ps1
   bsf opcion,ps2
   movlw .131
   bcf status,rp0                   ;cambiar a banco 0
   movwf tmr0
   movwf _np_t0_ini
   clrf _np_t0_cint_h
   clrf _np_t0_cint1_h
   movlw b'01111101'
   movwf _np_t0_cint_l
   movwf _np_t0_cint1_l

   bsf intcon,gie                   ;activar habilitador general de interrupciones.
   bcf intcon,t0if                  ;limpiar la bandera antes de activarla
   bsf intcon,t0ie                  ;activar interrupción por tmr0.
inte_gp24
   goto inte_gp2_salir

   ;------------------------------------------------------------
   ;                      inicio de la interrupción por tmr0
   ;------------------------------------------------------------
inte_t0_salir
   bcf status,rp0                   ;cambiar a banco 0

   bcf intcon,t0if
   goto salir__intes
inte_t0
   bcf status,rp0                   ;cambiar a banco 0

   movf _np_t0_ini,w
   movwf tmr0
   bcf _np_timers,tiempo_t0
   decfsz _np_t0_cint_l,1
   goto inte_t02_no
   movf _np_t0_cint_h,w
   btfsc status,z
   goto inte_t02_si
   decf _np_t0_cint_h,1
   goto inte_t02_no
inte_t02_si
   bsf _np_timers,tiempo_t0
   movf _np_t0_cint1_l,w
   movwf _np_t0_cint_l
   movf _np_t0_cint1_h,w
   movwf _np_t0_cint_h
inte_t02_no
   btfss _np_timers,tiempo_t0       ;si el tiempo_t0 = 0
   goto inte_t0_salir
   bsf gpio,gp0
inte_t05
   goto inte_t0_salir

;------------------------------------------------------------
;                      programa principal
;------------------------------------------------------------
paso2
   clrf _np_w
   bcf status,rp0                   ;cambiar a banco 0

   clrf _np_status
   clrf _np_tiempo
   clrf _np_tiempo1
   clrf _np_tiempo2
   clrf _np_tiempo3
   clrf _np_t_bak
   clrf _np_t1_bak
   clrf _np_t2_bak
   clrf _np_t3_bak
   clrf _np_timers
   clrf _np_t0_ini
   clrf _np_t0_cint_l
   clrf _np_t0_cint_h
   clrf _np_t0_cint1_l
   clrf _np_t0_cint1_h
   clrf _np_w
   clrf _np_banderas2
   clrf gpio                        ;configurar el puerto a como xxsseess
   bsf status,rp0                   ;cambiar a banco 1
   clrf ansel
   movlw b'00000111'
   bcf status,rp0                   ;cambiar a banco 0
   movwf cmcon0
   clrf cmcon1
   movlw b'00001100'
   bsf status,rp0                   ;cambiar a banco 1
   movwf trisio
   bsf opcion,intedg                ;interrupción gp2. flanco_asc.

   bcf intcon,intf                  ;limpiar la bandera antes de activarla
   bsf intcon,inte                  ;activar interrupción por int.
   bsf intcon,gie                   ;activar habilitador general de interrupciones.
paso5
   nop
   nop
   goto paso5                       ;cierra el ciclo

;------------------------------------------------------------
;                  DATOS EN MEMORIA EEPROM
;------------------------------------------------------------
   org  0x2100
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff
   data   0xff

 End