Autor Tema: Ayuda eeprom pic  (Leído 1743 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fco1306

  • PIC16
  • ***
  • Mensajes: 128
Ayuda eeprom pic
« en: 07 de Febrero de 2013, 18:30:37 »
Estoy comenzando a programar en asm y estoy intentando grabar en la memoria eeprom del 16f628a. He buscado y probado varias rutinas, pero no consigo hacerlo funcionar ¿donde puede estar el fallo?
Código: [Seleccionar]

list p=16f628A
#include <p16f628A.inc>

__CONFIG _CP_OFF &_CPD_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _LVP_OFF & _MCLRE_OFF



CLOCK equ 4000000

conta_1 equ 0x20
conta_2 equ 0x21
conta_3 equ 0x22
EEPROM_GuardaINTCON equ 0x23

; ----- Macros

SEL_BANK_0: macro
bcf STATUS,RP0 ; macros for data access
bcf STATUS,RP1
endm

SEL_BANK_1: macro
bsf STATUS,RP0
bcf STATUS,RP1
endm


FXTAL equ D'8000000'
BaudRate equ D'62500' ; Xbus serial speed

HIGH_BAUD equ (((D'10'*FXTAL/(D'16'*BaudRate))+5)/D'10')-1 ; BRGH = 1
LOW_BAUD equ (((D'10'*FXTAL/(D'64'*BaudRate))+5)/D'10')-1 ; BRGH = 0


;**** Definicion de variables ****
rs485 equ 5 ; Definimos Led como el bit cero de un registro, en este caso PORTB5.-
poweron equ    1 ; Definimos Led como el bit cero de un registro, en este caso PORTA1.-
Pulsador equ 0 ; Definimos Pulsador como el bit 0, en este caso sera para PORTA

;**** Configuracion de puertos ***
Reset org 0x00 ; Aqui comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
org 0x05 ; Origen del codigo de programa.-

Inicio:
movlw 0X07;CARGA W CON 0X07 PARA DESHABILITAR COMPARADORES
movwf CMCON
SEL_BANK_1


movlw b'11100' ; Muevo 11111 a W.-
movwf TRISA ; Cargo en TRISA.-
movlw b'00000000'
movwf TRISB
SEL_BANK_0




bsf PORTA,poweron ; Comienza encendido.portb5-
bsf PORTB,rs485 ; Comienza encendido.-porta1

;call Retardo_1s

bcf PORTA,poweron ; Comienza encendido.-
bcf PORTB,rs485 ; Comienza encendido.-

SEL_BANK_1

 movlw    0x02            ;Referecia a la posición 02 de la memoria
    movwf    EEADR
    movlw    0x0A            ;Dato a escribir en la posición 02 de la memoria
    movwf    EEDATA



call EEWR




;Retardo_1s:
;movlw D'10'
;movwf conta_3
;movlw D'100'
;movwf conta_2
;movlw D'250'
;movwf conta_1
;nop
;decfsz conta_1,F
;goto $-.2
;decfsz conta_2,F
;goto $-.6
;decfsz conta_3,F
;goto $-.10
;return






EEWR:     
        ;SEL_BANK_1                                 ;HABILITA EL BANCO 1
                BSF              EECON1,WREN          ;HABILITA ESCRITURA EN EEPROM
                BCF             INTCON, GIE              ; DESHABILITA INTERRUPCIONES
                MOVLW     H'55'                              ;PREPARA SECUENCIA DE SEGURIDAD
                MOVWF     EECON2                       ;ESCRIBE PRIMER DATO DE SECUENCIA
                MOVLW     H'AA'                             ;SEGUNDO DATO
                MOVWF     EECON2                       ;ESCRIBE SEGUNDO DATO DE SECUENCIA
                BSF             EECON1,WR                ;INICIA CICLO DE ESCRITURA
EW:         BTFSC        EECON1,WR                ;MALLA PARA ESPERAR AL FINAL DEL CICLO
                GOTO         EW                                 ;SI WR=1, CICLO DE ESCRITURA AUN NO TERMINA
                BCF            EECON1, WREN          ;DESHABILITA ESCRITURA
                BSF             INTCON, GIE                ;HABILITA INTERRUPCIONES
                RETURN







end


Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Ayuda eeprom pic
« Respuesta #1 en: 08 de Febrero de 2013, 06:25:01 »
en que linea se te queda el programa en bucle infinito?

si es en esta linea: BTFSC        EECON1,WR                ;MALLA PARA ESPERAR AL FINAL DEL CICLO

cambiala por esta otra:BTFSS        EECON1,WR                ;MALLA PARA ESPERAR AL FINAL DEL CICLO

haber si te funciona.es que no estoy muy seguro de que instruccion tiene que llevar.ya que tengo el programa en otro PC y no puedo mirarlo ahoramismo.
pero a mi este truco me ha funcionado muchas veces.aunque no quiere decir de que sea la intruccion correcta a elegir.muchas veces una mala configuracion en algun registro puede hacer que se presente este error.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado fco1306

  • PIC16
  • ***
  • Mensajes: 128
Re: Ayuda eeprom pic
« Respuesta #2 en: 08 de Febrero de 2013, 16:43:49 »
Pues no es eso.
He hecho un pequeño programa en pic simulator y pasado el asm a mplab.
Funciona siempre y cuando no haga un call para llamar a la rutina de grabación .
Código: [Seleccionar]

list p=16f628A
#include <p16f628A.inc>

__CONFIG _CP_OFF &_CPD_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _LVP_OFF & _MCLRE_OFF



CLOCK equ 4000000

conta_1 equ 0x20
conta_2 equ 0x21
conta_3 equ 0x22
EEPROM_GuardaINTCON equ 0x23

; ----- Macros

SEL_BANK_0: macro
bcf STATUS,RP0 ; macros for data access
bcf STATUS,RP1
endm

SEL_BANK_1: macro
bsf STATUS,RP0
bcf STATUS,RP1
endm


FXTAL equ D'8000000'
BaudRate equ D'62500' ; Xbus serial speed

HIGH_BAUD equ (((D'10'*FXTAL/(D'16'*BaudRate))+5)/D'10')-1 ; BRGH = 1
LOW_BAUD equ (((D'10'*FXTAL/(D'64'*BaudRate))+5)/D'10')-1 ; BRGH = 0


;**** Definicion de variables ****
rs485 equ 5 ; Definimos Led como el bit cero de un registro, en este caso PORTB5.-
poweron equ    1 ; Definimos Led como el bit cero de un registro, en este caso PORTA1.-
Pulsador equ 0 ; Definimos Pulsador como el bit 0, en este caso sera para PORTA

;**** Configuracion de puertos ***
Reset org 0x00 ; Aqui comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
org 0x05 ; Origen del codigo de programa.-

Inicio:
movlw 0X07;CARGA W CON 0X07 PARA DESHABILITAR COMPARADORES
movwf CMCON
SEL_BANK_1


movlw b'11100' ; Muevo 11111 a W.-
movwf TRISA ; Cargo en TRISA.-
movlw b'00000000'
movwf TRISB
SEL_BANK_0




bsf PORTA,poweron ; Comienza encendido.portb5-
bsf PORTB,rs485 ; Comienza encendido.-porta1

;call Retardo_1s

bcf PORTA,poweron ; Comienza encendido.-
bcf PORTB,rs485 ; Comienza encendido.-





   BSF STATUS,RP0
    movlw    0x00            ;Referecia a la posición 02 de la memoria
    movwf    EEADR
    movlw    0x0A            ;Dato a escribir en la posición 01 de la memoria
    movwf    EEDATA
;call eewr



eewr:
BSF EECON1,WREN
MOVLW 0x55
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1,WR
L0002: BTFSC EECON1,WR
GOTO L0002
BCF EECON1,WREN
BCF STATUS,RP0
BCF PIR1,EEIF






;Retardo_1s:
;movlw D'10'
;movwf conta_3
;movlw D'100'
;movwf conta_2
;movlw D'250'
;movwf conta_1
;nop
;decfsz conta_1,F
;goto $-.2
;decfsz conta_2,F
;goto $-.6
;decfsz conta_3,F
;goto $-.10
;return




end



Pues no sé donde está el fallo, he mirado y probado códigos y nada

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Ayuda eeprom pic
« Respuesta #3 en: 09 de Febrero de 2013, 08:17:56 »
me parece recordar que despues de llamar a la subrutina de grabacion a la eeprom,hay que esperar un tiempo.prueba a poner un retardo despues de la llamada.haber que pasa.
Montando mi primera impresora 3D (Raprep Prusa i3)