FAQ FAQ  •  Buscar Buscar  •  Registrarse Registrarse  •  Entre para ver sus mensajes privados Entre para ver sus mensajes privados
Login Login

Solucionar este trozo de código
Índice de los Foros Electronica Facil » FOROS ELECTRONICA » Microcontroladores PIC
Publicar nuevo tema   Responder al tema
Ver tema anteriorEntre para ver sus mensajes privadosVer tema siguiente
AutorMensaje
Meta
Asunto: Solucionar este trozo de código MensajePublicado: 27 Abr, 2013 - 04:25
Habitual
Habitual


Registrado: 03 Sep, 2008
Mensajes: 124

Hola:



Se me atasca el PIC tanto en el simulador Proteus y físicamente, no graba en la su EEPROM interna del PIC16F88.

Lo que hace el PIC del programa principal es, con un pulsador en RA0 enciende y apaga un LEd en la salida RB0.

Hasta ahí todo bien. Solo que no es capaz de grabar nada en la EEPROM, cuando está encendido el Led o apagado, la EEPROM la función que hace es esa, mantener lo últimos valores del Led.

Siempre se me atasca por aquí.
;Guarda en la EEPROM el valor de la salida.
Escribe_Dato_EERPOM
BANKSEL EEADR
movlw 0x00 ; Dirección.
movwf EEADR ; Carga registro EEADR con la dirección a escribir.
movf Dato,W
movwf EEDATA ; Carga el registro EEDATA con el dato a escribir.
BANKSEL EECON1
bcf EECON1,EEPGD ; Selecciona acceso a memoria EEPROM de datos.
bsf EECON1,WREN ; Permiso de escritura.
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2 ; Secuencia de escritura según Mirochip.
bsf EECON1,WR ; Inicio del ciclo de escritura.
[COLOR="red"]Espera
btfsc EECON1,WR
goto Espera ; Esperar que finalice (WR=0).
[/COLOR]
bcf EECON1,WREN ; Retira el permiso de escritura.
return


Código abajo completo.

Código:

; Cada vez que presiona el pulsador conectado a la línea RA0 conmutará el estado de
; un LED conectado a la línea RB0.
;
; ZONA DE DATOS **********************************************************************

    LIST        P=16F88
    INCLUDE     <P16F88.INC>
    __CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _FOSC_EC
    __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF
   ERRORLEVEL   -302
   
    CBLOCK 0x20
   RAM_ret
   RAM_ret_1
    ENDC

    CBLOCK 0x110
   Dato
    ENDC

#DEFINE Pulsador   PORTA,0        ; Pulsador conectado a RA0.
#DEFINE Led        PORTB,0        ; Línea donde se conecta el diodo LED.


; ZONA DE CÓDIGOS ********************************************************************

    ORG     0
Inicio
   clrw
    clrf    PORTB               ; Borra los latch de salida.
    BANKSEL ANSEL
    clrf    ANSEL               ; Puerto A digital.
    BANKSEL TRISA
   movlw   b'11111111'
    bsf     Pulsador           ; Pulsador activado como entrada.
   clrf   TRISB
    bcf     Led                ; Activar como salida Led.
   call   Lee_Dato_EERPOM_2
    BANKSEL PORTA               ; Vuelve al banco 0.
Principal
    btfsc   Pulsador            ; ¿Pulsador presionado?, ¿(Pulsador)=0?
    goto    Fin                    ; No. Vuelve a leerlo.
;    call    Retardo_20ms        ; Espera que se estabilicen los niveles de tensión.
    btfsc   Pulsador            ; Comprueba si es un rebote.
    goto    Fin                    ; Era un rebote y sale fuera.
    btfsc   Led                ; Testea el último estado del LED.
    goto    EstabaEncendido
EstabaApagado
    bsf     Led                ; Estaba apagado y lo enciende.
   ;movlw   b'00000001'
   BANKSEL   Dato
   movf   Led
   movwf   Dato
   call   Escribe_Dato_EERPOM_2
   BANKSEL   PORTA            ; Banco 0.
    goto    EsperaDejePulsar
EstabaEncendido
    bcf     Led                ; Estaba encendido y lo apaga.
   ;movlw   b'00000000'
   movf   Led
   movwf   Dato
   call   Escribe_Dato_EERPOM_2
   BANKSEL   PORTA            ; Banco 0.
EsperaDejePulsar
    btfss   Pulsador            ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
    goto    EsperaDejePulsar    ; No. Espera que deje de pulsar.
Fin
    goto    Principal

;Subrutina EEPROM ******************************************************************
Lee_Dato_EEPROM
    BANKSEL EEADR
    movlw   0x00                    ; Dirección.
    movwf   EEADR                   ; Carga el registro EEADR con la dirección que se desea leer.
    BANKSEL EECON1
    bcf     EECON1,EEPGD            ; Selecciona el acceso a memoria EEPROM.
   bsf       EECON1,RD               ; Inicia el ciclo de lectura.
    BANKSEL EEDATA
    movf    EEDATA,W                ; Carga en W el dato recuén leído.
    return

;Guarda en la EEPROM el valor de la salida.
Escribe_Dato_EERPOM
    BANKSEL EEADR
    movlw   0x00                    ; Dirección.
    movwf   EEADR                   ; Carga registro EEADR con la dirección a escribir.
    movf   Dato,W
    movwf   EEDATA                  ; Carga el registro EEDATA con el dato a escribir.
    BANKSEL EECON1
    bcf     EECON1,EEPGD            ; Selecciona acceso a memoria EEPROM de datos.
    bsf     EECON1,WREN             ; Permiso de escritura.
    movlw   0x55
    movwf   EECON2
    movlw   0xAA
    movwf   EECON2                  ; Secuencia de escritura según Mirochip.
    bsf     EECON1,WR               ; Inicio del ciclo de escritura.
Espera
    btfsc   EECON1,WR
    goto    Espera                  ; Esperar que finalice (WR=0).
    bcf     EECON1,WREN             ; Retira el permiso de escritura.
   return

     END


¿Alguna idea?

Saludo.
 
 Ver perfil de usuario Enviar mensaje privado  
Responder citando Volver arriba
rina
Asunto:  MensajePublicado: 30 Abr, 2013 - 11:51
Fanatico de la Electronica
Fanatico de la Electronica


Registrado: 14 Ago, 2005
Mensajes: 1894

meta.. contigo si que no veo solucion.. de donde as sacado eso. que es la mexcla de 3 lenguajes diferentes¿?¿?¿?¿?
por que hay no le encuentro ni pies ni caveza menos aun una estructura con sentido.

vamos que mezclas el picbasic en las definiciones d puertos y el word_config y el resto esta en un Mpla que no conoce ni su padre.

o lo copiaste de un cacho que quedo de una compilacion de picbasic. porque hay muchos comandos que el mplab no existen o no se emplean asi (cuando se usa un compilados ya sea de basic o C si pero en mplab....

otra, los rvotes o mejor los controlas con un pequeño temporizador que corra sin parar (nada de pausas) aunque es mejor acerlo electronicamente y ponerle un pequeño condensador de 10nF o 100nf y no veas lo util que es para evitarse problemas de ese tipo.
otra es que el tipo de integrado que estas usando cuando usas el pause si no esta correctamente configurado para al estado de invernacion (por eso te comento que no uses el pause) sin contar que al estar en invernacion tampoco funcionan las interruciones y el programa se queda parado completamente.. que ueno para una chorradila de programa como ese pues tanto que da lo mismo usarlo o no.

la cuesttion biendo es simple y te dicgo lo mismo que al otro del pedazo de codigo.. acostumbraros a manejar o dibujar antes un flujo de programa y aprender a estructurarlos mejor.
y mas te lo digo qti meta. que llevo biendote desde ace años y todavia en 2 años no te e visto acer nada que no sea una mariconada que no puedas acer con un integrado contador o un ne555 y para encima usando un pic de caracteristicas curiosas.
y sigue con el pic basic asta que lo manejes mejor que caminas (todo sea que no seas minusvalido) entonces lo siento por el comentario.

y ya te digo que en los dos ultimos años y mas para 4 chorradillas que te tengo vistas. empezando con el sensor de luz crepuscular donde malgastaste un 16f84a solo para encender una luz y apagarla y para encima con quejas que si no telo pagaron. pues si nin porlomenos el prsupuesto del material vale.. aun asi eso es algo que se ace con un NE555 que no vale 50cen y tu usas un pic que vale unos 5€.
dime que sentido comunn de negocios es ese. campeon.

espero que en el proximo año mejores en la programacion. porque sino lo unico que podria decirte es lo mismo que puedo decirles a muchos de donde vivo.
su titulo de ingenieria es un papel grande y gordo que no vale ni para limpiarme el culo.. (pon que los empresarios son mas finos) simplemente es un claval, largate no toques nada y largate de mi vista. eso siempre despues de x meses y claro no te pagara un duro.


un saludo
 
 Ver perfil de usuario Enviar mensaje privado  
Responder citando Volver arriba
Mostrar mensajes anteriores:     
Cambiar a:  
Todas las horas son GMT + 1 Hora
Publicar nuevo tema   Responder al tema
Ver tema anteriorEntre para ver sus mensajes privadosVer tema siguiente
 Índice de los Foros Electronica Facil » FOROS ELECTRONICA »  Microcontroladores PIC
powered by phppowered by MySQLPOWERED BY APACHEPOWERED BY CentOS© 2004 - 2017Información LegalPrensa