elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Informática
| |-+  Electrónica
| | |-+  Escribir/Leer EEPROM PIC16F84 (Asm)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Escribir/Leer EEPROM PIC16F84 (Asm)  (Leído 14,121 veces)
Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Escribir/Leer EEPROM PIC16F84 (Asm)
« en: 17 Abril 2011, 13:46 pm »

Hola gente como estais?¿ llevo 2 dias intentando escribir en la EEPROM del PIC16F84,sigueindo el DataSheet del PIC,pero no consigo hacerlo,e echo un programa que guarda "0x01" en la EEPROM,despues lo lee y lo mete en un Registro,despues mediante condicional IF comprueba que si ese registro es igual a 0x01 prenda el LED ys i no pues finaliza el programa,pero no funciona :(:( aqui pongo el codigo aver si ven algun erro y pueden ayudarme


Código
  1. list p=16f84       ; Pic a usar
  2. radix hex           ; Sistema hexadecimal
  3.  
  4.  
  5.  
  6. ;_____Asignacion de puertos_______
  7.  
  8. status equ 0x03        ; Direccion registro STATUS
  9. porta equ 0x05         ; direccion Pueros A
  10. trisa equ 0x85          ; Direccion TRISA
  11. portb equ 0x06         ; Direccion puertos B
  12. trisb equ 0x86          ; Direccion TRISB
  13. Registro1 equ 0x0C   ; Registro 1
  14.  
  15. ;_____Memoria EEPROM______________
  16.  
  17. ;Direccion de los registros para trabajar con la EEPROM del 16f84
  18.  
  19.  
  20. EEDATA equ 0x08
  21. EEADR equ 0x09
  22. EECON1 equ 0x88
  23. EECON2 equ 0x89
  24. ADDRES_W equ 0x10     ; Direccion en la que quiero escribir el dato
  25. Dat equ 0x01              ; Dato a guardar
  26.  
  27. ;______Codigo_____________________
  28.  
  29. reset org 0x00
  30.  
  31. goto inicio
  32.  
  33. org 0x05
  34. inicio
  35.  
  36.  
  37. ;_____Configurar puertos__________
  38.  
  39. bsf status,5         ; Pasar al banco 1
  40. movlw b'00000'
  41. movwf trisa          ; Puerto A como salida
  42. clrw                 ; Limpiar registro W
  43. movlw b'11111111'
  44. movwf trisb          ; Puerto B como entrada
  45. bcf status,5         ; Volver al banco 0
  46.  
  47.  
  48. ;_____Esrcibe en la EEPROM________
  49.  
  50. bcf status,5          ; Me aseguro que este en el banco 0
  51. movlw ADDRES_W   ; Paso la direccion a W
  52. movwf EEADR        ; y la paso al registro de la EEPROM  EEADR
  53. movlw Dat            ; Pongo en W el dato que quiero grabar
  54. movwf EEDATA      ; y lo paso al registro de dato de la EEPROM
  55. bsf status,5          ; paso al banco 1
  56. bsf EECON1,2        ; Pido permiso de escritura (BIT 2: WREN)
  57.  
  58.  
  59. ;____Proceso de seguridad_______
  60.  
  61. movlw 0x55
  62. movwf EECON2
  63. movlw 0xAA
  64. movwf EECON2
  65.  
  66.  
  67.  
  68. bsf EECON1,1       ; Ejecuto escritura!!   no?¿?¿ :S (bit1: WR = WriteData)
  69. bcf status,5         ; Regreso al banco 0
  70.  
  71.  
  72. ;_____ Lee EEPROM_________________
  73.  
  74. movlw ADDRES_W   ; Direccion a leer
  75. movwf EEADR         ; Se la paso al registro de direcciones de la EEPROM
  76. bsf status,0           ; Paso al banco 1
  77. bsf EECON1,0         ; Activo READ DATA, (bit0)
  78. bcf status,0           ; Regreso de banco
  79. movf EEDATA,W      ;guardo el valor leido en W (?¿)
  80. movwf Registro1     ;Lo paso al registro1   (no?¿)
  81.  
  82.  
  83. IF Registro1 == 0x01
  84. bcf portb,0  ;Prende led por PINB0
  85. else
  86. end Fin del programa
  87.  
  88.  


no me da ningun error pero no funciona (Como simulador uso Proteus 7)


saludos


« Última modificación: 17 Abril 2011, 13:53 pm por Riki_89D » En línea

skapunky
Electronik Engineer &
Colaborador
***
Desconectado Desconectado

Mensajes: 3.667


www.killtrojan.net


Ver Perfil WWW
Re: Escribir/Leer EEPROM PIC16F84 (Asm)
« Respuesta #1 en: 17 Abril 2011, 14:04 pm »

Citar
IF Registro1 == 0x01
bcf portb,0  ;Prende led por PINB0
else
end Fin del programa

Esa parte has mezclado ensamblador con C  :xD, en ensamblador hay instrucciónes para ver si un registro o acumulador es o 0 1 y según lo que sea hace un salto, en la arquitectura 8081 que es la que usa Atmel hay instrucciónes como JNZ, JZ,JZE...

La estructura condicional IF..THEN la puedes utilizar para programar micros en general, pero si el lenguaje que utilizas es el C.

En Microchip, para comprovar si algo es cero o no mira la instruccón decfsz, fsz...en asm para PIC hay varias.

PD: Creo que acabarías antes programando en C, el 70% de tus problemas se esfumarán.


En línea

Killtrojan Syslog v1.44: ENTRAR
Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Escribir/Leer EEPROM PIC16F84 (Asm)
« Respuesta #2 en: 17 Abril 2011, 14:09 pm »

Hey gracias por tu paciencia,ara mirare esas instrucciones,se que en C seria mucho mejor aun que el programa ocupara mas,pero es que nos obligan sabes,e slo que nos toca ahora,mas adelante imagino que no,oye una pregunta curiosa,cres que morira el lenguaje ASM en el ambito de los PIC,apesar de que sea mas rapido y eso,hay empresas que programen en ASM?¿




saludos y gracias :)
En línea

skapunky
Electronik Engineer &
Colaborador
***
Desconectado Desconectado

Mensajes: 3.667


www.killtrojan.net


Ver Perfil WWW
Re: Escribir/Leer EEPROM PIC16F84 (Asm)
« Respuesta #3 en: 17 Abril 2011, 14:51 pm »

El lenguaje Asm no puede morir, es el lenguaje mas cercano al "lenguaje maquina" que entiende directamente un sistema electrónico y por ello lo hace el mas rápido.

En un microcontrolador no se nota la diferencia, pero en un ordenador, donde el procesador tiene una carga de trabajo muy superior, un programa hecho en ensamblador irá mucho mas rapido que uno hecho en visual basic o otro lenguaje de nivel alto.

Esto se da, porque tanto un microcontrolador, como un microprocesador, tienen un clock (ciclo de reloj). Las instrucciónes, depénde cuales sea ocupan X ciclos de reloj, por ejemplo un MOV, si mal no recuerdo eran 2, un NOP 1...

Si el programa esta hecho en ensamblador es facil saber el número de ciclos aproximados, un programa hecho en C en realidad para hacer lo mismo consumirá mas ciclos.

Es por eso que hay lenguajes mas o menos rápidos y el ensamblador es el mas rapido de todos.

AÑADO...

Para entender mas fácilmente lo de los ciclos de trabajo de las instrucciónes, solo hace falta mirar la estructura interna de un microprocesador por ejemplo, tienen distíntas partes, una de ellas por ejempl una ALU, otra un acumulador...

De esta forma sabe el micro que lo primero que pones es una instrucción y luego un dato, por ejemplo:

Mov B, 00000001d
add A,B

Fijate la siguiente imagen:

http://www.alciro.org/images/alciro/610_estructura-interna-microcontroladores-8051-8052.png

Fijate la parte de la ALU, le vienen dos líneas TMP1 y TMP2, en el ejemplo de codigo que he puesto, en un primer ciclo de trabajo de la ALU B cargaría su valor decimal, en el siguiente ciclo de trabajo de la ALU se sumaria A + B.

A partir de aquí, sabiendo los ciclos de clock de la instrucción MOV y la de ADD podemos saber los ciclos de clock totales utilizados por esas dos líneas de codigo.

PD: Sorry que no te ponga los ciclos de clock de ADD o MOV pero no me acuerdo, quizá los de MOV sean 2.

PD: Las empresas generálmente programan tanto en ASM como en C, depende del personal y su formación, aunque el C es importante saber manejarse con el ya que es mucho mas práctico y los programas se acórtan una barbaridad
« Última modificación: 17 Abril 2011, 15:10 pm por skapunky » En línea

Killtrojan Syslog v1.44: ENTRAR
Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Escribir/Leer EEPROM PIC16F84 (Asm)
« Respuesta #4 en: 17 Abril 2011, 16:00 pm »

Gracias,me ayudas mucho :) la verdad aun que nos obliguen hacer el trabajo en ASM,me gusta mucho este lenguaje,hay cosas que cuestan mucho de entender,peor cunao lo consigues en verdad si lo sabes manejar no es tan dificl,y comprendes mejor como trabajan los lenguajes como Csabes quetocas exactamente del PIC,creo que eos es algo que solo ASM puede brindar,por eso me gusta tanto,aun que C es hiperpotente,esta en todos los lados hehe,



saludos dese Bcn
En línea

skapunky
Electronik Engineer &
Colaborador
***
Desconectado Desconectado

Mensajes: 3.667


www.killtrojan.net


Ver Perfil WWW
Re: Escribir/Leer EEPROM PIC16F84 (Asm)
« Respuesta #5 en: 17 Abril 2011, 16:32 pm »

Si, el problema viene cuando programas un microcontrolador en C, entonces te das cuenta de "todo el tiempo perdido" que tampoco es perdido, pero en C es muchísimo mas facil, por ejemplo para sacar 00000001 por el puerto A hacer directamente:

PORTB = 0x01;

con esa línea ya lo sacas, o por ejemplo:

IF (PORTB == 0x01) then
PORTA = 1;

Imagina hacer esto último en ASM la de líneas que ocuparia, posiblemente 6 o 7 líneas mientras en C són dos.

Es mas, compiladores como MPLAB tiene todas las librerias de estos pics y no hace falta ni declarar direcciónes de memória ni nada, simplemente metes la librria con INCLUDE y fiesta. Lo que queda es ya directamente poner los fuzes o configuraciones iniciales y ya puedes programar directamente sobre los puertos sin preocuparte de bancos, registros ni nada con muchas menos líneas de codigo.
En línea

Killtrojan Syslog v1.44: ENTRAR
Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Escribir/Leer EEPROM PIC16F84 (Asm)
« Respuesta #6 en: 17 Abril 2011, 17:12 pm »

Por cierto ahora ue dcies eso,se puede crear macros (o funciones) en ams para tenerlas echas ya?¿

una funcion que pida por ejemplo 2 parametros para realizar una suma,hay alguna forma?¿

asin haria la sfunciones al principio i me olbidaria de programarlas cada vez



saludos
En línea

skapunky
Electronik Engineer &
Colaborador
***
Desconectado Desconectado

Mensajes: 3.667


www.killtrojan.net


Ver Perfil WWW
Re: Escribir/Leer EEPROM PIC16F84 (Asm)
« Respuesta #7 en: 17 Abril 2011, 21:19 pm »

Bua si, pero no te lo recomiendo, puedes hacer como funciónes pero al ser un lenguaje menos visual a primera vista te acabarás liando y las funciónes deberían ser muy precisas para algo concreto.

No te lo recomiendo, si fuera C algo si podrías hacer, pero tampoco demasiado. Como la programación va orientada a un "hardware" que según lo que quieras hacer cambia mucho, no se suelen hacer funciónes para ello.
En línea

Killtrojan Syslog v1.44: ENTRAR
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Leer Microwire EEPROM 93C86
Electrónica
kaoskiller 3 6,722 Último mensaje 29 Octubre 2004, 16:12 pm
por BADBYTE-K
[HELP]leer y escribir imagenes
Programación Visual Basic
shiryou 2 1,719 Último mensaje 2 Diciembre 2005, 21:59 pm
por dexer
Como leer eeprom 24c02
Electrónica
baskodj 0 3,664 Último mensaje 24 Abril 2006, 22:34 pm
por baskodj
Escribir y leer un archivo
Programación Visual Basic
Debci 3 2,690 Último mensaje 21 Julio 2009, 18:02 pm
por Fabricio
Leer y escribir en archivo .mdb de access con C++
.NET (C#, VB.NET, ASP)
cassiel83 4 7,128 Último mensaje 16 Agosto 2013, 12:40 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines