Você está na página 1de 4

;PROGRAMA PARA PIC16F84A LENGUAJE ENSAMBLER, EL CUAL MANTIENE UNA SECUENCIA

;DE ENCENDIDO DE LEDS(3 LEDS) CON RETARDO DE UN SEGUNDO


;PERO TAMBIEN CONSTA DE UNA INTERRUPCION, LA CUAL ES ACCIONADA
;CUANDO LE LLEGA UN 0 A RB0, ESTA INTERRUPCION HACE QUE OTRO
;LED INDEPENDIENTE ENCIENDA UNA CANTIDAD DE VECES DETERMINA
;ESTA CANTIDAD ESTA EN FUNCION DE LAS VECES QUE HAYA SIDO
;DESCONECTADO EL CIRCUITO, ESTO SE LOGRA HACER, LEYENDO Y
;ESCRIBIENDO DATOS EN LA MEMORIA EEPROM.
;DECLARACION DE LIBRERIAS
;-----------------------------------------------------------------#include "p16f84A.inc"
LIST p=16f84A
org 0
__config _WDT_OFF & _CP_OFF & _HS_OSC & _PWRTE_ON
goto inicio
org 0x04
goto interrupcion
;CONFIGURACION DE PUERTOS
;---------------------------------------------------inicio
bsf STATUS,5
;CAMBIAMOS AL BANCO 1
movlw b'10010000'
movwf 0x0B
;INDICAMOS QUE REGISTRO SE USARA PARA LA INTERRUPCION
movlw b'00000000'
movwf 0x81
;INDICAMOS SI LA INTERRUPCION SERA CON TRANSICION
;NEGATIVA O POSITIVA.
movlw b'00000001'
movwf TRISB
;RB0 COMO ENTRADA Y TODOS LOS DEMAS REGISTROS COMO SALIDAS
movlw b'0000'
movwf TRISA
;TODOS LOS REGISTROS DE A SERAN SALIDA
bcf STATUS,5
;CAMBIAMOS AL BANCO 0
clrf PORTB
;LIMPIAMOS PORTB
clrf PORTA
;LIMPIAMOS PORTA
;LECTURA EEPROM
;---------------------------------------------------MOVLW 0X00
MOVWF EEADR ;INDICAMOS QUE BIT SE VA A LEER
BSF STATUS,5 ;CAMBIAMOS AL BANCO 1
BSF EECON1,RD ;HABILITAMOS EECON1 PARA QUE PODAMOS LEER UN DATO DE EEDATA
BCF STATUS,5 ;CAMBIAMOS AL BANCO 0
MOVF EEDATA,0 ;MOVEMOS A W EL VALOR DE EEDATA
movwf 0xA0 ;EL REGISTRO 0XA0 GUARDA EL VALOR DE EEDATA
;---------------------------------------------------;ESCRITURA DE EEPROM
;---------------------------------------------------MOVLW 0X00
MOVWF EEADR ;INDICAMOS EN QUE BIT SE VA A ESCRIBIR
INCF 0xA0,1 ;INCREMENTAMOS 0XA0 PARA EVITAR QUE ESTE TENGA VALOR MAXIMO
ADDWF 0xA0,0 ;SUMAMOS EL VALOR DE EEADR CON AXA0
MOVWF EEDATA ;SE INDICA QUE LA SUMA ANTERIOR SE GUARDARA EN EEDATA
BSF STATUS,5 ;CAMBIAMOS AL BANCO 1
BSF EECON1,WREN;SE HABILITA EECON1 PARA QUE PODAMOS ESCRIBIR
BCF INTCON,7 ;DESACTIVAMOS INTERRUPCIONES PARA QUE NO HAYA ERRORES
MOVLW 0X55
MOVWF EECON2 ;MOVEMOS EL VALOR 0X55 A EECON2

MOVLW 0XAA
MOVWF EECON2 ;MOVEMOS EL VALOR 0XAA A EECON2
BSF EECON1,WR ;AQUI COMIENZA LA ESCRITURA
BSF INTCON,7 ;HABILITAMOS LAS INTERRUPCIONES
BCF EECON1,WREN;SE DESABILITA EL PERMISO DE ESCRITURA
BCF STATUS,5 ;CAMBIAMOS AL BANCO 0
;----------------------------------------------------goto start
;-----------------------------------------------------------------;SECCION DE RUTINAS
;TABLA QUE MANDA EL VALOR PARA VER QUE LED ES EL QUE SIGUE
;-----------------------------------------------------------------MD1
addwf PCL,1
retlw b'00000010'
retlw b'00000100'
retlw b'00001000'
;------------------------------------------------------------------;CICLO DE RETARDO DE UN SEGUNDO
;------------------------------------------------------------------C1
movlw 0xFF
movwf 0x0C
movlw 0xFF
movwf 0x0D
movlw 0x05
movwf 0x0F
RET
decfsz 0x0C
goto RET
movlw 0xFF
movwf 0x0C
decfsz 0x0D
goto RET
movlw 0xFF
movwf 0x0D
decfsz 0x0F
goto RET
return
;--------------------------------------------------------------------;INTERRUPCION DONDE PRENDE EL LED INDEPENDIENTE
;--------------------------------------------------------------------interrupcion
goto PRIN
;RETARDO DE UN SEGUNDO
;---------------------------------------------------------------------RET2
movlw 0xFF
movwf 0x11
movlw 0xFF
movwf 0x12
movlw 0x05
movwf 0x13
RET3
decfsz 0x11

goto RET3
movlw 0xFF
movwf 0x11
decfsz 0x12
goto RET3
movlw 0xFF
movwf 0x12
decfsz 0x13
goto RET3
return
;-----------------------------------------------------------------------PRIN
movwf 0x08
swapf STATUS,0
movwf 0x0E
movf 0xA0,0
movwf 0xB0
btfsc 0xB0,0
goto C2
btfsc 0xB0,1
goto C2
btfsc 0xB0,2
goto C2
btfss 0xB0,3
goto CF
C2
movlw 0x01
movwf PORTA
call RET2
movlw 0x00
movwf PORTA
call RET2
decfsz 0xB0,1
goto C2
CF
clrf PORTA
bcf 0x0B,1
swapf 0x0E,0
movwf STATUS
swapf 0x08,1
swapf 0x08,0
retfie
;--------------------------------------------------------start
clrw
clrf 0x10
MAIN call MD1
movwf PORTB
call C1
incf 0x10,0
movwf 0x10
btfss 0x10,0
goto MAIN
btfss 0x10,1
goto MAIN

goto start
END

Você também pode gostar