Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ESCRI_MEM_F877
MOVF DIR_EEPROM,w ; Registro auxiliar para la direccion de EEPROM
MOVWF DATA_EE_ADDR ;
BCF PIR2, EEIF ; Baja la bandera de interrupción
BSF STATUS, RP0 ; Banco 1
BSF PIE2, EEIE ; Habilita la interrupción por EEPROM
BCF STATUS, RP0 ; regresa al Banco 0
BCF INTCON,PEIE ; DESActiva interrupciones de
perifericos
BCF INTCON,GIE ; DESActiva interrupciones
MOVF DATO_ESCRI,W ; Registro auxiliar DATO a ESCRIBIR
MOVWF DATA_EE_DATA
CALL ESCRITURA_EEPROM
BSF STATUS,RP0 ; Banco1
BCF PIE2,EEIE ; Habiliar Interrupción por EEPROM
BCF STATUS,RP0 ; Banco0
RETURN
EEPROM_16F877_CAPC_SI.LIB
ESCRITURA_EEPROM
BSF STATUS,RP1 ;
BCF STATUS,RP0 ; Banco 2
MOVF DATA_EE_ADDR,W ;
MOVWF EEADR ; Direccion de memoria de datos a escribir
MOVF DATA_EE_DATA,W ;
MOVWF EEDATA ; Valor de memoria de datos a escribir
BSF STATUS, RP0 ; Banco 3
BCF EECON1, EEPGD ; Selecciona memoria EEPROM
BSF EECON1, WREN ; Activa permiso de escritura
MOVLW 0x55 ; SECUENCIA REQUERIDA POR EL FABRICANTE
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1, WR ; Activa el bit WR para comenzar a escribir
EEPROM_16F877_CAPC_SI.LIB
ESPERA_ESCRITURA_EEPROM
BCF STATUS, RP1 ;
BCF STATUS, RP0 ; Banco 0
BTFSS PIR2,EEIF ; Espera hasta que termine de escribir
GOTO ESPERA_ESCRITURA_EEPROM
BCF PIR2,EEIF ;Borra la bandera de la EEPROM
BSF STATUS, RP0 ; Banco 3
BCF EECON1, WREN ; INActivar permiso de escritura
BCF STATUS, RP0 ; Banco 0
RETURN
EEPROM_16F877_CAPC_SI.LIB
LEER_MEM_F877
MOVF DIR_EEPROM,w ; Registro auxiliar para la direccion de
EEPROM
MOVWF DATA_EE_ADDR ;
BSF STATUS, RP1 ;
BCF STATUS, RP0 ; Banco 2
MOVF DATA_EE_ADDR,W ;
MOVWF EEADR ; Direccion de memoria de datos a leer
BSF STATUS, RP0 ; Banco 3
BCF EECON1, EEPGD ; Selecciona memoria EEPROM
BSF EECON1, RD ; Lee EEPROM
BCF STATUS, RP0 ; Banco 2
MOVF EEDATA, W ; W = EEDATA
BCF STATUS, RP1 ;
BCF STATUS, RP0 ; Banco 0
MOVWF DATO_LEIDO ; Mover a Registro Auxiliar
RETURN
PROGRAMA SIN USAR INTERRUPCION
; AUTOR: CÉSAR AUGUSTO PEÑA C
; PIC: 16F877A
; FUNCION: MANEJO DE LCD Y GRABACIÓN Y ESCRITURA DE LA MEMORIA EEPROM
; EL PIC ES CAPAZ DE DETECTAR LA PRIMERA VEZ QUE SE PRENDE MANEJANDO LA VARIABLE
; 0x0F, UNA VEZ PRENDIDO ALMACENA EN UNA SEGUNDA VARIABLE EL NÚMERO DE VECES QUE
; SE PRENDE EL PIC Y MUESTRA ESTE NÚMEREO EN EL LCD.
; SI SE APAGA EL PIC POR OCTAVA VEZ ESTE VUELVE A MOSTRAR EL NUMERO 1 EN EL LCD
; CARACTERISTICAS:
; OSCILLATOR: XT
; WATCHDOG TIMER: OFF
; POWER UP TIMER: ON
; BROWN OUT DETECT: OFF
; LOW VOLTAGE PROGRAM: DISABLE
; FLASH PROGRAM WRITE: WRITE PROTECTION OFF
; BACKGROUND DEBUG: DISABLED
; DATA EE READ PROTECT: OFF
; CODE PROTECT: OFF
;****************************************************************************************
ORG 0
goto INICIO
PROGRAMA SIN USAR INTERRUPCION
ORG 5
INICIO bcf STATUS,RP1
bsf STATUS,RP0
; movlw b'00000110' ;configura puerto A y E como E/S digitales
; movwf ADCON1 ;9f ;MUEVE A ADCON1
bcf 1,7 ;Resistencias pull up ACTIVAS
bcf TRISE,PSPMODE ;Desactiva puerto paralelo esclavo
;Afecta puerta D también
movlw b'00000010'
movwf TRISD ;puerto D como salida y el RD1 para RF
movlw b'00000011' ;Configura puerto C para verificar sensores
movwf TRISC
clrf TRISE ;puerto E como salida
bcf STATUS,RP0 ;Banco 0
bcf STATUS,RP1
clrf DATO_LEIDO
movlw 0x0F ;especifica direccion para leer
movwf DIR_EEPROM
call LEER_MEM_F877 ;lee memoria EEPROM de la direccion especificada
movf DATO_LEIDO,W ;Carga W con el ultimo dato leido
sublw 'A' ;Compara
btfsc STATUS,2 ;Si es diferente salta
goto SEGUNDA_O_MAS
goto PRIMERA
movf DATO_LEIDO,0
xorlw '8'
btfsc STATUS,2 ;SI Z = 0 BRINCA
goto PRIMERA ;Z=1 Y LLAMA
movf DATO_LEIDO,0
movwf DATO_ESCRI ;carga el nuevo valor para grabar
movlw 0x10 ;especifica direccion para leer
movwf DIR_EEPROM
call ESCRI_MEM_F877 ;Escribe memoria EEPROM segun la direccion y el dato especificado
goto CICLO
PROGRAMA SIN USAR INTERRUPCION
MENSAJE_VEZ
;__________________________________________________________
call UP_LCD ;RECONFIGURA DENUEVO EL DISPLAY PARA USARLO OTRA VEZ
clrf DATO_LEIDO
movlw 0x10 ;especifica direccion para leer
movwf DIR_EEPROM
call LEER_MEM_F877 ;lee memoria EEPROM de la direccion especificada
movf DATO_LEIDO,W ;Carga W con el ultimo dato leido
include "LCD_LIB_CAPC_877_F.lib"
include "EEPROM_16F877_CAPC_SI.lib"
include "REGISTROS_BK.lib"
END
EEPROM_16F877_CAPC_CI.LIB
;------------------------------------------------------------------------
;LIBRERIAS DE RUTINAS CREADAS O MODIFICADAS POR CÉSAR PEÑA
;TEMA: Escritura y Lectura de EEPROM Utilizando INTERRUPCION por EEPROM
;NOTA: No olvidar declarar las variables:
; DATO_ESCRI, DIR_EEPROM, DATO_LEIDO ;VARIABLES PARA LA
EEPROM
;NOTA2: No olvidar crear la rutina de interrupcion en el programa
;INT_ESCR_MEN_F
; BCF STATUS, RP1 ;
; BCF STATUS, RP0 ; Banco 0
; BTFSS PIR2,EEIF
; goto SALIR_INT
; BCF PIR2,EEIF ;Borra la bandera de la EEPROM
;
;SALIR_INT RETFIE
;------------------------------------------------------------------------
EEPROM_16F877_CAPC_CI.LIB
ESCRI_MEM_F877
MOVF DIR_EEPROM,w ; Registro auxiliar para la direccion de EEPROM
MOVWF DATA_EE_ADDR ;
BCF PIR2, EEIF ; Baja la bandera de interrupción
BSF STATUS, RP0 ; Banco 1
BSF PIE2, EEIE ; Habilita la interrupción por EEPROM
BCF STATUS, RP0 ; regresa al Banco 0
BSF INTCON,PEIE ; Activa interrupciones de perifericos
BSF INTCON,GIE ; Activa interrupciones
MOVF DATO_ESCRI,W ; Registro auxiliar DATO a ESCRIBIR
MOVWF DATA_EE_DATA
CALL ESCRITURA_EEPROM
BSF STATUS,RP0 ; Banco1
BCF PIE2,EEIE ; Habiliar Interrupción por EEPROM
BCF STATUS,RP0 ; Banco0
BCF INTCON,PEIE ; Desactiva interrupciones de perifericos
BCF INTCON,GIE ; Desactiva interrupciones
RETURN
EEPROM_16F877_CAPC_CI.LIB
ESCRITURA_EEPROM
BSF STATUS,RP1 ;
BCF STATUS,RP0 ; Banco 2
MOVF DATA_EE_ADDR,W ;
MOVWF EEADR ; Direccion de memoria de datos a escribir
MOVF DATA_EE_DATA,W ;
MOVWF EEDATA ; Valor de memoria de datos a escribir
BSF STATUS, RP0 ; Banco 3
BCF EECON1, EEPGD ; Selecciona memoria EEPROM
BSF EECON1, WREN ; Activa permiso de escritura
MOVLW 0x55 ; SECUENCIA REQUERIDA POR EL FABRICANTE
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1, WR ; Activa el bit WR para comenzar a escribir
sleep ; debe dormirlo estando en el banco 3
BSF STATUS, RP0 ; Banco 3
BCF EECON1, WREN ; INActivar permiso de escritura
BCF STATUS, RP0 ; Banco 0
RETURN
EEPROM_16F877_CAPC_CI.LIB
LEER_MEM_F877
MOVF DIR_EEPROM,w ; Registro auxiliar para la direccion de EEPROM
MOVWF DATA_EE_ADDR ;
BSF STATUS, RP1 ;
BCF STATUS, RP0 ; Banco 2
MOVF DATA_EE_ADDR,W ;
MOVWF EEADR ; Direccion de memoria de datos a leer
BSF STATUS, RP0 ; Banco 3
BCF EECON1, EEPGD ; Selecciona memoria EEPROM
BSF EECON1, RD ; Lee EEPROM
BCF STATUS, RP0 ; Banco 2
MOVF EEDATA, W ; W = EEDATA
BCF STATUS, RP1 ;
BCF STATUS, RP0 ; Banco 0
MOVWF DATO_LEIDO ; Mover a Registro Auxiliar
RETURN
PROGRAMA USANDO INTERRUPCION
; AUTOR: CÉSAR AUGUSTO PEÑA C
; PIC: 16F877A
; FUNCION: MANEJO DE LCD Y GRABACIÓN Y ESCRITURA DE LA MEMORIA EEPROM
; EL PIC ES CAPAZ DE DETECTAR LA PRIMERA VEZ QUE SE PRENDE MANEJANDO LA VARIABLE
; 0x0F, UNA VEZ PRENDIDO ALMACENA EN UNA SEGUNDA VARIABLE EL NÚMERO DE VECES QUE
; SE PRENDE EL PIC Y MUESTRA ESTE NÚMEREO EN EL LCD.
; SI SE APAGA EL PIC POR OCTAVA VEZ ESTE VUELVE A MOSTRAR EL NUMERO 1 EN EL LCD
; CARACTERISTICAS:
; OSCILLATOR: XT
; WATCHDOG TIMER: OFF
; POWER UP TIMER: ON
; BROWN OUT DETECT: OFF
; LOW VOLTAGE PROGRAM: DISABLE
; FLASH PROGRAM WRITE: WRITE PROTECTION OFF
; BACKGROUND DEBUG: DISABLED
; DATA EE READ PROTECT: OFF
; CODE PROTECT: OFF
SEGUNDA_O_MAS
clrf DATO_LEIDO
movlw 0x10 ;especifica direccion para leer
movwf DIR_EEPROM
call LEER_MEM_F877 ;lee memoria EEPROM de la direccion especificada
incf DATO_LEIDO,1 ;Incrementa el dato leido
movf DATO_LEIDO,0
xorlw '8'
btfsc STATUS,2 ;SI Z = 0 BRINCA
goto PRIMERA ;Z=1 Y LLAMA
movf DATO_LEIDO,0
movwf DATO_ESCRI ;carga el nuevo valor para grabar
movlw 0x10 ;especifica direccion para leer
movwf DIR_EEPROM
call ESCRI_MEM_F877 ;Escribe memoria EEPROM segun la direccion y el dato especificado
goto CICLO
PROGRAMA USANDO INTERRUPCION
MENSAJE_VEZ
;__________________________________________________________
clrf DATO_LEIDO
movlw 0x10 ;especifica direccion para leer
movwf DIR_EEPROM
call LEER_MEM_F877 ;lee memoria EEPROM de la direccion especificada
movf DATO_LEIDO,W ;Carga W con el ultimo dato leido
include "LCD_LIB_CAPC_877_F.lib"
include "EEPROM_16F877_CAPC_CI.lib"
include "REGISTROS_BK.lib"
END
EJEMPLO GRABADO Y
BORRADO DE EEPROM
REGISTROS_BK.LIB
;AUTOR: CÉSAR AUGUSTO PEÑA C
;PIC: 16F877A
;FUNCION: Libreria que guarda el estado de algunos registros y los restaura
;si es necesario
GUARDAR_REGISTROS
movf STATUS,w
bcf STATUS, RP1
bcf STATUS, RP0
movwf STATUS_BK
movf PIR1,w
movwf PIR1_BK
movf PIR2,w
movwf PIR2_BK
RETURN
CARGAR_REGISTROS
movf TRISA_BK,w
bsf STATUS, RP0
movwf TRISA
bcf STATUS, RP0
REGISTROS_BK.LIB
movf TRISB_BK,w
bsf STATUS, RP0
movwf TRISB
bcf STATUS, RP0
movf TRISC_BK,w
bsf STATUS, RP0
movwf TRISC
bcf STATUS, RP0
movf TRISD_BK,w
bsf STATUS, RP0
movwf TRISD
bcf STATUS, RP0
movf TRISE_BK,w
bsf STATUS, RP0
movwf TRISE
bcf STATUS, RP0
movf PIE1_BK,w
bsf STATUS, RP0
movwf PIE1
bcf STATUS, RP0
REGISTROS_BK.LIB
movf PIE2_BK,w
bsf STATUS, RP0
movwf PIE2
bcf STATUS, RP0
movf INTCON_BK,w
movwf INTCON
movf PIR1_BK,w
movwf PIR1
movf PIR2_BK,w
movwf PIR2
RETURN
PROGRAMA DE VARIAS PAGINAS
En el PIC16F877 se pueden escribir hasta aproximadamente 8000
líneas de programa (4 Paginas), sin embargo las instrucciones GOTO y
CALL solo pueden direccionar hasta 2000 (1 Pagina).
BCF PCLATH,4
BSF PCLATH,3 ;Selecciona pagina 1 PAGINA PCLATH,3 PCLATH,4º
call Subrutina
0 0 0
BCF PCLATH,3 ;Selecciona pagina 1
1 1 0
2 0 1
3 1 1
PROGRAMA DE VARIAS PAGINAS
;AUTOR: CÉSAR AUGUSTO PEÑA C
;PIC: 16F877A
;FUNCION:Visualiza un mesaje por un LCD conectado a RB<0:7> (datos) y RBD<5:7>
; donde RS, R/W y #E (LCD) se conectan respectivamente a RD5, RD6 y RD7
;utiliza la 2 página para alojar la parte de visualización de mensajes
;CARACTERISTICAS:
;OSCILLATOR: XT
;WATCHDOG TIMER: OFF
;POWER UP TIMER: ON
;BROWN OUT DETECT: OFF
;LOW VOLTAGE PROGRAM: DISABLE
;FLASH PROGRAM WRITE: WRITE PROTECTION OFF
;BACKGROUND DEBUG: DISABLED
;DATA EE READ PROTECT: OFF
;CODE PROTECT: OFF
CICLO nop
goto CICLO
;P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P
ORG d'2100' ;Pagina 2
MENSAJE_CESAR_UNIPAMPLONA
call UP_LCD_2P ;RECONFIGURA DENUEVO EL DISPLAY PARA USARLO OTRA VEZ
call LCD_INI_2P ;subrutina que inicia el modulo, apaga el cursor y borra el
display
movlw ‘U' ;1
call LCD_DATOS_2P ;Visualiza Valor cargado en W
movlw ‘P' ;2
call LCD_DATOS_2P ;Visualiza Valor cargado en W
RETURN
include "LCD_LIB_CAPC_877_F_2P.lib"
END
LIBRERÍA EN 2 PAGINA
;------------------------------------------------------------------------
;LIBRERIAS DE RUTINAS CREADAS O MODIFICADAS POR CÉSAR PEÑA
;TEMA: CONTROL LCD
;FUNCION: Controlar LCD conectado a RB<0:7> (datos) y RBD<5:7>
; donde RS, R/W y #E (LCD) se conectan respectivamente a RD5, RD6 y RD7
;------------------------------------------------------------------------
;------------------------------------------------------------------------
;UP_LCD: CONFIGURACION PIC PARA EL LCD.