Binario en el asm de los PIC

Hola:

Quiero saber si existe una tabla o lista de las intrucciones del asm del PIC16F84A por nombrar alguno, en código binario. Que se muestre en asm y al lado en binario.

Mi idea es hacer una máquina tipo de las de antes, programando solo en binario con interruptores y Leds.

Para que se hagan una idea. Imitar algo parecido a esto aquí abajo como en la época de los 70.

Altair%208800%20bis.jpg


Altari 8800 Computer.

Por lo que he visto, controla dirección de memoria del multiplexor, guarda datos en la RAM, lo pasa en la EEPROM para que no se pierda. Todo en binario como antaño, hasta tiene contadores. Todo esto sin usar ningún microcontrolador por medio. Hoy en día para que cueste más barato, con un microcontrolador basta. Mi idea es añadir instrucciones del asm del PIC16F84A, puede ser el PIC16F628A o el PIC16F88, da igual, hay que centrarse en alguno. Coger sus intrucciones, por ejemplo movf, saber su binario para introducirlo en la máquina con sus interruptores.


Saludos.
 
Pero para eso necesitas uno que funcione en modo microprocesador. Si la memoria de ejecución solo puede ser interna, programar eso son interruptores puede ser una locura...

 
Y asumiendo que se pueda hacer....lo vas a tirar a la mie@#€%&? !!
En la universidad teniamos que escribir en asm en un papel y al lado traducirlo a binario representado en hexadecimal. Y esos hexa los subiamos a la memoria del 8080 o del SCMP....prefiero olvidar el aborto que era eso...y asi rendi el examen final de Sistemas Digitales 2 en 1987.....y LPMQLP
 
Y asumiendo que se pueda hacer....lo vas a tirar a la mie@#€%&? !!
En la universidad teniamos que escribir en asm en un papel y al lado traducirlo a binario representado en hexadecimal. Y esos hexa los subiamos a la memoria del 8080 o del SCMP....prefiero olvidar el aborto que era eso...y asi rendi el examen final de Sistemas Digitales 2 en 1987.....y LPMQLP


ja ja ja ja tan bueno y cuando te equivocabas en un solo bite... ja ja ja ja ja


Ya en el tema, Yo alguna vez intente hacer algo parecido para unos alumnos que tenía y que crees?' les importo un pepin.... la gente nueva es minimalista (mínimo esfuerzo y ser más animal je je je) por eso ahora reina Arduino porque hacen cosas rápidas que se ven y funcionan rápido pero que sepan encontrar un error en un código o el porqué de un fallo...ahí si van perdidosssss
 
Última edición:
Pero para eso necesitas uno que funcione en modo microprocesador. Si la memoria de ejecución solo puede ser interna, programar eso son interruptores puede ser una locura...

He hehco una cerradura codificada, con una ALU, memoria RAM, lo más caro de todo, multiplexor, inversor, contador, 555, tenía qu ehacerlo todo en la protoboard. La protoboard lo tengo montado por ahí desde hace unos 20 años, ajjaj aajj ja. Como tengo experiencia en ese aspecto, me atrevo. En fin de cuentas, lo que quiero es un reto persona y curiosidad.

Con interruptores es más cómodo, ocura fue coger cables en la protoboard colocándolo en 5 V para luego dejarlo en 0V así con las direcciones del multiplexor. Siempre te te soltaba un cable y se rompía sin saberlo, una locura que nos entró a todos.

Y asumiendo que se pueda hacer....lo vas a tirar a la mie@#€%&? !!
En la universidad teniamos que escribir en asm en un papel y al lado traducirlo a binario representado en hexadecimal. Y esos hexa los subiamos a la memoria del 8080 o del SCMP....prefiero olvidar el aborto que era eso...y asi rendi el examen final de Sistemas Digitales 2 en 1987.....y LPMQLP

Lo guardaé como paño en oro, haré su cajita y un LCD 20x4. Para ver cuando introduzco en pantalla los comando en binario y se muestra en el display sus comandos. Viendo en Internet, los EE.UU. Lo están coleccionando, ejjejejeje, también en Alemania incluso hasta rusos como museos y probándolo, mirar por youtube. ;)

@@fdesergio Los alumnos que hay, la mayoría son peresozos, los curiosos y que realmente deseen aprender más se complican la vida, eso son los que van hacia delante pero son en minoría. ;)

Ya verás que curioso, a la vez tedioso cuando lo acabe y lo monte en su cajita. ;) No es lo mismo contarlo que verlo.

------------------------------------------------------------------------------------------------------------

Mi idea es, saber de una vez por todas, las instrucciones del asm de un PIC.
Instrucciones del PIC16F84A.
Set de instrucciones Microcontrolador PIC.
https://learn.mikroe.com/ebooks/microcontroladorespicbasic/chapter/lenguajes-de-programacion/

Preferiblemente prefiero en el fondo centrarme en los PIC16F88/886/887. Son los más modernos comparado con los PIC16F84A/876A/877A.

¿Hay algunalista que me diga estas instrucciones de asm a binario?

Tenemos este ejmplo en asm, no en binario.
Código:
; Por el Puerto B se obtiene el dato de las cinco líneas del Puerto A, al que está conectado
; un array de interruptores, sumándole el valor de una constante, por ejemplo 74.
; Es decir: (PORTB)=(PORTA)+CONSTANTE

; ZONA DE DATOS *********************************************************************

    LIST       P=16F84A            ; Procesador utilizado.
    INCLUDE  <P16F84A.INC>        ; Definición de algunos operandos utilizados.
    __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

CONSTANTE  EQU    d'74'            ; En sistema decimal se pone así.

; ZONA DE CÓDIGOS *******************************************************************

    ORG     0                    ; El programa comienza en la dirección 0.
Inicio
    bsf        STATUS,RP0            ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
    clrf    TRISB                ; Las líneas del Puerto B configuradas como salidas.
    movlw    b'00011111'            ; Las 5 líneas del Puerto A configuradas como entradas.
    movwf    TRISA
    bcf        STATUS,RP0            ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
Principal
    movf     PORTA,W                ; Carga el registro de datos del Puerto A en (W).
    addlw    CONSTANTE            ; (W) = (PORTA) + CONSTANTE. 
    movwf    PORTB                ; El contenido de W se deposita en el puerto de salida.
    goto     Principal            ; Crea un bucle cerrado e infinito.

    END                            ; Fin del programa.
Tenemos la instrucción en hexadecimal, por ejemplo: movlw

¿Cuál es su equivalente en binario?

Ahí está la cuestió, por ahora quiero una lista sobre ello y no se si existe dicha lista, no se que poner para buscar, no lo encuentro.

Por suerte hoy en día se usan simuladores y emuladores como el Proteus. Ahorras dinero., te aseguras para dar el paso en la protoboard directamente.

Mi idea crear un frontal físico, por ahora lo haré en el Proteus, programar en binario, ajjajajaja, no me voy a gasta componentes y luego fracase.


Tenía intención de hacerlo solo con los componentes que he nombrado arriba, es muy caro hacerlo así y hay que hacer pruebas por todas partes. Por eso pensé en una segunda posibilidad pero le quita atractivo, usar Arduino o Raspberry Pi para ahorrar costes, fabricación diseño, tiempo y dierno.

Cuando programe algo, se verá las intrucciones en el LCD 20x4. Por ejemplo, si pongo:

10101110

En el LCD o monitor o en un TV se muestre

movlw

Así sucesivamente.

Mi idea es crear una lista ejemplo.asm como indica el ejemplo de arriba de asm del PIC16F84A. Si uso la Raspberry Pi compila ese .asm a .hex, pero esto es otro tema. Por eso hay que tener las ideas de lo que se va hacer.

Cuando se pase el código compilado en .hex, lo pruebo en el PIC16F84A haber si funciona. Hablando si usamos una Raspberry Pi, ya que se puede instalar el MPLAB X y poder compilar, si usamos arduino, que cree el archivo, lo guarde en una Micro-SD y lo compilo en un ordenador convencional.

Antes que nada, encontrar un buen emulador del Altair para segurarse de como funciona bien.
http://www.autometer.de/unix4fun/z80pack/screenshots/altair.html
http://www.emutopia.com/index.php/d...y-items/3-downloads-emulators/310-altair-8800
http://www.classiccmp.org/altair32/Altair32links.htm
https://www.electronicsweekly.com/blogs/gadget-master/arduino/arduino-fires-altair-8800-2017-01/

Aquí han hecho un Altair 8080 clónico físico.
pcb.jpg


http://altairclone.com/details.htm

20070119112749.jpg

http://d.hatena.ne.jp/nearbridge/20070119/p1

Como dije arriba, quiero la lista de lo sbinarios de las instrucciones del asm de los PIC. ¿Existe esa lista?
No la encuentro.

Saludos.
 
Hola...De las 35 instrucciones básicas están en la pagina que pásate vos las conversiones a su valor binario y se llama CODIGO DE OPERACION(CODIGO OP). La mas fácil es NOP(NO OPERATION) que es %0000000xx00000. Ese tipo de PIC operan con palabras de 14bit.
El xx representa que es indefinido el valor que puede tomar en esa posición y no es relevante si es 1 o 0.
Todas las otras también están y si afectan o interactúan con algún registro, esta la posición que deber estar representada con la letra correspondiente.
Saludos.

Ric.
 
Gracias, lo había olvidado. ;)

59-1759266.png


58-1759262.png


http://ww1.microchip.com/downloads/en/devicedoc/35007c.pdf

Ahora me toca primero hacerlo en modo consola bajo C# como un emulador para probar, es decir, coger la instrucción MOVF que su binario es:

00001000

Ejemplo de esta instruccion.

MOVF PORTB, 1

Sería 00001000 dfffffff.

La parte de PORTB, 1. ¿Cómo se cuando son ceros o son unos?

El contenido del registro f se carga en el registro destino dependiendo del valor de d. Si d=0 el destino es el registro w, si d=1 el destino es el propio registro f. Esta instrucción permite verificar dicho registro ya que el flag Z queda afectado.

Así que la dfffffff, sería por ahora 1fffffff ya que es el destino.

Total por ahora:
00001000 1fffffff

Teniendo 00001000 1fffffff. ¿Cómo se que bit va en las f?

Saludos.
 
Última edición:
Hola, el tema es que una instrucción en ASM, tendrá una lista equivalente de microinstrucciones en binario. Y difiere según la arquitectura del procesador obviamente.
Por ejem. la instrucción ADD, cuándo se ejecuta, ocurre algo cómo ésto. Se llama al bus a cargar un dato precargado en un registro. Luego genera la dirección para cargar el siguiente dato en otro registro, luego los datos son sumados y dicho resultado vuelve al registro predeterminado, etc. Terminados todos éstos procesos, el procesador lee la sig. instrucción ASM, en la memoria de programa, y comienza una nueva gestión de microprocesos, para llevar a cabo ésta nueva instrucción, y cada uno de éstos procesos, se ejecuta por cada ciclo de reloj. Y no todas las instrucciones, consumen la misma cantidad de ciclos de reloj.
 
Última edición:
Hola:

Mi idea principal es al escribir en binario, me aparezca la instrucción, para eso la lista. Desde Arduino o un PIC hecho en C o asm, se encargue de traducir en binario a asm y lo muestre en pantalla.

Ahora mismo estoy haciendo un programa en C# modo consola que al introducir un numero binaro de 16 bits (se que para el PIC16F son 14 y para los 18F son 16 bits), muestre en pantalla dicha instrucción.

Al final debe aparecer todo esto en pantalla:
Código:
ORG     0                    ; El programa comienza en la dirección 0.
Inicio
    bsf        STATUS,RP0            ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
    clrf    TRISB                ; Las líneas del Puerto B configuradas como salidas.
    movlw    b'00011111'            ; Las 5 líneas del Puerto A configuradas como entradas.
    movwf    TRISA
    bcf        STATUS,RP0            ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
Principal
    movf     PORTA,W                ; Carga el registro de datos del Puerto A en (W).
    addlw    CONSTANTE            ; (W) = (PORTA) + CONSTANTE.
    movwf    PORTB                ; El contenido de W se deposita en el puerto de salida.
    goto     Principal            ; Crea un bucle cerrado e infinito.

    END                            ; Fin del programa.

Se que se puede hacer un desemsamblador o como se escriba tal como indica por aquí.
 
caray que idea tan absurda.
un pic no carga codigo de manera externa.

por que no usar un CPU un 6502 o un z80 super bien documentados no es tan dificil de armar en un protoboard.

le puedes cargar codigo instruccion a instuccion por suitches como la cpu que muestras en la imagen.
 
Yo es que no añoro esa época de la informática. No la viví pero si la inmediatamente siguiente, ensamblando a mano y tecleando con un teclado hexadecimal y display de siete segmentos, y tampoco la añoro en absoluto.
¡Menuda incomodidad!

 
Última edición:
era incomodo en mi escuela aun me toco armar el Z80 y escribir codigo en simulador, ver como se movian los registros como se movia el stack , armar en el proto con la extinta HY6116 y varios displays de 7 segmentos.

me aterrorizo tanto que me aterraban los PIC pero como vi que existia el lenguaje C y un micro ya esta todo ensamblado en un chip pues ya empeze a ver que no era dificil.
 
Es que eres un poco bastante muy terco.
no me aterra si arme un sistema basado en CPU como hobby use un 18f4550- USB para cargar datos a una Sram a manera de eeprom.

es entretenido si.

pero ya usar un PIC tratar de meterle las instrucciones de manera externa no creo que funcione pues las instrucciones las ejecuta de manera interna.
a lo mejor se me ocurre que metas las instrucciones externamente , las apiles en un array en a RAM.
una vez que se cargaron todas se escriban en la flash para que se puedan ejecutar a mi parecer es absurdo.

se me hace menos absurda la idea de hacer un sistema que si pueda leer instrucciones externamente digamos que las instrucciones las lea un micro que no sea PIC.

ami en lo personal no me gusta en ASM de los pic es muy limitado y hacer un programa complejo se hace redundante con los pobres nemonicos que tiene, a diferencia que un CPU como el Z80 que tiene muchisimos nemonicos y opcodes que con una sola instruccion haces lo que 10 con un PIC.

si se ASM no me gusta trabajar en ASM , prefiero otro legunaje , me es mas comodo un ASM de mas instrucciones que las limitadas 35 del PIC
 
pero ya usar un PIC tratar de meterle las instrucciones de manera externa no creo que funcione pues las instrucciones las ejecuta de manera interna.

Lo que quiero hacer exactamente, es poner binario y en el LCD aparezca algo así:

MOVF PORTB, F

MOVF H'0006', H'0001'

00001000 1 000 0110

una vez que se cargaron todas se escriban en la flash para que se puedan ejecutar a mi parecer es absurdo.

¿Quién ha dicho que sea como dices arriba?
AJjajajajajjaa.


se me hace menos absurda la idea de hacer un sistema que si pueda leer instrucciones externamente digamos que las instrucciones las lea un micro que no sea PIC.

PIC es lo que tengo ahora para hacer pruebas, y eso que hay época comprar el Z80.
http://es.rs-online.com/web/p/microprocesadores/6258801/

me es mas comodo un ASM de mas instrucciones que las limitadas 35 del PIC

Las limitadas 35 intrucciones de los PIC16F, más 14 instrucciones más de la serie mejorada del PIC16F1xxx, más las que tienes como mínimos unas 70 instrucciones de los PIC18F hablando PCI de 8 bits, no la haz nombrado.

Gracias a sus limitadas 35 intrucciones de los PIC, añadiendo su facilidad de uso y sencillo (como dicen muchos libros), ha vendido PIC a borbotones, es más, muchos ejemplos, y en ensamblador.

El asm lo quiero para hacer cosas sencillas, usando más bien tablas, tonterías sencillas, si es para complicarme la vida, pues el C, para eso está.

En cuanto a lo del binario para luego pasarlo a hex, lo que quiero hacer exactamente es eso, pasarlo de binario con conmutadores, en el LCD se muestra así:

MOVF PORTB, F

Cuando tenga todo, lo convierte en hex, algo así:
Código:
:020000040000FA
:1000000001288601831603178801890183160313CB
:100010008601FF30850083120313212005181A285A
:10002000612005181A280618172806141828061023
:10003000051C18280E280030A4002008A300272043
:1000400008000030A4004F202308A00008008312FD
:1000500003132408831203178D008312031323084C
:10006000831203178C000C158B1355308D00AA30AA
:100070008D008C148312031364000C1E3C280C1298
:10008000831603170C118312031323088316031717
:100090000C140C02031D272883120313080083127B
:1000A00003132408831203178D00831603170C14FF
:1000B000831203170C0883120313A3008312031384
:1000C0000800FF30A5001930A600A60B6528A50B77
:0400D0006328080099
:0400D40000340034C0
:02400E00E128A7
:02401000FF3E71
:00000001FF
De momento estoy haciendo pruebas solo con C# en modo consola. La cosa está verde aún, pero avanzando.

Esto es un hobby y experimentación, claro que habeindo un buen MPLAB X 3.65 que hay ahora está muy bien. Como en el pasado, mi época de estudianta programaba en binario en la protoboard, en esa época lo odiaba a muerte, ajaja aja jajajaja a, ahora lo añoro por la nostalgia, solo quiero ponerle interruptores con muchos LED. ;)
 
Con estos equipos aprendí ensamblador del 6502. No los añora nada.
MI-650B.jpg


Con un pic tienes varias cosas que averiguar; los opcodes no son de 8 sino de 12, 14 o 16 bits, asíq eu de algún modo los empaquetan en un .hex que es de 8 bits.

Me suena que en www.8052.com está descrito el formato, en su día hice un programa para autoprogramar la flash de un 89c51rd2, enviabas líneas de un .hex por el puerto serie y se programaba en la flash, luego si querías lo ejecutabas haciendo un salto indirecto.
Haberlo hecho con un teclado o interruptores hubiera sido posible.

Lo que pasa es que no se si algún pic tiene un modo IAP, me suena que si que hay, este modelo de '52 se podía autoreprogramar desde dentro de la aplicación de usuario.
 
Última edición:
Gracias a los PIC, la gente se unió a probar de que va este mundo.

Desde que vino Arduino y la Raspberry Pi, lo que me asombró ya no se trabaja o habla tanto en hacer cosas en ensablador, incluido los PIC, ahora la moda es lo que dije antes.

Arduino y Raspberry Pi.

Es lo que toca ahora. Y si quieres probar más de 35 intrccuiones de los PIC pues los AVR de Atmel que ahora pertenece a Microchip.

Para eso me tiro lor 8085 antes que el Z80, incluso al 8086 por no nombrar al 8088.

Lo que estád e moda o casi con los ARM. Los FPGA no se mete mucho la gente por falta de información y buenos libros, más que su dificultad que tanto alegan muchos.
 
Atrás
Arriba