Hola amigos,
Nuevamente solicitando la ayuda del foro....
Sucede que después de lograr hacer interface entre un PIC16F76 y un LCD de 4x20 emigré a un PIC16F876A. La emigración salió bién dado que pude desplegar los datos en el diplay LCD tal y cual los tenía con el PIC16F76. Se trata de un convertidor de ADC que monitorea un voltaje de entrada con un límite de hasta 30VDC, hasta aquí todo bien.
Me dispuse a grabar los datos leidos en la EEPROM interna del PIC por eso es que cambié al 876A para no usar una externa con el 76. Despúes de revisar y estudiar el datashhet del 876A, utilicé las rutinas de ahi y con algunos cambios también pero algo no funciona, o no escribe en la EEPROM o no la lee. Las subrutinas que estoy usando para escribir y leer en la EEPROM son:
;*****************************************************************************************
;SUBRUTINA PARA ESCRIBIR EN EEPROM
;*****************************************************************************************
wrEEP:
banksel EECON1
wrchk0 btfsc EECON1,WR ;Wait for write
goto wrchk0 ;to complete
banksel PORTA
movf wrADR,W ;Data Memory
banksel EEADR
movwf EEADR ;Address to write
banksel PORTA
movf wrDAT,W ;Data Memory Value
banksel EEDATA
movwf EEDATA ;to write
banksel EECON1
bcf EECON1,EEPGD ;Point to DATA memory
bsf EECON1,WREN ;Enable writes
movlw 0x55 ;
movwf EECON2 ;Write 55h
movlw 0xAA ;
movwf EECON2 ;Write AAh
bsf EECON1,WR ;Set WR bit to begin write
banksel PIR2
wrchk1 btfss PIR2,EEIF ;Wait for write
goto wrchk1 ;to complete
bcf PIR2,EEIF ;
bcf EECON1,WREN ;Disable writes
return
;*****************************************************************************************
;SUBRUTINA PARA ESCRIBIR EN EEPROM
;*****************************************************************************************
rdEEP:
banksel EEADR
movf rdADR,W ;Data Memory
movwf EEADR ;Address to read
banksel EECON1
bcf EECON1,EEPGD ;Point to Data memory
bsf EECON1,RD ;EE Read
banksel EEDATA
movf EEDATA,W ;W = EEDATA
return
Lo que he notado es que cuando quiero leer la EEPROM, no me salen los datos en la LCD, pienso que es porque no se han grabado.
Tengo dos dudas:
Una es el direccionamiento de la dirección y los datos de la EEPROM. Puse
wrADR equ 0x21 ;Direccion de la EEPROM para escribir
wrDAT equ 0x22 ;Dato a escribir en la EEPROM
rdADR equ 0x23 ;Direccion de la EEPROM para leer
rdDAT equ 0x24 ;Dato a leer de la EEPROM
pero no tuve exito
La otra es el direccionamiento del Data EEPROM que es en 0x2100 y creo que algo he de hacer, pniendo un
ORG 0x2100
pero no se como ni en donde y de que manera me afecta esto.
De cualquier manera espero me puedan ayudar con este tema....
Saludos