PROGRAMANDO EN ASSEMBLY

in #mechatronic6 years ago (edited)

Aprovechando el hecho de que estoy retomando el camino de programar PIC en ensamblador, subiré mis proyectos y cualquier duda pueden comentarlo...

El dia de hoy les mostrare un sencillo programa que hace el control de un semaforo vial.

Primero y antes que nada, hay que conocer el datasheet del microcontrolador que vayamos a usar, en este caso será el pic16f84a del cual podremos conocer sus datos de esta hoja.

pic16f84a datasheet.pdf - [PIC16F84A Data Sheet] - SumatraPDF 01_02_2018 12_42_39 a. m..png

De la cual tomaremos los valores, para poder hacer configuraciones o guardar nuestras variables,...
Las variables se pueden guardar despues del registro H '0x0C' hasta el registro H'0x4F', esto para que no afecte a las configuraciones y queden en el banco de datos.

MPLAB IDE v8.88 01_02_2018 01_20_50 a. m..png

Empezamos, agregando una lista del pic que vayamos a usar, ahora bien, tecnicamente deberiamos configurar los fusibles del pic, así como el control de relog del oscilador y etc. Pero aquí, como será nuestra primera practica, simplemente lo vamos a simular.

Bien, una vez hayamos cargado la lista del pic a usar, declaramos nuestras variables a usar, esto siempre usando la instruccion EQU que será quien defina la variable en nuestro programa.
Aqui usaremos CONTADOR EQU 0x0C donde la variable CONTADOR sera definida en el registro H'0x0C'
de igual manera la variable CONTADOR2 y CONTADOR3

Más adelante se mira el inicio del programa definido por a instruccion ORG
que literalmente significa ORIGEN donde iniciará el ensamblaje.

La instruccion BSF H'03', 5 indica que iniciara la direccion 03, que si vemos en la hoja de datos es STATUS.
esto nos sirve para poder configurar banco de datos, cabe mencionar que el registro de estado o STATUS tiene muchas aplicaciones, pero esta vez servirá para algo sencillo.

Seguimos de la instruccion MOVLW B'00000000' y MOVWF H'06' Esto nos indica que en la direccion H'06' que es nuestro puerto B sean salidas. {''Con ceros maracamos salidas y con unos marcamos entradas''}
Finalmente cerramos el STATUS con la instruccion BCF H'03', 5

Bien, llegamos a lo que es el bucle del programa, donde se ejecutará nuestro ensamble.

Empezamos con una etiqueta, que en este caso se ha usado INICIO, seguida de la etiqueta ROJA que marca que será el bucle de nuestra luz roja en el semaforo, se usa la instruccion MOVLW B'00000001' MOVWF H'06' Que marca que en el puerto b pin 0 se accionara un uno, esto seguido de un llamado de rutina CALL DELAY, esto significa que la instruccion CALL llamará a la rutina con etiqueta DELAY

MPLAB IDE v8.88 01_02_2018 02_00_06 a. m..png

Una vez en la etiqueta DELAY, esta efectua los comandos MOVLW D'10' MOVWF CONTADOR Esto significa que en la variable contador se le asignará el valor 10 en decimal que en el registro guardara el dato 0x0A.
Luego la instruccion DECFSZ CONTADOR,1 con la etiqueta CONTAR desminuirá 1 en valor a la variable CONTADOR, despues la instruccion GOTO CONTAR llevará de vuelta a la etiqueta CONTAR, ciclando esta operación hasta la instruccion DEFSZ disminuya en 0 a la variable CONTADOR, de esta manera brincará la instruccion goto y pasará a la instruccion CALL AMARILLA....

Asi sucesivamente, y con esto tendremos terminado nuestro primer programa en ensamblador.

TRAFFIC - Proteus 8 Professional - Schematic Capture 01_02_2018 02_07_59 a. m..png

                                                                              REALMENTE ESPERO NO HABER SIDO MUY TEDIOSO, 
                                                                           PERO SIENDO EL PRIMER PROGRAMA QUERÍA EXPLICAR TODO A DETALLE
                                                                ESPERO LES HAYA GUSTADO Y SI DESEAN QUE SUBA UN CODIGO EN ESPECIAL, SOLO    
                                                                                                          COMENTEN
Sort:  

Hola @reonfi, upv0t3
Este es un servicio gratuito para nuevos usuarios de steemit, para apoyarlos y motivarlos a seguir generando contenido de valor para la comunidad.
<3 Este es un corazón, o un helado, tu eliges .

: )


N0. R4ND0M:
8105 5505 7919 9364
2629 1712 9435 6904
3936 6083 4055 8297
4965 4352 3121 7235

Coin Marketplace

STEEM 0.20
TRX 0.13
JST 0.029
BTC 66426.55
ETH 3459.91
USDT 1.00
SBD 2.62