TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: RPI en 18 de Junio de 2007, 19:36:22
-
Hola!! esta es mi primera vez...y me gustaria saber si me podeis ayudar.
Necesito crear una rutina de acceso a la eeprom y que me asigne los valores almacenados a los bancos0 y 1 de la ram para configurar el pic.
Mediante direccionamiento indirecto puedo ir eligiendo la posicion,pero estoy un poco perdido
¿alguien me puede decir por donde comenzar?
-
Hola aqui te mando un subrutinas que yo utilizo normalmente para grabar los datos en la EEPROM y leerlas, y verificarlas
Lectura de la EEPROM:
BCF STATUS,RP0 ;Esta instruccion se puede omitir si ya estoy en el banco 0
MOVLW 0X20 ;este valor puede ser cualquiera ya que va hacer una pocición de la memoria
MOVWF EEADR ;eeprom
BSF STATUS,RP0 ;se pone a uno ya que EECON1 esta en el banco 1
BSF EECON1,RD ;comienza la lectura del direccionamiento, en este caso 0X20
BCF STATUS,RP0 ;Banco 0 (normalmente se trabaja en este banco)
MOVF EEDATA,W ;Paso el contenido de la eeprom a la memoria de trabajo
Notese que la última instrucción (MOVF) se puede cambiar por MOVFW y en la tercer columna, no hace falta especificar en donde o sea MOVFW EEDATA
Escritura:
BCF STATUS,RP0 ;Banco cero porque EEADR esta en el banco 0
MOVLW 0X18 ;dirección de la memoria a ser grabada
MOVWF EEADR ;direccionamiento indirecto en este caso 0X18
MOVLW 0X12 ;Este es el valor que se va a grabar en la pocición 0X18 de la eeprom
MOVWF EEDATA ;Direccionamiento indirecto del valor a ser grabado
BSF STATUS,RP0 ;Banco 1
BSF EECON1,WREN ;Permiso de escritura de la eeprom, si no se habilita esto, no se logra nada
MOVLW 0X55 ;A continuación se realiza unos pasos obligatorios para lograr grabar
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR ;Comienza la escritura
ESPERO BTFSC EECON1,WR ;¿Terminó la grabación?
GOTO ESPERO ;No, espero
BCF STATUS,RP0 ;Si, paso al banco 0
Verificación:
BCF STATUS,RP0
MOVLW 0X22 ;posicion de la memoria a verificar
MOVFW EEADR
BSF STATUS,RP0
BSF EECON1,RD
BCF STATUS,RP0
MOVLW 0X15 ;Dato a ferificar
SUBWF EEDATA,W
BTFSS STATUS,Z ;¿La resta dió cero? eso quiere decir que es el valor
GOTO ERROR ;No
...... ;Si
Los puntos suspencivos quiere decir que continuas a tu manera igual pasa en la instruccion anterio
Bueno, espero que te sirva, si no lo entendes avisame.
Saludos :-/ :-/
-
hola RPI en que pic tas haciendo tu programa? porque la rutina de leon_pic es para un pic parecido al 16F84A
-
Muy buena observación. Pues si, es un pic 16f84a
Saludos :-/ :-/
-
yo estoy aprendiendo con el 16F877, luego cuando vuelva del trabajo os pondre mi rutina para leer y grabar aunque la he sacado del datasheet, el problema viene cuando quiero almacenar todo el banco0 y banco1 de la ram en la eeprom para configurar el pic
-
Hola RPI, por propia experiencia se que los comienzos siempre son dificiles por eso te recomiendo que hagas como yo y empieces por lo mas bajo, con eso y el datasheet se pueden hacer grandes cosas....yo he realizado la siguiente rutina para que mediante direccionamiento indirecto se pueda guardar en la eeprom, nose si estara bien espero que alguien me corrija!!!!
;programita para grabar la configuracion del pic
;en la eeprom del 16F877, para ello usamos
;direccionamiento indirecto
list P=16F877
#include <p16f877.inc>
ADDR_L equ 0x21 ;direccion donde guardamos
DATA_L equ 0x23 ;dato a guardar
conta equ 0x24
org 0x00
nop ;libre para usar
nop
main movlw 0xFF ;como en los bank0 y 1 hay un total
movwf conta ;de 255 dir, ire decrementando para almacenar
bcf STATUS,IRP
movlw H'00'
movwf FSR
bucle call ob_dato ; obtenemos por dir indirecto el dato
call guarda ;lo guardamos
decfsz conta,f
goto bucle
goto fin
;***********************rutinas**************
ob_dato movf INDF,W
movwf DATA_L
movf FSR,W
movwf ADDR_L
incf FSR,f
return
guarda bsf STATUS,RP0
bsf STATUS,RP1
btfsc EECON1,WR
goto $-1
bcf STATUS,RP0
bcf STATUS,RP1
movf ADDR_L,W
bsf STATUS,RP1
MOVWF EEADR
bcf STATUS,RP1
movf DATA_L,W
bsf STATUS,RP1
MOVWF EEDATA
bsf STATUS,RP0
bcf EECON1,EEPGD
bsf EECON1,WREN
bcf INTCON,GIE ;COPIADO DEL DATASHEET
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR
bcf EECON1,WREN
RETURN
fin
END
PD: al programa le falta rellenar los registros de los bankos 0 y 1 pero como simulacro espero que este bien, ¿que opinais?