TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: mincho en 13 de Mayo de 2007, 05:24:42
-
Estoy tratando de pasar un codigo del 16f84 al al 16f628, ya me funciona todo menos la funcion de escritura del me graba cualqiercosa menos el digito que aparece en el display.
en el 16f84 funciona bien, aqui pongo la rutina de guardado que utilice en el 16f84, aver si alguien me ayuda a pasarlo al 16f628.
GUARDAR1
MOVF MINUTOS,W ; put digit registers into EEprom
MOVWF EEDATA
MOVLW D'11' ; EEPROM location 11 +
ADDWF OFFSET,W ; offset from start
MOVWF EEADR
CALL ESCRIBIR
MOVF MINUTOS10,W
MOVWF EEDATA
MOVLW D'10' ; EEPROM location 10 +
ADDWF OFFSET,W ; offset from start
MOVWF EEADR
CALL ESCRIBIR
MOVF HORAS,W
MOVWF EEDATA
MOVLW D'09' ; EEPROM location 9 +
ADDWF OFFSET,W ; offset from start
MOVWF EEADR
CALL ESCRIBIR
RETURN
Estos son los datos que quiero guardar en la eeprom, en el 16f84 los graba.
Agradesco cualquier idea...
Un saludo...
-
amigo antes de migrar un codigo de un pic a otro sugiero que primero revises el datasheet de ambos pics e identifiques sus diferencias, en tu caso los regitros de la EEPROM del pic16F84A estan todos en el banco 0 pero.... en el pic16F628 ..... revisa la pagina 91 del respectivo datasheet :mrgreen: te llevaras una sorpresita :-)
-
Gracias Microcadaver, Estos fueron los cambios que tube que hacer
GUARDAR1
MOVF MINUTOS,W
BSF STATUS,RP0
MOVWF EEDATA
MOVLW D'11' ; EEPROM location 11 +
; ADDWF OFFSET,W ; offset from start
MOVWF EEADR
BCF STATUS,RP0
CALL ESCRIBIR
MOVF MINUTOS10,W
BSF STATUS,RP0
MOVWF EEDATA
MOVLW D'10' ; EEPROM location 10 +
; ADDWF OFFSET,W ; offset from start
MOVWF EEADR
BCF STATUS,RP0
CALL ESCRIBIR
MOVF HORAS,W
BSF STATUS,RP0
MOVWF EEDATA
MOVLW D'09' ; EEPROM location 9 +
; ADDWF OFFSET,W ; offset from start
MOVWF EEADR
BCF STATUS,RP0
CALL ESCRIBIR
RETURN
La rutina para escribir creo que la tenia bien
De todas maneras aqui dejo los cambios que hice a la rutina de escribir
Esta es para el 16f84A
ESCRIBIR
bcf INTCON, GIE
bsf STATUS,RP0
bcf EECON1,WRERR
bsf EECON1,WREN
movlw H'55'
movwf EECON2
movlw H'AA'
movwf EECON2
bsf EECON1,WR
ES1 nop
btfss EECON1,EEIF
goto ES1
nop
btfsc EECON1,WRERR
goto ESCRIBIR
nop
bcf EECON1,EEIF
bcf EECON1,WREN
bcf STATUS,RP0
bsf INTCON, GIE
return
Y esta es para el 16f627 y 16f628
ESCRIBIR
BCF INTCON, GIE ; Disable INTs.
BSF STATUS, RP0 ; Bank 1
bcf EECON1,WRERR
BSF EECON1, WREN ; Enable write
MOVLW 55h ;
MOVWF EECON2 ; Write 55h
MOVLW 0xAA ;
MOVWF EECON2 ; Write AAh
BSF EECON1,WR ; Set WR bit
; begin write
ESPERAR
BCF STATUS,RP0
BTFSS PIR1,EEIF ; Lee ek EEIF y salta una instrucción si el valor es 1
GOTO ESPERAR ; Espera de grabación de la EEPROM
BSF STATUS,RP0
btfsc EECON1,WRERR
goto ESCRIBIR
BCF STATUS,RP0
BCF PIR1,EEIF ; Limpia el flag EEIF
BSF STATUS,RP0
bcf EECON1,WREN
BCF STATUS,RP0
BCF INTCON, GIE
RETURN
Gracias por el Tip, Realmente es una desagradable Sorpresa, pero ya todo funcionando...
-
jejejej amigo mincho permitame decirle algo más, no tiene porque denominarla como desagradable sorpresa, pues de no haber sido asi, Ud. no hubiera aprendido, y mucho aún peor, no lo hubiera resuelto por Ud. mismo; alegrese ha dado un gran paso en este universo de la programación de microcontroladores. felicitaciones y a seguir con mas retos!!!! exitos!!! :-/ :-/ :-/ :-/ :-/ :-/