;------------------------------------------------------------
; Código assembler generado por Niple V5.6.0
; Proyecto: electronico
; Autor: Pablo Fernandez
; Fecha: 15/08/2011
; PIC: 16F628A
; Velocidad de reloj: Int 4 Mhz
; Descripcion: 
;------------------------------------------------------------


 LIST    P=PIC16F628A


_INCRC_OSC_NOCLKOUT   equ  0x3FFC
_WDT_OFF              equ  0x3FFB
_PWRTE_ON             equ  0x3FF7
_MCLRE_ON             equ  0x3FFF
_BODEN_OFF            equ  0x3FBF
_LVP_OFF              equ  0x3F7F
_CPD_OFF              equ  0x3F7F
_CP_OFF               equ  0x3FFF

 __config _INCRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF


;------------------------------------------------------------
;                  Declaración de Registros
;------------------------------------------------------------
w                     equ  0x0000
status                equ  0x0003
porta                 equ  0x0005
portb                 equ  0x0006
pclath                equ  0x000a
cmcon                 equ  0x001f
_np_tiempo            equ  0x0024
_np_tiempo1           equ  0x0026
_np_tiempo2           equ  0x0027
_np_tiempo3           equ  0x0028
ciclos_p2             equ  0x0029
ciclos_vac            equ  0x002a
cant_acl              equ  0x002b
ciclos_acl            equ  0x002c
ciclos_p9             equ  0x002d
ciclos_p6             equ  0x002e
trisa                 equ  0x0085
trisb                 equ  0x0086


;------------------------------------------------------------
;                  Declaración de Bits
;------------------------------------------------------------
c                     equ  0   ;carry / borrow bit
rp0                   equ  5   ;registrer bank select bit
rp1                   equ  6   ;registrer bank select bit
z                     equ  2   ;bit cero
bd                    equ  7   ;bit 7 del puerto b
e1                    equ  5   ;bit 5 del puerto b
e2                    equ  6   ;bit 6 del puerto b
hc                    equ  3   ;bit 3 del puerto b
hc2                   equ  4   ;bit 4 del puerto b
hm                    equ  2   ;bit 2 delpuerto b
ip                    equ  0   ;bit 0 del puerto b
p                     equ  1   ;bit 1 del puerto a
p2                    equ  0   ;bit 0 del puerto a
sg                    equ  1   ;bit 1 del puerto b


;------------------------------------------------------------
;               Declaración de Registros EEPROM
;------------------------------------------------------------


;------------------------------------------------------------
;                        Inicio
;------------------------------------------------------------

   org 0x00
   goto paso2


;------------------------------------------------------------
;                      programa principal
;------------------------------------------------------------
paso2
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   clrf _np_tiempo
   clrf _np_tiempo1
   clrf _np_tiempo2
   clrf _np_tiempo3
   clrf ciclos_p2
   clrf ciclos_vac
   clrf cant_acl
   clrf ciclos_acl
   clrf ciclos_p9
   clrf ciclos_p6
   clrf porta
   movlw b'10011111'                ;configurar el puerto a como esxeeeee
   bsf status,rp0                   ;cambiar a banco 1
   movwf trisa
   movlw b'00000111'                ;puerto a = e/s digital
   bcf status,rp0                   ;cambiar a banco 0
   movwf cmcon
   clrf portb
   movlw b'00000001'                ;configurar el puerto b como ssssssse
   bsf status,rp0                   ;cambiar a banco 1
   movwf trisb
paso4
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   btfss portb,ip                   ;si el bit ip = 1
   goto paso5
paso5
   call rutusr_001                  ;llamada a rutina usr_ret
   btfss portb,ip                   ;si el bit ip = 1
   goto paso4                       ;cierra el ciclo
paso7
   btfss porta,p2                   ;si el bit p2 = 1
   goto paso8
paso8
   call rutusr_001                  ;llamada a rutina usr_ret
   btfss porta,p2                   ;si el bit p2 = 1
   goto paso7                       ;cierra el ciclo
   call rutusr_002                  ;llamada a rutina usr_ver_p
   clrf ciclos_p2
paso12
   bsf portb,hm                     ;habilita m
   bcf portb,sg                     ;g_der
   movlw .9                         ;temporizador 9 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bcf portb,hm
   movlw .5                         ;temporizador 5 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bsf portb,sg                     ;g_izq
   bsf portb,hm
   movlw .9                         ;temporizador 9 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bcf portb,hm
   bcf portb,sg
   movlw .5                         ;temporizador 5 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   movf ciclos_p2,w                 ;si el reg ciclos_p2 = d'107'
   xorlw d'107'
   btfss status,z
   goto paso30
   clrf ciclos_p2
   call rutusr_008                  ;llamada a rutina usr_p6
   call rutusr_007                  ;llamada a rutina usr_p9
   call rutusr_005                  ;llamada a rutina usr_acl
   call rutusr_004                  ;llamada a rutina usr_ce
   nop
   goto paso4                       ;cierra el ciclo
paso30
   incf ciclos_p2,1
   goto paso12                      ;cierra el ciclo


;------------------------------------------------------------
;                  Declaración de Subrutinas
;------------------------------------------------------------

; usr_ret
rutusr_001
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   movlw .10                        ;temporizador 100 mse
   call tmp_100_mc                  ;llamada a rutina tmp_100_mc
rutusr_001_3
   goto rutusr_001_salir
rutusr_001_salir
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   return


; usr_ver_p
rutusr_002
rutusr_002_2
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   btfss porta,p                    ;si el bit p = 1
   goto rutusr_002_5
   bcf portb,e1
rutusr_002_4
   goto rutusr_002_salir
rutusr_002_5
   bsf portb,e1
   goto rutusr_002_2                ;cierra el ciclo
rutusr_002_salir
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   return


; usr_p6
rutusr_008
   call rutusr_002                  ;llamada a rutina usr_ver_p
   clrf ciclos_p6
rutusr_008_4
   bsf portb,hm                     ;habilita m
   bcf portb,sg                     ;g_der
   movlw .9                         ;temporizador 9 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bcf portb,hm
   movlw .5                         ;temporizador 5 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bsf portb,sg                     ;g_izq
   bsf portb,hm
   movlw .9                         ;temporizador 9 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bcf portb,hm
   bcf portb,sg
   movlw .5                         ;temporizador 5 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   movf ciclos_p6,w                 ;si el reg ciclos_p6 = d'98'
   xorlw d'98'
   btfss status,z
   goto rutusr_008_18
   clrf ciclos_p6
rutusr_008_17
   goto rutusr_008_salir
rutusr_008_18
   incf ciclos_p6,1
   goto rutusr_008_4                ;cierra el ciclo
rutusr_008_salir
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   return


; usr_p9
rutusr_007
   call rutusr_002                  ;llamada a rutina usr_ver_p
   clrf ciclos_p9
rutusr_007_4
   bsf portb,hm                     ;habilita m
   bcf portb,sg                     ;g_der
   movlw .9                         ;temporizador 9 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bcf portb,hm
   movlw .5                         ;temporizador 5 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bsf portb,sg                     ;g_izq
   bsf portb,hm
   movlw .9                         ;temporizador 9 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bcf portb,hm
   bcf portb,sg
   movlw .5                         ;temporizador 5 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   movf ciclos_p9,w                 ;si el reg ciclos_p9 = d'32'
   xorlw d'32'
   btfss status,z
   goto rutusr_007_19
   clrf ciclos_p9
   call rutusr_003                  ;llamada a rutina usr_vac
rutusr_007_18
   goto rutusr_007_salir
rutusr_007_19
   incf ciclos_p9,1
   goto rutusr_007_4                ;cierra el ciclo
rutusr_007_salir
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   return


; usr_acl
rutusr_005
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   clrf cant_acl
rutusr_005_3
   call rutusr_002                  ;llamada a rutina usr_ver_p
   clrf ciclos_acl
rutusr_005_5
   bsf portb,hm                     ;habilita m
   bcf portb,sg                     ;g_der
   movlw .9                         ;temporizador 9 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bcf portb,hm
   movlw .5                         ;temporizador 5 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bsf portb,sg                     ;g_izq
   bsf portb,hm
   movlw .9                         ;temporizador 9 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bcf portb,hm
   bcf portb,sg
   movlw .5                         ;temporizador 5 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   movf ciclos_acl,w                ;si el reg ciclos_acl = d'6'
   xorlw d'6'
   btfss status,z
   goto rutusr_005_35
   call rutusr_003                  ;llamada a rutina usr_vac
   clrf ciclos_acl
   incf cant_acl,1
   movf cant_acl,w                  ;si el reg cant_acl = d'3'
   xorlw d'3'
   btfss status,z
   goto rutusr_005_3                ;cierra el ciclo
   call rutusr_006                  ;llamada a rutina usr_ps
   bsf portb,hm                     ;habilita m
   bcf portb,sg                     ;g_der
   movlw .9                         ;temporizador 9 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bcf portb,hm
   movlw .5                         ;temporizador 5 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bsf portb,sg                     ;g_izq
   bsf portb,hm
   movlw .9                         ;temporizador 9 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bcf portb,hm
   bcf portb,sg
   movlw .5                         ;temporizador 5 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   call rutusr_003                  ;llamada a rutina usr_vac
rutusr_005_34
   goto rutusr_005_salir
rutusr_005_35
   incf ciclos_acl,1
   goto rutusr_005_5                ;cierra el ciclo
rutusr_005_salir
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   return


; usr_ce
rutusr_004
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   bsf portb,bd
   bsf portb,hm
   bcf portb,sg
   bsf portb,hc
   movlw .150                       ;temporizador 150 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bsf portb,hc2
   bcf portb,hc
   movlw .150                       ;temporizador 150 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bcf portb,hm
   bcf portb,hc2
   bcf portb,hc
   bcf portb,bd
rutusr_004_14
   goto rutusr_004_salir
rutusr_004_salir
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   return


; usr_vac
rutusr_003
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   bsf portb,bd
   clrf ciclos_vac
rutusr_003_4
   bsf portb,hm                     ;habilita m
   bcf portb,sg                     ;g_der
   movlw .9                         ;temporizador 9 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bcf portb,hm
   movlw .5                         ;temporizador 5 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bsf portb,sg                     ;g_izq
   bsf portb,hm
   movlw .9                         ;temporizador 9 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   bcf portb,hm
   bcf portb,sg
   movlw .5                         ;temporizador 5 seg
   call tmp_1_mgc                   ;llamada a rutina tmp_1_mgc
   movf ciclos_vac,w                ;si el reg ciclos_vac = d'6'
   xorlw d'6'
   btfss status,z
   goto rutusr_003_18
   clrf ciclos_vac
rutusr_003_17
   goto rutusr_003_salir
rutusr_003_18
   incf ciclos_vac,1
   goto rutusr_003_4                ;cierra el ciclo
rutusr_003_salir
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   return


; usr_ps
rutusr_006
rutusr_006_2
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   btfss porta,p                    ;si el bit p = 1
   goto rutusr_006_5
   bcf portb,e2
rutusr_006_4
   goto rutusr_006_salir
rutusr_006_5
   bsf portb,e2
   goto rutusr_006_2                ;cierra el ciclo
rutusr_006_salir
   bcf status,rp0                   ;cambiar a banco 0
   bcf status,rp1
   return


tmp_1_mgc
   movwf _np_tiempo
   goto tmp_1_mgc_1
tmp_1_mgc_bucle2
   nop
   nop
   nop
   nop
   nop
   nop
   nop
tmp_1_mgc_1
   movlw .10
   movwf _np_tiempo1
tmp_1_mgc_bucle1
   nop
   nop
   movlw .99
   movwf _np_tiempo2
tmp_1_mgc_bucle0
   nop
   nop
   nop
   movlw .200
   movwf _np_tiempo3
tmp_1_mgc_bucle
   nop
   nop
   decfsz _np_tiempo3,1
   goto tmp_1_mgc_bucle
   nop
   nop
   nop
   decfsz _np_tiempo2,1
   goto tmp_1_mgc_bucle0
   nop
   nop
   nop
   decfsz _np_tiempo1,1
   goto tmp_1_mgc_bucle1
   decfsz _np_tiempo,1
   goto tmp_1_mgc_bucle2
   return


tmp_100_mc
   movwf _np_tiempo
   goto tmp_100_mc_1
tmp_100_mc_bucle2
   nop
   nop
   nop
   nop
   nop
   nop
   nop
tmp_100_mc_1
   movlw .22
   movwf _np_tiempo1
tmp_100_mc_bucle1
   movlw .150
   movwf _np_tiempo2
tmp_100_mc_bucle
   decfsz _np_tiempo2,1
   goto tmp_100_mc_bucle
   decfsz _np_tiempo1,1
   goto tmp_100_mc_bucle1
   nop
   decfsz _np_tiempo,1
   goto tmp_100_mc_bucle2
   return



;------------------------------------------------------------
;                  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

 End