Autor Tema: Rutina LCD 4 Bits  (Leído 34440 veces)

0 Usuarios y 5 Visitantes están viendo este tema.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Rutina LCD 4 Bits
« Respuesta #45 en: 29 de Junio de 2006, 18:10:22 »
Probaré ahora, a ver si se soluciona.

Entonces copio las tablas de los mensajes arriba despues del ORG y el Goto Inicio?

Que es el pclath?

Saludos

picto creo que debieras leer un poco el datasheet. 

Es un registro que guarda la parte HIGH del program counter del microcontrolador.

El PIC inicia en la posición 0x0000 y es esa la razón por la cual ahí debes poner un código que te lleve a otro lado o bien que haga algo en consecuencia pero no poner datos.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Rutina LCD 4 Bits
« Respuesta #46 en: 29 de Junio de 2006, 23:46:16 »
Hola picto. Intente responderme mas temprano, pero se ve que el foro andaba caido y no pude.
Arriba no picto. abajo. el pic como te dijo maunix siempre inicia desde la posicion 0x000. Si lo pones arriba vas a producir un underflow del STACK, produciendo un reset eterno del pic. Si lo pones debajo, el goto inicio se encarga de desviar el programa sin problemas.
El PCL que es el contador de programa bajo, es de 8 bits(como todos los registros) y las tablas necesitan especial atencion cuando las colocas mas alla(o se cruzan) de la posicion 0xFF de la FLASH.
Saludos
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Rutina LCD 4 Bits
« Respuesta #47 en: 30 de Junio de 2006, 02:59:36 »
Ok, pero me comentas que ponga las tablas abajo del todo, y ya lo están. No sé exactamente que debo de modificar.
Saludos y gracias

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Rutina LCD 4 Bits
« Respuesta #48 en: 30 de Junio de 2006, 08:43:51 »
Ok, pero me comentas que ponga las tablas abajo del todo, y ya lo están. No sé exactamente que debo de modificar.
Saludos y gracias

Lo que te quiso decir Bruno es que tengas en cuenta también el PCLATH a la hora de hacer tus saltos de tabla porque si la misma está en medio de un salto de página tendrás problemas y así como está hecha no funcionará.

Para que tu rutina sea más genérica debes tener en cuenta el salto de página o mejor dicho el uso de los bits superiores del program counter. 

El program counter tiene 13 bits. Esto le permite ir de 0x0000 a 0x1FFF

Está separado en 2 registros de 8 bits . PCLATH:PCL

El PCL es solo la parte LOW.

Si solo usas la parte LOW (PCL) no podrás nunca hacer incrementos superiores dentro de una página de 256 bytes.

Por ejemplo

PC = 0x00F0
PCL = 0xF0
PCLATH = 0x00

Si le sumas 5

PC + 0x0005 = 0x00F5
PCL = 0xF5
PCLATH = 0x00

Ahora bien que pasa si le sumas 0x10 (16 en decimal)

PC + 0x0010 = 0x0100

PCL = 0x00
PCLATH = 0x01

Como tú haces, solo tienes en cuenta el PCL, es decir que no tomas los rebasamientos para incrementar el PCLATH, entonces te quedaría asi

PC + 0x0010 = 0x0000 !

Esto haría resetear a tu pic o bien ir a una posición no esperada.  Todo esto seguramente lo podrias ver en la simulación con el ASM.

La parte del código es la siguiente:

Código: ASM
  1. Mensajes
  2.                         addwf   PCL,F
  3. Mensaje0        DT "BIENVENIDOS", 0x00          ; Posición inicial del mensaje 0.
  4. Mensaje1        DT "VERSION 1", 0x00            ; Posición inicial del mensaje 1.
  5. Mensaje2        DT "I/O", 0x00          ; Posición inicial del mensaje 2.
  6. Mensaje3        DT "P1=Prueba Manual", 0x00             ; Empezamos a activar salidas
  7. Mensaje4        DT "P2=Reset", 0x00                             ; Reiniciamos el programa
  8. Mensaje5        DT "                Volver a repetir          " , 0x00
  9. Mensaje6        DT "Si todo OK", 0x00
  10. Finmensajes

La siguiente appliacation note explica todo esto con mucho mayor detalle

AN556: Implementing a Table Read
http://ww1.microchip.com/downloads/en/AppNotes/00556e.pdf



y solo a modo de sugerencia fijate lo siguiente

Código: ASM
  1. ;************************ RESET Y VERCTORES INT ********************************************
  2.         org     00h             ;Vector de reset (aqui viene el micro cuando arranca)
  3.         goto    Inicio  ;inmediatamente lo mandamos a Inicio
  4.         CBLOCK  0x0C
  5.         ENDC
  6.  
  7. Inicio   ;------------------------ INICIALIZA MICROPOCESADOR ---------------------------

La directiva CBLOCK ... ENDC no la usas.  Se usa para definir variables y tu lo haces más arriba con EQUs, puedes eliminar estas líneas de código perfectamente.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Rutina LCD 4 Bits
« Respuesta #49 en: 30 de Junio de 2006, 09:26:58 »
picto, no te dije que lo pongas abajo de todo. Dije que lo pongas debajo de la linea goto inicio.

Código: ASM
  1. ;************************ RESET Y VERCTORES INT ********************************************
  2.  
  3.         org     00h             ;Vector de reset (aqui viene el micro cuando arranca)
  4.         goto    Inicio  ;inmediatamente lo mandamos a Inicio
  5.  
  6. Mensajes
  7.                         addwf   PCL,F
  8. Mensaje0        DT "BIENVENIDOS", 0x00          ; Posición inicial del mensaje 0.
  9. Mensaje1        DT "VERSION 1", 0x00            ; Posición inicial del mensaje 1.
  10. Mensaje2        DT "I/O", 0x00          ; Posición inicial del mensaje 2.
  11. Mensaje3        DT "P1=Prueba Manual", 0x00             ; Empezamos a activar salidas
  12. Mensaje4        DT "P2=Reset", 0x00                             ; Reiniciamos el programa
  13. Mensaje5        DT "                Volver a repetir          " , 0x00
  14. Mensaje6        DT "Si todo OK", 0x00
  15. Finmensajes
  16.  
  17. Inicio   ;------------------------ INICIALIZA MICROPOCESADOR ---------------------------
  18. ;resto del codigo aqui

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Rutina LCD 4 Bits
« Respuesta #50 en: 30 de Junio de 2006, 09:45:27 »
Que buenos que sois... alucino... no creo que lo hubiera descubierto por mi cuenta...

Voy a probar a ponerlo debado de goto inicio.

Y luego probaré a hacer lo que dice maunix.

A ver que saco en claro. MUCHISIMAS GRACIAS.

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Rutina LCD 4 Bits
« Respuesta #51 en: 06 de Julio de 2006, 09:07:04 »
Hola de nuevo amigos!
He avanzado en el programa y casi lo tengo listo... pero me ha vuelto a pasar lo siguiente:
Argument out of range.  Least significant bits used.
Argument out of range.  Least significant bits used.

Son los 2 últimos mensajes que añadí el número 32 y el 33... como sé cuantos mensajes puedo escribir y cuando me dá el fallo?

Puse los mensajes arriba del todo, pero he leido y releido lo que comentais del PC, PCL y PCLATCH y no acabo de entender com ohacer para que no me dé fallo.

Tengo que cambiar de banco? O como? Estoy se complica por momentos...

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Rutina LCD 4 Bits
« Respuesta #52 en: 06 de Julio de 2006, 09:27:54 »
Hola de nuevo amigos!
He avanzado en el programa y casi lo tengo listo... pero me ha vuelto a pasar lo siguiente:
Argument out of range.  Least significant bits used.
Argument out of range.  Least significant bits used.

Son los 2 últimos mensajes que añadí el número 32 y el 33... como sé cuantos mensajes puedo escribir y cuando me dá el fallo?

Puse los mensajes arriba del todo, pero he leido y releido lo que comentais del PC, PCL y PCLATCH y no acabo de entender com ohacer para que no me dé fallo.

Tengo que cambiar de banco? O como? Estoy se complica por momentos...

picto, en donde te da ese errorr? Los errores no vienen así porque sí, suelen tener un número de línea asociado al .asm en que te dió el error .

Con respecto a tus dudas con respecto al PC , PCL y PCLATH puedes concretar tu pregunta?  Qué es lo que no entiendes?

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Rutina LCD 4 Bits
« Respuesta #53 en: 06 de Julio de 2006, 09:48:38 »
Mensaje32   DT "Salidas ON", 0x00
Mensaje33   DT "Salidas OFF", 0x00
----------------------------------

movlw   Mensaje33  - esta es la línea 312
movlw   Mensaje32 - esta sería la 326

Esas son las líneas que me dá fallo, que corresponden a los mensajes del inicio de programa (tengo 33 escritos de momento)
312 : Argument out of range.  Least significant bits used.
326 : Argument out of range.  Least significant bits used.

Mi pregunta es, como sé cuando me estoy pasando con los mensajes? Y cuantos mensajes puedo escribir en total.Y como solcuiono cuando me pase d elos mensajes?

Ah y otra duda, como hago con el MPLAB para simularlo?
Gracias

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Rutina LCD 4 Bits
« Respuesta #54 en: 06 de Julio de 2006, 10:38:45 »
picto. "Argument out of range.  Least significant bits used." Significa que en alguna o mas lineas declaraste un valor mayor al que le se puede, y el ensamblador ha descartado los bits mas significativos.
En realidad son advertencias,no errores. Pero pueden contraer resultados no deseados(por eso mismo te advierte).

Ejemplos de casos comunes de este tipo de ERROR:

MOVF    0xF3,W        <-Error de programacion.La maxima posicion es 0x7F. Se elimina el 7mo bit, quedando 0x73

XORWF DIGITO1,2    <-Error de programacion. El destino debe ser 0 o 1.(2= b'10', entonces se reemplaza el 2 por 0)

MOVLW b'100100010'  <-Error de programacion.Se elimina el bit8.

etc...

En tu caso  el error esta en que estas moviendo la posicion dentro de la FLASH donde se encuentran las etiquetas Mensaje32 y Mensaje33.

movlw puede cargar un valor entre 0x00 y 0xff

pero...estas cargando en W un valor superior al maximo permitido(0xFF). Esto sucede porque las etiquetas Mensaje32 y Mensaje33 estan ubicadas mas alla de la posicion 0xFF de la memoria FLASH(que es donde se guardan y desde donde se ejecutan las instrucciones)

Ademas, no se cual es tu intencion...pero lo que estas haciendo esta seguramente mal.

Minimamente para tomar los valores de la tablas deberian ser asi:

Código: ASM
  1. Mensaje32       addwf   PCL,F
  2.                 DT      "Salidas ON", 0x00
  3. Mensaje33       addwf   PCL,F
  4.                 DT      "Salidas OFF", 0x00


Lo que deduzco que a la vez, vas a tener el mismo error que comentamos antes. Todas las tablas(estas son tablas) deberian tratar de ubicarse dentro de las primeras 256 posiciones de la flash.
Si desistis de hacer esto, entonces, vas a tener que llamarlas asi:

Ejemplo:

Código: ASM
  1. clrf            CONTADOR
  2. SigueProximoValor       pageselw        Mensaje32
  3.                         movwf           PCLATH
  4.                         movf            CONTADOR,W
  5.                         call            Mensaje32
  6.                         movwf           TEMP
  7.                         xorlw           0x00
  8.                         btfsc           STATUS,Z
  9.                         goto            TerminoTabla
  10.  
  11.                         movf            TEMP,w
  12.                         call            RutinaEnvioALCD
  13.                         incf            CONTADOR,F
  14.                         goto            SigueProximoValor

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Rutina LCD 4 Bits
« Respuesta #55 en: 06 de Julio de 2006, 11:10:42 »
BrunoF, pero como ubico dentro de las primeras 256 posiciones de la flash las tablas?

Mira, al principio puse las tablas como me indicaste, y son tal que así:
Código: [Seleccionar]
Mensajes


addwf PCL,F
Mensaje0 DT "  XXXXXXX", 0x00
Mensaje1 DT " XXXXXXX", 0x00
Mensaje2 DT "XXXXXXX", 0x00
Mensaje3 DT "XXXXXXXXXXXX", 0x00
Mensaje4 DT "XXXXXXXXX", 0x00
Mensaje5
Mensaje6
Mensaje7
Mensaje8
Mensaje9
Mensaje10
Mensaje11
Mensaje12
Mensaje13
.
.
.
.
.
Mensaje32 DT "Salidas ON", 0x00
Mensaje33 DT "Salidas OFF", 0x00
Mensaje34 DT"Activacion aut.",0x00
Mensaje35 DT"   salidas", 0x00

Finmensajes


He resumido la tabla, pero vá desde Mensaje1 a Mensaje35.

Pero puede que aún tenga que poner 5 o 6 mensajes más...

Tu lo tienes muy claro, pero yo esque soy novato, y no sé como hacer para poder escribir mas mensajes...



Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Rutina LCD 4 Bits
« Respuesta #56 en: 06 de Julio de 2006, 11:37:56 »
He resumido la tabla, pero vá desde Mensaje1 a Mensaje35.

Pero puede que aún tenga que poner 5 o 6 mensajes más...

Tu lo tienes muy claro, pero yo esque soy novato, y no sé como hacer para poder escribir mas mensajes...

picto a mi modo de verlo, te estas encerrando en que te resolvamos el problema.

Creo que te estamos guiando para que "aprendas a resolverlo solo" por más que te echemos una mano muy grande en la ayuda para lograr tu objetivo.

Te he preguntado qué es lo que no has entendido del datasheet que explica la lectura de tablas usando PCLATH! y no has respondido.

Entender eso , te dará la solución a tus problemas de poner N mensajes, por mas que san 200, pero si quieres seguir con prueba y error... te llevará 10 veces más tiempo hasta incluso tal vez no lo llegues a resolver nunca.

Ser novato no es pecado, pero si te dicen donde leer y qué es lo que tienes que entender para "comprender" la solución a tu problema y tu no lo haces, entonces estas yendo por el camino más largo.

Saludos




- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Rutina LCD 4 Bits
« Respuesta #57 en: 06 de Julio de 2006, 12:01:41 »
Hola picto.
Bueno, pero 35 mensajes no te van a entrar en las 256 primeras posiciones de la FLASH. Probablemente ocupen mucho mas.

Cada MensajeXX deberia contener la instruccion addwf PCL,F. No solamente al principio.

Bueno, en realidad es bastante dificil ubicarte las tablas asi sin saber cuanto ocupa tu programa, el pic que estas usando,etc.

Podes escribir tantos mensajes como memoria FLASH tengas. Es la unica limitacion, seguida de un par mas de menor jerarquia.

El problema con estos PICs y las tablas es que cuando haces la llamada a una tabla, el valor del PCLATH no se setea. Por lo tanto, si no cargas manualmente el valor correcto en el registro PCLATH, cuando llamas a la tabla y se ejecuta el addwf PCL,F el PIC se redirecciona a la primera parte de la FLASH, produciendo lo que puede parecer un RESET(y no lo es).

Si estas usando un 16F87XX entonces tendras, por lo menos, 2KWord de FLASH.Esto es decir. 2048 instrucciones que puedes grabar en la memoria FLASH.

Ahora, la ley es simple. En tu caso tenes demasiadas tablas, lo que hace imposible que entren todas en las primeras 256 lineas de la FLASH.Entonces hay que recurrir a setear el valor correcto del registro PCLATH antes de llamar a cada tabla.
Otra cosa  tener en cuenta es que una tabla no debe, para facilitar las cosas, NUNCA cruzar dos paginas.

Primero vamos a ubicar manualmente las tablas dentro de la FLASH para que no cruce ninguna dos paginas.

Con paginas me refiero a segmentos de 256 palabras de memoria flash, entonces en un 16F877A tendriamos esto:

primer pagina banco cero: 0x000 a 0x0FF
segunda pagina banco cero: 0x100 a 0x1FF
tercer pagina banco cero: 0x200 a 0x2FF
cuarta pagina banco cero: 0x300 a 0x3FF

y asi seguiria con los restantes 3 bancos del 16F877A...

Ahora, voy a suponer que tu codigo(sin contar las tablas de los mensajes) no llega mas alla de la posicion 0x1FF de la FLASH. Si llega a ocupar mas, vas a obtener probablemente una gran tanda de Advertencias del ensamblador diciendo que se han sobreescrito posiciones de la FLASH. Por ahora, supongamos que no sucedera.

Ubica las tablas asi:
Primero, indicamos con un vector, la posicion donde comenzaremos a ponerlas:

Código: ASM
  1. ORG 0x200       ;<- Estamos diciendole al ensamblador que lo que ponga debajo de esto se va a grabar a partir de la posicion 0x200 de la memoria FLASH del pic. Es decir, al inicio del tercer pagina del banco cero
  2.  
  3. ;Inmediatamente debajo de eso, ubicaremos la mitad de los mensajes de la siguiente manera:
  4.  
  5. Mensajes
  6.  
  7. Mensaje0        addwf   PCL,F
  8.                 DT  "XXXXXXX",0x00
  9.  
  10. Mensaje1        addwf   PCL,F
  11.                 DT  "XXXXXXX",0x00
  12.  
  13. Mensaje2        addwf   PCL,F
  14.                 DT  "XXXXXXX",0x00
  15.  
  16. ;...y asi siguen
  17.  
  18. Mensaje15       addwf   PCL,F
  19.                 DT  "XXXXXXX",0x00
  20.  
  21. Mensaje16       addwf   PCL,F
  22.                 DT  "XXXXXXX",0x00
  23.  
  24. ;luego, como precaucion, cambiaremos nuevamente de pagina para evitar que alguna tabla cruce desde la pagina 3 a la 4.
  25.  
  26.                 ORG     0x300   ;Indicando que todo lo que pongamos debajo de esto se grabra partiendo de la posicion 0x300 de la memoria FLASH.
  27.  
  28.  
  29. Mensaje17       addwf   PCL,F
  30.                 DT  "XXXXXXX",0x00
  31.  
  32. Mensaje18       addwf   PCL,F
  33.                 DT  "XXXXXXX",0x00
  34.  
  35. Mensaje19       addwf   PCL,F
  36.                 DT  "XXXXXXX",0x00
  37.  
  38. ;...y asi siguen
  39.  
  40. Mensaje34       addwf   PCL,F
  41.                 DT      "Activacion aut.",0x00
  42.  
  43. Mensaje35       addwf   PCL,F
  44.                 DT      "   salidas", 0x00
  45.  
  46. Finmensajes


Y ahora, en lugar de llamar a las tablas como venias seguramente haciendo, es decir asi:
Ejemplo:

movf RECORRE,W
call  Mensaje16

Hacelo asi:
pageselw  Mensaje16
movwf PCLATH
movf RECORRE,W
call Mensaje16

Asi cargamos manualmente el PCLATH antes de llamar a una tabla.

Espero estes un poquitin mas orientado.
Saludos.
« Última modificación: 06 de Julio de 2006, 12:03:12 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Rutina LCD 4 Bits
« Respuesta #58 en: 06 de Julio de 2006, 12:13:55 »
BrunoF, gracias por el interes y la ayuda... no voy a preguntaros más cosas porque entiendo que la gente se canse de explicar las cosas muchas veces...

Voy a leerme de cabo a rabo tu explicación y a ver si yo solo soy capaz de hacerlo funcionar.
El problema es entender lo que estoy haciendo exactamente. Yo no tengo ni idea... se lo mínimo que vosotros me habeis explicado y os lo agradezco. Pero estando solo sin ayuda, es muy complicado entender ciertas cosas...

Es como si un mecánico me dice... a tu coche le tienes que cambiar la correa de distribución... vale... pero que es la correa? Donde está? me entendeis?

Bueno, voy a ponerme manos a la obra a ver si saco algo en claro.

BrunoF, como aprendiste todo esto?

Saludos.

maunix, perdoname  :?

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Rutina LCD 4 Bits
« Respuesta #59 en: 06 de Julio de 2006, 12:41:45 »
Hola picto. No me molesta explicar. Pasa que este tema es bastante delicado,largo y confuso.Si tenes MSN fijate en mi perfil que figura mi mail, agregame y te lo explico x ahi que va a ser mas rapido.
A los PICs los aprendi solito. Mirando codigo ajeno y leyendo, leyendo muchos datasheets. Pero nadie me explico nada. Excepto mi gran maestro Peter Jakab (www.jap.hu) quien me oriento con un par de dudas de novato.

Programar en ASM implica irremediablemente conocer el Hardware de un PIC al 100%, cosa que quienes programan en lenguajes de mas alto nivel no tienen obligacion de conocer(y muchos no conocen absolutamente nada pero programan y funcionan).
Fijate sino,por ejemplo, lo facil que es escribir en una memoria I2C programando en C, mientras que yo pa lograrlo he sudado 3 dias enteros...

Ahora, si hablamos de programacion....pues es lo que he estudiado en la Universidad.

Bueno, seguimos x MSN este tema si te parece. Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.