Tu sintaxis la sacas del propio datasheet:
MOVF f,d,a
MOVFF fs,fd
CALL k,s
Es decir en el set de instrucciones tenes tu sintaxis, como funcionan cada una esta explicado mas adelante de las tablas de instrucciones, los problemas que tenes vos hasta ahora incluyeron:
- No conocer donde comienza la memoria de datos, por eso usas 0x20 y no 0x00, es decir no conoces como esta formada la memoria de datos y no conoces las formas de acceso al mismo. Explicado en el datasheet. O tal ves tenes un conocimiento vago de lo que es CBLOCK
- No aplicaste antes lo de guardar el contexto en una interrupcion, algo explicado en el datasheet e incluso te da el codigo, ademas en el datasheet dice que cuando entra una interrupcion se guardan y que podes recuperarlo con RETFIE, FAST. Y que si estas usando las prioridades en el unico que lo podes usar es en el de alta prioridad. Todo esta en el datasheet asi como te lo dije. ( Aunque bueno este era el codigo copiado )
- La explicacion del timer, esta en el datasheet y ahi dice claramente cuando se actualiza. Yo lo lei de ahi y lo traje aca.
- Intentaste implementar el guardar el contexto de la interrupcion a medias. Como que desconociendo que hace el RETFIE, FAST y que por ahi te lleva a dudar de si estas interiorizado con las interrupciones.
- Tenias una tabla en el datasheet para 19200 baudios y arriba decia que era para BGRH = 1, tambien esta explicado para que sirve este bit, y las formulas que dan.
- Lo del registro RCREG que limpia el flag, tambien esta explicado en el modulo de la UART en el datasheet.
- Finalmente esto:
btfsc Ban_CD ; Se Verifica el estado para indicar que
Retfie FAST
Implica que no conoces las instrucciones, o no conoces como es el flujo de programa cuando una interrupcion, ya que si eso saltaba jamas se iba a ejecutar un RETFIE, y encima es como si se reseteara el micro. ASM es muy simple, es una instruccion tras otra. Y tenes que seguir esa logica.
Resumiendo, tus mayores problemas fueron por no conocer el micro al no leer el datasheet. Luego tenes este ultimo problema que puede haber sido por desconocimiento de como funciona una interrupcion.
Lo que si podes aprender de libros/ejemplos muchas veces es nuevos metodos para hacer ciertas cosas, por ejemplo usar tablas en flash, leerlas, Saltos computados, y miles mas.
Pero hasta ahora lo que te enfrentaste es conocimiento del datasheet y que hacen las funciones, lo cual si no las conoces todas tenes que pensar que queres hacer y fijarte cual se adapta mejor para lo que pensar hacer.
Gracias De nuevo................es queno consigo informacion para programar estos pic en asm consigo mas que todo el C, estoy dando mis primeros pasos con los 18F............veo que tendreque emigrar al C
Tenes que notar una diferencia, ASM te lleva muchas lineas para hacer tal ves algo simple, pero con gran ingenio podes sacarle todo el jugo al micro, creo que muy pocas veces te vas a enfrentar con poca flash, ademas presenta 2 problemas grandes:
- Portabilidad, se puede salvar un poco dentro de la familia de micro.
- Conocimiento del micro
Es necesario conocer a fondo el micro, instrucciones, como se manejan, ciclos, cuanto ocupan, etc. Y cuando queres pasar algo de PIC16 a PIC18 es un poco de problema, ya que tenes que cambiar direcciones, formas de acceso etc.
C por el contrario hace algunas cosas faciles, te abstrae de otras, ocupa mas espacio, pero es todo un lenguaje nuevo. Y me refiero a TODO un lenguaje nuevo. Cuesta al comienzo pero rinde frutos. Lo bueno es que si diseñaste por ejemplo un codigo para algo que es enteramente C (ningun funcion rara del compilador), podes llevarlo a cualquier micro por mas que no sea de Microchip y te va a funcionar (siempre tomando unos recaudos suficentes de no incluir nada pertenecientes al micro ). Y no necesitas preocuparte por si la memoria esta dividida en bancos, donde ubicar las variables etc. Eso lo hace el compilador. Ejemplo creo una variable y le quiero asignar un valor 10.
variable = 10;
En cambio en ASM tengo que pensar que primero tengo que cargar W con 10 para poder llevar ese 10 al registro, y ademas tengo que pensar donde esta ubicado, es decir en que banco. Y ni hablar de los saltos.
EDIT:La mayoria de las cosas que te dije es por que lei el datasheet. Intentando saber como es que lo hace.
Incluso a preguntas que haces vos o hacen otros, tengo que releerlo por que no me acuerdo.
Y agradece que no te metiste con PIC24/dsPIC en ASM por que ahi cambia mucho mas.