Lenguaje ensamblador para PIC desde 0

Excelente trabajo!. Me venia cabeceando con mil cosas que no lograba comprender y con este tutorial se fue aclarando y aclarando.
Hay algo que aun no comprendo.
Con las operaciones de SUBxx y el resultado es negativo comprendo lo del acarreo, pero el valor que adopta el registro como es?
Lo pongo en un ejemplo
Si W= .10

SUBLW .5

Cuanto vale W luego de la operacion? W=.0 ó W=.5 ó W=.250? o como lo calcula?

Perdon por la molestia
 
Con las operaciones de SUBxx y el resultado es negativo comprendo lo del acarreo, pero el valor que adopta el registro como es?
Lo pongo en un ejemplo
Si W= .10

SUBLW .5

Cuanto vale W luego de la operacion? W=.0 ó W=.5 ó W=.250? o como lo calcula?

Perdon por la molestia
No es ninguna molestia.

El .10, no es con coma, si no quiere decir que el valor es decimal, o sea, en la forma en que nosotros escribimos los números (con base en 10).

Si estubiera expresado como W = 0x10, sería 10 en hexadecimal, y en decimal corresponde 15

¿Se entiende?
 
Última edición por un moderador:
Hola, si
W=.10 y haces
SUBLW .5
es lo mismo que decir W=5-10 ya que W siempre es el sustraendo, así que el resultado te da -5 teniendo en cuenta que el acarreo se pone en 0 después de esta operación.
 
También espero, porque la versión portable a PDF está muy bien...

Saludo.
 

Adjuntos

  • asm_desde_cero_116_123.zip
    853.7 KB · Visitas: 797
saludos

bueno primero felicitarlos por el gran trabajo que han estado realizando tanto a Leon Elec y Meta.

El caso es que hace tiempo aprendía a escribir código en ensamblador usando MPLab, y pues ahora que tengo tempo libre me puse a leer este tema ASM desde 0, para recordar, el caso es que me surgió una duda y es la siguiente.

veo que al comenzar un código escriben la siguiente linea

Código:
LIST P=16F877A
INCLUDE <P16F877A.INC>

en la cual no entiendo bien porque? se usa esto de LIST P=16F877A, yo solamente ponía lo de INCLUDE "P16F877A.INC"

Por ejemplo el siguiente código

Código:
              ;código para el PIC 16F84A
              ;realiza lo operación lógica Xor del puerto A con el numero Hex 13
                 Include "p16f84a.inc"
                 org h'00'
                 bsf STATUS,5       ;se pone un 1 en el bit 5 del status para elegir el banco 1
                 movlw h'1F'         ;cargamos a w con el 1f
                 movwf TRISA       ;se carga trisA 1F para que puerto A sea de entrada
                 movlw h'00'	     ;cargamos a W con 00
                 movwf TRISB       ;se manda el 00 al TrisB para que el puerto B sean salidas
                 bcf STATUS,5       ;cambiamos al banco 0 poniendo un 0 en el bit 5 del Status
    	         movf PORTA,0      ;leemos el puerto A y cargamos en W
                 xorlw h'13'	     ;realiza la operación lógica
                 movwf PORTB      ;Movemos el resultado al PuertoB
                  end

Esto lo note puesto que quise simular paso a paso con Proteus ISIS pero me marca error, pues no incluyo el LIST; aunque el código que les muestro si lo compila y simula bien en MPLAB IDE v7.20.

el caso es : como debo cambiar el programa anterior para incluirle lo de LIST y simularlo paso a paso con proteus v7.4, ya he probado otros códigos que baje del Internet que incluyen el LIST y si simula bien en proteus, así que no creo que sea la instalación del software.

espero me puedan responder y sigan adelante con este fantástico trabajo.
 
saludos

gracias por responder, y por la sugerencia meta

y si ya pude solucionar mi problema (hasta el momento) solamente que de otra manera; Lo que requería era ir viendo la ejecución de cada linea de código conforme aparecían cambios de estado en el circuito dibujado en proteus es decir ejecutarlo paso a paso.

el problema se me presentaba desde un principio al querer utilizar la opción build All que se encuentra en la barra menú de proteus (source), pues marca muchos errores.

al estar buscando encontré la solución en el debugger directamente del MPLAB en el se dan varias opciones, la que solía utilizar era la MPLAB SIM, pero vi que también aparece habilitad la opción Proteus VSM , así que comencé a utilizarlo y me funciono para lo que necesitaba.

supongo que esto pasa por que se vinculan los programas MPLAB y proteus automáticamente con la instalación

bien pero pues aun tengo la duda de la linea LIST p=pic16fxxx

PD: vi un apartado donde hablan sobre un problema sobre la simulación con PIC, quizá les pueda servir esta solución y un moderador lo quiera mover para no volver copiar y pegar este mensaje en aquel post y que no aparezca repetido

suerT
 
hola cpmpas , como comente soy nuevo en eso de la progamacion de pics , quisiera que alguien me explique bien calro la intruccion btfsc y btfss , en que momento realiza el salto?
gracias por su colaboracion
att:mad:ndres
 
BTFSS y BTFSC realizan una prueba de bit y saltan una instruccion si el resultado es cero o uno (dependiendo de la instruccion que uses), por ejemplo digamos que tienes la localidad de memoria "prueba" cargada con un numero 0b00101001 (19h) si ejecutas el siguiente programa:

BTFSS prueba,3
goto bitnocero
goto bitcero

Como el bit 3 de prueba es 1, el PIC va a saltar la instruccion "goto bitnocero" y ejecutara la instruccion "gotobitcero" en cambio si el bit 3 fuera cero el PIC ejecutara la instruccion "goto bitnocero"

Exactamente lo contrario ocurriria si usaras BTFSC... en ese caso la siguiente instruccion SOLO se ejecutara si el bit que pruebes del registro es igual a uno
 
Pues eso aquí les dejo 37 programas para ensamblador.
Algunos son muy sencillos, algunos muy complejos, y otros simplemente no sirven para nada.

Pertenecen al disco que viene con el sistema de desarrollo "Pic laboratory", de la firma Microchip
Tengo información adicional que les puedo enviar en caso de que la soliciten.

Indice de programas

1. Simple manejo de las entradas y salidas
2. función lógica NOT
3. Decodificador combinacional
4. Simulación de una máquina de torneado
5. Simulación de una maniobra de taladrado
6. Simulación de máquina de envasar
7. Simulación de máquina de envasar mejorada
8. Juego de luces (chaser)
9. Interrupción del TMR0
10. Interrupción externa RB0/INT
11. El display de 7 segmentos
12. Decodificador BCD a 7 segmentos
13. Contador decimal "UP/DOWN"
14. EL TMR0 como contador de pulsos externos
15. La memoria EEPROM; La máquina "su turno"
16. Introducción al manejo de la pantalla LCD
17. Maejo del LCD
18. Visualizando mensajes en el LCD
19. El teclado
20. Teclado y LCD
21. Interrupción por cambiode estado
22. Interrupción del TMR1 cada cierto tiempo
23. El TMR1 como contador de evemtos externos
24. El TMR1 como divisor de frecuencia
25. Frecuencímetro
26. Interrupción periódica del TMR2
27. El TMR2; temporizaciones ajustables
28. Capturas con el módulo CCP1, midiendo períodos
29. Capturas con el módulo CCP1, midiendo la anchura de un pulso
30. Capturas con el módulo CCP1, midiendo el tiempo entre pulsos
31. Capturas con el módulo CCP1, contador de eventos ajustables
32. Modulación de la anchura de pulsos (PWM) mediante el módulo CCP1
33. PWM mediante el módulo CCP1, Variando la anchura
34. El convertidor ADC
35. Modulación PWM, mediante el convertidor ADC
36. El USART, transmitiendo caracteres
37. El USART, transmisión/recepción de caracteres

Notas:

-Todos los programas vienen en .asm
-Algunos de los programas sólo pueden usarse con el "PIC laboratory"
-Para ser usados con otro entrenador los programas deben ser modificados.
-La explicación detallada del programa está escrita al principio de este.
 

Adjuntos

  • programas_de_ejemplo_175.rar
    50.7 KB · Visitas: 1,151
es exactamente lo mismo... la nota de aplicacion aplica para cualquier micro de la serie 16 o 17.... incluso con adaptaciones menores cualquiera de microchip
 
antes que nada quisiera agradecerles por el tiempo que invierten para compartir sus conocimientos!!!!
Cuando me propuse a programar PICS comence aprendiendo ASM del libro de ANGULO conocidos por muchos comence como todos con el famoso programa de prender y apagar un LED cosa que me resulta toda una lucha :LOL: pero al final venci y asi fue subiendo la comp`lejidad de los programas hasta que un dia me propusieron hacer un programa muy complejo con transmision serial, usando el ADC y asi practicamente exprimiendo al 16F877a y he ahi comenzo mi pesadilla que acontinuacion les comento.
Empece con el soft todo bien hasta que empece a uasr los temporizadores tmr1, tmr2, tmr0 los cuales usaba para muchas tareas a la vez que paso??
Era como que al micro le confundia me explico mejor, recibia una trama de datos por el puerto serial entonces comenzaba a correr el TMR0 para comparar y ver que es lo que habia recibido para tomar una descision que pasaba, si el TMR1 desbordaba cuanbdo se cumplia la interrupcion de TMR0 muchas veces no todas el
PIC hacia cualquier otra cosa es como que no le gustaba eso!!! pero ustedes me diran las banderas de interrupcion GIE, ...etc estaban correctas? y les contesto que siiiiii!!!! Hacia mi debuger con el siumulador de micro PIC SIMULATOR IDE lo cual muestra el estado de cada registro y bits que maneja al pic asi fui puliendo mi soft pero me di cuenta de que tal programa de simulador no era tan bueno porque al poner el pic en el circuito suponiendo claro que el soft del micro funcionaba como ya queria segun el simulador NO FUNCIONABA!!!!! en realidad al final tuve que borrar todo el soft hacer mi debugger en mi circuito cosa que casi me mato:LOL: imaginense todo el trabajo ahora yo pregnto a los entendidos!!! Que puede estar mal? La forma que encare las lineas? Saben como termino esta tragedia pero no el fin de mi pesadilla les cuento!!! Compre el niple programa que sirve para proframar micro de la gama 16FXXX, me soluiciono en parte mi problema ya que funciono mi soft pero........
Me acarreo otro problemas
1ero) Para soft muy largos y en ciertas formas complicados no genera todo el ASM por lo tanto tuve que revisar linea a linea todo hasta encontrar el error
2do)) No da la libertad de manejar a gusto como lo hace el ASM
3ero) No sirve para la paginacion de memorias otro dia les comentos por detalles que me sucedio pero rapidamente les digo que descompone y se vuelve loco el niple cuando se llena la pagina 0 de la memoria y se debe pasar a la pagina 1(n)(n)(n)(n)(n) Mi pregunta nuevamente es QUE puedo hacer para solucionar mi problema que pautas debo seguir algun suitio que me puedan orientar ya que Leon ELEC escribio:
******************************************************************
El CP, hará esas tareas sin negarce y lo hará fielmente a lo que está escrito. Por lo que, si hace una tarea mal, es porque le pusimos una o más instrucciones mal
******************************************************************

Yo se que en alguna parte algo esta mal como darme cuenta de eso ;)
desde ya agradecido por cualquier ayuda:)
 
Ariel, lamento no poder ayudarte porque recien hice la plaquetita pra programar un pic 16f84a... si siquiera hice la prueba del led porque me quedo una duda que para uds debe ser simple pero yo no estoy seguro...el valor del registro "w" es el valor que toman las salidas del pic?
no se si el tutorial lo decia en alguna parte pero no me cerraba ese tema. hace creo que 3hs que estoy leyendo esto y entendi bastante solo me quedaria saber eso, con el tutorial se como cambiar los valores del registro pero que hago con eso? donde van a parar??


fuera de eso quiero agradecerles a loen elec y a meta por su ayuda, es la primer guia que encuentro en internet de la que entendi porque todas hacen los programas como si todo el mundo naciera sabiendo:enfadado:

les doy un merecido:aplauso::aplauso::aplauso::aplauso::aplauso:

la verdad que son de lo mejor!!

gracias!!!
 
Atrás
Arriba