Bueno para los que no conozcan de electrónica este ASM es un poco diferente al que conocemos común mente como FASM, NASM, MASM y TASM, este ASM esta hecho para procesadores de la compañía microchip que nos provee este microcontrolador PIC, el código esta hecho para el 16F84A pero podría funcionar perfectamente en otros microcontroladores de gama media.

Lo que hace el código siguiente es mostrar un numero en la pantalla de 7 segmentos dependiendo de el swich que se levante, para esto se necesitan 3 switch conectados a tierra y unas resistencias (yo las puse de 10k) que van a VCC usando la inversa es decir cuando se levante el switch habrá corriente y cuando este abajo no habrá corriente, ustedes pueden modificarlo y hacerlo de forma directa lo interesante es el código...

Agradecimientos especiales a Konanxp

Código: Seleccionar todo

    LISTP=16F84A
        #INCLUDE <P16F84A.INC>
            RADIX HEX

    AUXILIAR    EQU 0X0C
    CONTADOR    EQU 0X0D

        ORG 0
        GOTO INICIO
        ORG 5


    INICIO  BSF STATUS,RP0  ;NOS PASAMOS AL BANCO 1
            MOVLW B'00000010'
            MOVWF TRISB
            MOVLW B'00111'    ;CONFIGURAMOS 3 PUERTOSA ENTRADA
            MOVWF TRISA        ;APLICAMOS LA CONFIGURACION AL PUERTO A
            BCF STATUS,RP0    ;NOS PASAMOS AL BANCO 0

    BORRAR     MOVLW B'11111111'
            MOVWF PORTB
    SEGUIR  MOVLW B'00001'    ;CARGAMOS EL PUERTO A EN W 
            XORWF PORTA        ;COMPARAMOS W CON EL PUERTOA (IF W == PUERTOA)
            BTFSS STATUS,Z  ;RESULTADO DEL FLAG Z (IF W==PUERTOA THEN Z=0 ELSE Z=1)
            GOTO PROBAR2    ;SI Z ES IGUAL A 1 ENTONCES VAMOS A SEGUIR
            MOVLW B'11110010';DIBUJAMOS EL 1
            MOVWF PORTB        ;CARGAMOS W AL PUERTO B
            GOTO SEGUIR
    PROBAR2    MOVLW B'00010'
            XORWF PORTA        ;COMPARAMOS W CON EL PUERTOA (IF W == PUERTOA)
            BTFSS STATUS,Z  ;RESULTADO DEL FLAG Z (IF W==PUERTOA THEN Z=0 ELSE Z=1)
            GOTO PROBAR3    ;SI Z ES IGUAL A 1 ENTONCES VAMOS A SEGUIR
            MOVLW B'01001000';DIBUJAMOS EL 2
            MOVWF PORTB   
            GOTO SEGUIR
    PROBAR3    MOVLW B'00100'
            XORWF PORTA        ;COMPARAMOS W CON EL PUERTOA (IF W == PUERTOA)
            BTFSS STATUS,Z  ;RESULTADO DEL FLAG Z (IF W==PUERTOA THEN Z=0 ELSE Z=1)
            GOTO BORRAR        ;SI Z ES IGUAL A 1 ENTONCES VAMOS A SEGUIR
            MOVLW B'01100000';DIBUJAMOS EL 3
            MOVWF PORTB        ;CARGAMOS W AL PUERTO B
            GOTO SEGUIR        ;NOTA 0=ENCENDIDO 1=APAGADO

        END
//mHmm..
yo me acuerdo lo dificil que es dividir y multiplicar con eso
tenias que hacer sumas y restas repetitivas y controlar el acarrero. porque el pic viene sin MULTIPLICACION o DIVISION.
ESTO SI QUE ES ASEMBLER SEÑORES ES CASI PROGRAMAR CON UNOS Y CEROS.
que recuerdos del PIC se me pinta un lagrimon jajaja
saludos!
No hay éxito como el fracaso, pero el fracaso no es ningun éxito...
leos_79 escribió:yo me acuerdo lo dificil que es dividir y multiplicar con eso
tenias que hacer sumas y restas repetitivas y controlar el acarrero. porque el pic viene sin MULTIPLICACION o DIVISION.
ESTO SI QUE ES ASEMBLER SEÑORES ES CASI PROGRAMAR CON UNOS Y CEROS.
que recuerdos del PIC se me pinta un lagrimon jajaja
saludos!
Toda la razón acá me tengo que líar con bucles y bucles, por ejemplo para crear un Sleep de 1 segundo con un cristal de 4mhz tengo que crear un bucle enorme usando el Timer 0 o TMR0 xD pero no cabe duda que es muy bonito este tipo de programar.
//mHmm..
te recomiendo que uses el electronic workbench para hacer las pruebas, es como estar en tu casa con todas las plaquetas pero desde la pc.
podes cargar un programa en el pic "virtual" y ejecutarlo desde ahi, conectar el pic a 12 v , poner lerds a la salida, es genial.
claro recuerdo que para sacar uno de los tiempos habia que hacer 1/4mhz y eso dividirlo por 4 puede ser?
y ahi obtenias el tiempo de instruccion y bueno a partir de ahi hacias ciclos para retardar el proceso.
No hay éxito como el fracaso, pero el fracaso no es ningun éxito...
Haha pues sí de hecho lo tengo ya instalado en mi PC, si no me equivoco para simular el circuito el workbench trae el Multisim con ese simulo el circuito antes de montarlo en la vida real xD lo malo es que no encontre servomotores en el multisim porque queria trabajar con ellos voy a tener que experimentar con los de la vida real haha :P y si era 1/4 y sacabas los ciclos de reloj y eso xP
//mHmm..
Imagen

Hola compañeros, me alegra ver que hay cierto interés por el mundo binario puro y duro.

Linkgl, se que tienes algunos problemas con la simulación de servos, el Multisims es un gran programa de simulación electrónica pero es muy posible que no te permita simular esta clase de componentes.

La solución es :

ISIS PROTEUS , el mejor software de simulación que conozco.

Akí te dejo el regalito para tu cumple compañero. Fuiste la primera persona que me abrió su puerta en Indetectables y eso no se me olvida.

[Enlace externo eliminado para invitados]

En este video puedes ver un servo simulado con el programa. La simulación de pics también es acojonante.

[Enlace externo eliminado para invitados]

Y en este otro, un servomotor por dentro, también una pasada.

[Enlace externo eliminado para invitados]

Y aquí un video demostración de una simulación de un servo controlado por el puerto rs-232 también usando proteus.

[Enlace externo eliminado para invitados]

El programa no es fácil de manejar, puedes encontrar algúnos videotutoriales en Illasaron

[Enlace externo eliminado para invitados]

Mejor mira esta web:

[Enlace externo eliminado para invitados]

El creador: Germán Tojeiro, profesor de sistemas electronicos en el instituto MONTE NEME de Carballo de la Coruña.

Tiene un libro que tiene muy buena pinta:

[Enlace externo eliminado para invitados]

Y baratito

Llevo tiempo sin tocarlo, pero me están entrando unas ganicas de volver a meterle mano....

Espero que te sirvan de orientación y ayuda. Así no te gastas las pelas!!!!

Un abrazo.

AAAA y no puede faltar un buen tuto de como funciona un servo, si me necesitas ya sabes donde estoy.

[Enlace externo eliminado para invitados]
Última edición por konanxp el 24 Feb 2011, 21:38, editado 2 veces en total.
Imagen
leos_79 escribió:yo me acuerdo lo dificil que es dividir y multiplicar con eso
tenias que hacer sumas y restas repetitivas y controlar el acarrero. porque el pic viene sin MULTIPLICACION o DIVISION.
ESTO SI QUE ES ASEMBLER SEÑORES ES CASI PROGRAMAR CON UNOS Y CEROS.
que recuerdos del PIC se me pinta un lagrimon jajaja
saludos!
Creo que tengo unas funciones muy guapas hechas en ensamblador para hacer todas esas cosas que comentas, si estas muy interesado podría buscarlas por el baúl de los recuerdos. Recuerdo que facilitaban mucho la programación, si es cierto que lleva bastante trabajo hacer una simple multiplicación, pero aprovechas al máximo los recursos del sistema, aunque hoy en día con los micros que hay eso no es tan importante. También puedes programar en C los PICs.

Un saludo.
Imagen
Como siempre te lo curras konanxp siempre ayudando a otros es lo que hace falta en indetectables gente como tú! Gracias por los enlaces sin duda ya los estoy mirando saludos!.
//mHmm..
gracias konanxp , sisi ya habia visto un poco de c con eso tmb, pero ya estoy retirado de los microchips por el momento.
De hecho la ultima vez que toque un pic estaba en el secundario, hice un juego con el mismo, con niveles d dificultad y vidas jajaja
con pulsadores y leds que tiempos :D
No hay éxito como el fracaso, pero el fracaso no es ningun éxito...
Responder

Volver a “Otros lenguajes”