;------------------------------------------------------------
; Código assembler generado por Niple V5.2.3
; Proyecto: ligaled
; Autor: Fidel Martis
; Fecha: 24/10/2008
; PIC: 12F675
; Velocidad de reloj: Int 4 Mhz
; Descripcion: ligar e desligar o led pulsado usando a interrupção externa. so para teste
;------------------------------------------------------------


 LIST    P=PIC12F675


_INTRC_OSC_NOCLKOUT   equ  0x3FFC
_WDT_OFF              equ  0x3FF7
_PWRTE_ON             equ  0x3FEF
_MCLRE_OFF            equ  0x3FDF
_BODEN_OFF            equ  0x3FBF
_CPD_OFF              equ  0x3FFF
_CP_OFF               equ  0x3FFF

 __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF & _CPD_OFF & _CP_OFF


;------------------------------------------------------------
;                  Declaración de Registros
;------------------------------------------------------------
w                     equ  0x0000
status                equ  0x0003
gpio                  equ  0x0005
pclath                equ  0x000a
intcon                equ  0x000b
cmcon                 equ  0x0019
adcon0                equ  0x001f
_np_w                 equ  0x0020
mled                  equ  0x0021
_np_status            equ  0x0022
_np_tiempo_inte       equ  0x0024
_np_tiempo1_inte      equ  0x0026
_np_tiempo2_inte      equ  0x0027
_np_banderas2         equ  0x0028
opcion                equ  0x0081
trisio                equ  0x0085
ansel                 equ  0x009f


;------------------------------------------------------------
;                  Declaración de Bits
;------------------------------------------------------------
c                     equ  0   ;carry / borrow bit
gie                   equ  7   ;habilitador general de interrupciones
gp0                   equ  0   ;bit 0 del puerto
inte                  equ  4   ;habilitador de interrupción por gp2
intedg                equ  6   ;interrupt edge select bit
intf                  equ  1   ;ra3 / int interrupt flag bit
rp0                   equ  5   ;registrer bank select bit
rp1                   equ  6   ;registrer bank select bit
z                     equ  2   ;bit cero
sub_inte              equ  0   ;bandera de subrrutina cancelada por interrupcion.


;------------------------------------------------------------
;                        Inicio
;------------------------------------------------------------

reset   org 0
   goto paso2
   org 4
   movwf _np_w
   swapf _np_w,1
   movf status,w
   bcf status,rp0                   ;cambiar a banco 0
   movwf _np_status
   btfsc intcon,intf
   goto interrupción_gp2
salir_interrupcion
   bcf status,rp0                   ;cambiar a banco 0
   bsf _np_banderas2,sub_inte       ;activar la bandera de rutina cancelada por interrupcion
   movf _np_status,w 
   movwf status
   swapf _np_w,w 
   retfie


;------------------------------------------------------------
;                      inicio de la interrupción por gp2
;------------------------------------------------------------
interrupción_gp2_salir
   bcf intcon,intf
   goto salir_interrupcion
interrupción_gp2
   bcf status,rp0                   ;cambiar a banco 0
   movf mled,w                      ;si el reg mled = d'1'
   xorlw d'1'
   btfss status,z
   goto inte_gp2_10
   bsf status,rp0                   ;cambiar a banco 1
   bcf opcion,intedg                ;interrupción gp2. flanco_desc.
   bsf intcon,gie                   ;activar habilitador general de interrupciones.
   bsf intcon,inte                  ;activar interrupción por int.
   movlw d'2'                       ;escreve 2 na memoria para futuro
   bcf status,rp0                   ;cambiar a banco 0
   movwf mled
inte_gp2_6
   bsf gpio,gp0                     ;liga led
   movlw .5                         ;temporizador 5 mse
   call tmp_1_mc_i
   bcf gpio,gp0                     ;desliga led
   movlw .5                         ;temporizador 5 mse
   call tmp_1_mc_i
   goto inte_gp2_6                  ;cierra el ciclo
inte_gp2_10
   movf mled,w                      ;si el reg mled = d'2'
   xorlw d'2'
   btfss status,z
   goto interrupción_gp2_salir
   bsf status,rp0                   ;cambiar a banco 1
   bcf opcion,intedg                ;interrupción gp2. flanco_desc.
   bsf intcon,gie                   ;activar habilitador general de interrupciones.
   bsf intcon,inte                  ;activar interrupción por int.
   movlw d'1'                       ;volta escrever 1 na menoria para futuro
   bcf status,rp0                   ;cambiar a banco 0
   movwf mled
   bcf gpio,gp0                     ;desliga led
   goto interrupción_gp2_salir

;------------------------------------------------------------
;                      programa principal
;------------------------------------------------------------
paso2
   bcf status,rp0                   ;cambiar a banco 0
   clrf gpio                        ;configurar el puerto a como xxsseess
   movlw b'00000111'
   movwf cmcon
   bsf status,rp0                   ;cambiar a banco 1
   clrf ansel
   movlw b'00001100'
   movwf trisio
   bcf opcion,intedg                ;interrupción gp2. flanco_desc.
   bsf intcon,gie                   ;activar habilitador general de interrupciones.
   bsf intcon,inte                  ;activar interrupción por int.
   movlw d'1'                       ;memoriza 1 para futuro
   bcf status,rp0                   ;cambiar a banco 0
   movwf mled
paso6
   nop
   nop
   nop
   nop
   goto paso6                       ;cierra el ciclo


;------------------------------------------------------------
;                  Declaración de Subrutinas
;------------------------------------------------------------

tmp_1_mc_i
   movwf _np_tiempo_inte
   goto tmp_1_mc_i_1
tmp_1_mc_i_bucle1
   nop
   nop
   nop
   nop
   nop
   nop
   nop
tmp_1_mc_i_1
   movlw .246
   movwf _np_tiempo1_inte
tmp_1_mc_i_bucle2
   nop
   decfsz _np_tiempo1_inte,1
   goto tmp_1_mc_i_bucle2
   nop
   nop
   nop
   nop
   nop
   decfsz _np_tiempo_inte,1
   goto tmp_1_mc_i_bucle1
   return


 End