Professional Documents
Culture Documents
REG_3 EQU 0x0E ;Direccin del registro REG_3 VALOR1 EQU 0x05 ;Valor que se asigna a VALOR1 VALOR2 EQU 0x05 ;Valor que se asigna a VALOR2 VALOR3 EQU 0x05 ;Valor que se asigna a VALOR3 AUX EQU 0x0F ;Direccin del registro AUX DIEZ EQU d'100' ;============================= Programa =============================== ORG 0 ;Vector de reset goto inicio ;Salto a inicio ORG 5 inicio call configura ;Llamada a la rutina config off movlw 0x00 ;w = 0x00 movwf AUX ;AUX = w, AUX = 0x00 movwf PORT_B ;PORT_B = 0x00 pulsa btfsc PORT_A,0 ;PORT_A<0> = 0? goto arranca ;Si, salto a arranca goto pulsa ;No, salto a pulsa arranca movlw b'10000000' ;Carga w con b'10000000' movwf PORT_B ;PORT_B = w call conteo ;Llamada a la rutina conteo movlw 0x00 ;w = 0x00 movwf PORT_B ;PORT_B = w, PORT_B = 0x00 call retar2 ;Llamada a la rutina retar2 call retar2 ;Llamada a la rutina retar2 call retar2 ;Llamada a la rutina retar2 movlw b'01000000' ;w = b'01000000' movwf PORT_B ;PORT_B = w, PORT_B = b'01000000' clrf AUX ;Borra el contenido de AUX call conteo ;Llamada a la rutina conteo movlw 0x00 ;w = 0x00 movwf PORT_B ;PORT_B = w, PORT_B = 0x00 sleep ;El PIC se duerme ;============================ Subrutinas ============================== configura bsf ESTADO,5 ;Se pone en 1 el bit 5 del reg. ESTADO movlw b'00011111' ;Carga w con el dato b'00011111' movwf PORT_A ;Configura el puerto A como entradas movlw b'00000000' ;Carga w con el dato b'00000000' movwf PORT_B ;Configura el puerto B como salidas bcf ESTADO,5 ;Se pone en 0 el bit 5 del reg. ESTADO return ;Retorno desde subrutina retardo movlw VALOR1 ;Carga w con el nmero 30 (VALOR1) movwf REG_1 ;Mueve w al registro REG_1 tres movlw VALOR2 ;Carga w con el nmero 40 (VALOR2) movwf REG_2 ;Mueve w al registro REG_2 dos movlw VALOR3 ;Carga w con el nmero 50 (VALOR3) movwf REG_3 ;Mueve w al registro REG_3 uno decfsz REG_3 ;Decrementa el valor de REG_3 en 1 goto uno ;Salto a uno decfsz REG_2 ;Decrementa el valor de REG_2 en 1 goto dos ;Salto a dos decfsz REG_1 ;Decrementa el valor de REG_1 en 1 goto tres ;Salto a tres return ;Retorno desde subrutina retar2 call retardo ;Llamada a la rutina retardo call retardo ;Llamada a la rutina retardo call retardo ;Llamada a la rutina retardo call retardo ;Llamada a la rutina retardo call retardo ;Llamada a la rutina retardo call retardo ;Llamada a la rutina retardo return ;Retorno desde subrutina conteo btfss PORT_A,4 ;El boton esta oprimido? goto conteo ;No (salto a boton) call retardo ;Si (Llamada a la rutina retardo) boton2 btfss PORT_A,4 ;El boton sigue oprimido? goto sigue ;No (salto a sigue) goto boton2 ;Si (salto a boton2) sigue incf AUX,1 ;Incrementa AUX (AUX = AUX + 1) movf AUX,w ;Mueve AUX a w
xorlw DIEZ ;Funcion Xor (es igual a 100?) btfsc ESTADO,2 ;AUX = DIEZ? (ESTADO<2> = 0) goto para ;Salto a borra (ESTADO<2> <> 0) goto conteo ;Salto a bucle (ESTADO<2> = 0) para return ;=============================== Fin ================================== End