Ir al contenido principal

PROGRAMAR EN MICROCODE (PIC BASIC PRO)[PIC]

Hola, aquí les traigo un pequeño manual de como programar un PIC en MICROCODE. Pero antes de empezar con el ejemplo les dejare un poco de teoría para que se familiaricen un poco acerca de que trata este programador.

Microcóde es un lenguaje de instrucciones a nivel de hardware o estructuras de datos que intervienen en la ejecución de instrucciones de código máquina de nivel superior en las unidades centrales de procesamiento, y en la implementación de la lógica interna de muchos controladores de canal, los controladores de disco, controladores de interfaz de red, procesadores de red, unidades de procesamiento de gráficos, y otros equipos. Reside en especial de memoria de alta velocidad y traduce las instrucciones de la máquina en secuencias de operaciones detalladas a nivel de circuito. Se ayuda a separar las instrucciones de la máquina de la electrónica subyacentes de modo que las instrucciones pueden ser diseñados y alterados más libremente. También hace que sea factible construir instrucciones de pasos múltiples complejas reduciendo al mismo tiempo la complejidad de la circuitería electrónica en comparación con otros métodos. Escribir microcódigo es a menudo llamada la microprogramación y el microcódigo en una implementación particular del procesador es a veces llamado un microprograma.



MicroCode Estudio

MicroCode Studio es una poderosa, visual entorno de desarrollo integrado (IDE) con un Circuito de Depuración  (ICD) capacidad diseñado específicamente para MicroEngineering Labs PICBASIC ™ y PICBASIC compilador PRO ™.

El editor principal proporciona resaltado de sintaxis completa de su código con ayuda sensible al contexto de palabras clave y sugerencias de sintaxis. El explorador de código le permite saltar automáticamente para incluir archivos, define, constantes, variables, alias y modificadores, los símbolos y etiquetas, que están contenidos dentro de su código fuente. Corte total, copiar, pegar y deshacer se proporciona, junto con la búsqueda y substituye características.

El compilador PicBasic Pro (PBP) es nuestro lenguaje de programación de nueva generación que hace mas fácil y rápido para usted programar micro controladores Pic micro de Microchip Technology .

El lenguaje Basic es mucho más fácil de leer y escribir que el lenguaje ensamblador Microchip.

El PBP es similar al “BASIC STAMP II” y tiene muchas de las librerías y funciones de los BASIC STAMP I y II. Como es un compilador real los programas se ejecutan mucho más rápido y pueden ser mayores que sus equivalentes STAMP.

PBP no es tan compatible con los BASIC STAMP como nuestro compilador PicBasic es con el BS I. Decidimos mejorar el lenguaje en general. Una de estas decisiones fue agregar IF ...THEN...ELSE...ENDIF en lugar de IF.. THEN (GOTO) de los Stamps. Estas diferencias se ven luego en este manual.

PBP por defecto crea archivos que corren en un PIC 16F84-04/P con un reloj de 4 Mhz. Solamente muy pocas partes son necesarias capacitores de dos capacitores de 22 pf para el cristal de 4Mhz un resistor de 4.7K en el pin/MCLR y una fuente de 5 volt. Otros micros PIC además del 16F84, así como otros osciladores de frecuencias distintas pueden ser usados por este compilador.

Estructura de un programa

PIC
 Definir PIC a usar, nos da la opción de elegir el PIC en la siguiente barra desplegable:
Aquí se debe escoger cual utilizaremos

En este ejemplo se usará el PIC16F628A


LIBRERIAS EXTERNAS Y FUSIBLES:


Para colocar cualquier librería externa es necesario poner INCLUDE  “nombre.bas ”
La librería que siempre deben poner es  bs2defs.bas
Estas deben colocarse al inicio del código del programa
Otros son:
"modedefs.bas" 
Existen otras pero depende de las aplicaciones que desarrolles saber cual usar, pero la librería bs2defs.bas es la más requerida por el momento.

FUSIBLES

 (En lo personal programar fusibles yo me salto esta parte porque con el programador le puede decir que fusibles utilizar, aunque cada quien tiene su manera de trabajar.)

  

@ DEVICE pic16F628A, MCLR_OFF
@ DEVICE pic1XFXXX, FUSIBLE
Lo único que cambia en cada PIC es lo parte del oscilador:
XT cristal de cuarzo
INTRC I/0 Interno
·         INTRC_OSC_NOCLKOUT (Tambien se puede escribir como  OSC_XT)
·         WDT_OFF   (NO reiniciar si una se excedio el tiempo en una rutina)
·         PWRT_ON  
·         BOD_ON
·         MCLR_OFF
·         LVP_OFF  (Bajo nivel de Programacion)
·         CPD_OFF
·         PROTECT_ON (Evitar que otras personas pueden leer nuestro codigo)

VARIABLES
Son temporalmente alojadas en la memoria RAM del PIC
Pic Basic Pro (PBP) maneja tres tipos de variables
Tipo de Variable
Tamaño
Bit
1
Byte
8
Word
16

Sintaxis:
Etiqueta VAR tipo (.modificador)
Ejemplo:
JUAN               VAR    BIT
OSCAR           VAR    BYTE
SAN                 VAR    WORD

RENOMBRAR
Se puede incluso nombrar una variable con otro nombre incluso algún registro o parte del registro
Ejemplo:
FERNANDO   VAR    JUAN              (Algo innecesario pero solo volvemos a renombrar una variable)
HOLA             VAR    OSCAR.0        (Usa solo el primer bit de la variable byte OSCAR)
AGUSTIN       VAR    SAN.BYTE0   (Usa solo el primer byte de la variable byte SAN)
JAVIER           VAR    SAN.BYTE1   (Usa solo el SEGUNDO byte de la variable byte SAN)
LED                 VAR    PORTB.0   (Esta si es muy usada, Son para nombrar los puertos a palabras que nos faciliten como recordarlos)

CONSTANTES
Es muy similar a como nombramos a las variables
Sintaxis:
Etiqueta CON valor
Ejemplos:
·         RATON                 CON    3
·         RATAS                  CON    RATON * 100
·         CONTROL            CON    %11001100
·         LEDS                   CON    $CC

Tipos de constantes:
Prefijo
Valor
Tipo

100
DECIMAL
%
01100100
BINARIO
$
64
HEXADECIMAL

Caracteres por su valor en Decimal:
Caracter
Tipo
Valor
“A”
ASCII
65
“d”
ASCII
100

ARRAYS
Este tipo de arreglos de declaran de manera similar a las variables.
Sintaxis:
Etiqueta VAR tipo (# DE ELEMENTOS)
Tipo de Variable
# Max de Elementos
Bit
256
Byte
96
Word
48

EJEMPLO
P1 CON 000010
P2 CON 001000
P3 CON 010000
P4 CON 000001
P5 CON 000001
P6 CON 010000
P7 CON 001000
P8 CON 000010

SECUENCIA VAR BYTE [8]
X                       VAR BYTE

SECUENCIA[1] = P1
SECUENCIA[2] = P2
SECUENCIA[3] = P3
SECUENCIA[4] = P4
SECUENCIA[5] = P5
SECUENCIA[6] = P6
SECUENCIA[7] = P7
SECUENCIA[8] = P8


PUERTOS Y REGISTROS
Los puertos y registros pueden modificarse e incluso asignarles su valor a una variable:
Ejemplos:
%10101010    =         PORTB
Se le asigna el valor en binario en sus ocho pines
VARIABLE       =         PORTB & $0F
El valor de los primeros 4 bits del PORTB se almacenan en VARIABLE


PINES
Al igual que los puertos, a los pines se les puede asignar un valor y darle su valor a una variable
Ejemplo:
·         PORTB.1 = 1
·         LED     VAR    PORTB.1
                               LED         =         1
·         LED     VAR    PORTB.1
                               HIGH      LED
Los ejemplos anteriores todos son usados para prender un LED
La forma de asignarle a un pin la funcion de salida ò entrada; se realiza asignándole el valor directamente de los registros TRIS{puerto}, recordando que:

¢  1 – Función de entrada
¢  0 – Función de salida
Ejemplo:
·         TRISA = %11110000  or        TRISA = $F0
·         TRISB = %01010101  or        TRISB = $55
·         TRISA = 000000  or        TRISA = $00
·         TRISB = %11111111  or        TRISB = $FF


COMENTARIOS:
Se pueden colocar comentarios en el compilador PBP con el fin de recordar o hacer las comprensible al usuario en futuras revisiones el codigo de programa, dentro del PBP estos se colocan posterior a una comilla.
EJEMPLO:
LED  VAR  PORTB.0   ‘Al pin0 del puerto B se llama LED
TRISB.0 = 0              ‘Bit 0 del puerto B pin de salida
PORTB.0 = 1                        ‘Enciende el pin0 donde esta el LED


DEFINE
Se utilizan principalmente para recursos predefinidos dentro del dispositivo a programas (PIC), por ejemplo el PWM, ADC, LCD, OSCILADOR, entre otros.
Ejemplo:
DEFINE         OSC     4          ‘Oscilador a 4 Mhz


OPERADORES MATEMATICOS
El compilador PBP incluye varios operadores matemáticos y realiza las operaciones en forma jerárquica, es por ello la necesidad de utilizar paréntesis en algunos casos, por ejemplo:
A = (B+C) * (D-E)
Todas las operaciones matemáticas se realizando con 16 bits de precisión
No trabaja puntos decimales
OPERADOR
FUNCION
+
Suma
-
Resta
*
Multiplicación
**
Multiplicación con 16 Bits
*/
La mitad de la multiplicación a 16 Bits
/
División
//
Residuo
<< 
Corrimiento Izquierda
>> 
Corrimiento Derecha
ABS
Valor Absoluto* (completo)
COS
Regresa el coseno en 8 bits de un valor
DCD
Pone “1” la posición indicada y “0” las demás de una variable
DIG
Regresa el valor de una posición en decimal
DIV 32
Entrega el resultado de la operación anterior entre 100 y lo guarda en una variable
MAX
Regresa el valor máximo respecto 2 numeros
MIN
Regresa el valor minimo respecto 2 numeros
REV
Invierte los 4 btis menos significativos
SIN
Regresa el valor del seno en 8 bits
SQR
Regresa el cuadrado de una variable
&
Operación AND
|
Operación OR
^
Operación OR EXCLUSIVA
~
Operación NOT
&/
Operación NAND
|/
Operación NOR
^/
Operación XNOR


MULTIPLICACIÓN:
W1 = W0 * 1000
Multiplica WO por 1000 y pone el resultado en W1
W2 = W0 ** 1000
Multiplica W0 por 1000 y coloca los 8 bits mas significativos de 16 bits en W2
W3 = W1 */ WO
Multiplica W1 por W0 y regresa la mitad de los 16 bits en W3


DIVISION
W1 = W0 / 1000
Divide WO entre 1000 y pone el resultado en W1
W2 = W0 // 1000
Divide W0 entre 1000 y coloca el residuo en W2


SHITF
B0 = B0 << 3
Desplaza un “1” 3 posiciones a la Izquierda (como multiplicar por 8) y guarda en B0
W1 = W0 >> 1
Desplaza ”1” una posición a la izquierda (como dividir entre 2) y guarda en W1

OPERADORES DE COMPARACIÓN
OPERADOR
DESCRIPCIÓN
= or ==
Igual
<>Or ¡=
Diferente
< 
Menos que
> 
Mayor que
<=
Menso o igual que
>=
Mayor o igual que

OPERADORES LOGICOS
OPERADOR
DESCRIPCIÓN
AND or &&
Efectúa una operación AND
OR or ll
Efectúa una operación OR
XOR or ^^
Efectúa una operación XOR
NOT AND
Efectúa una operación NOT AND
NOT OR
Efectúa una operación NOT OR
NOT XOR
Efectúa una operación NOT XOR

Ejemplos:
IF (A==B) AND (B>C) THEN
……..
ENDIF
Si la variable A es igual que B y la variable B es mayor que C, solo entonces haz…….

IF, FOR, WHILE, CASE:
IF
IF...THEN
IF Comp {AND/OR Comp...} THEN Label

' PRO version only
IF Comp {AND/OR Comp...} THEN
   Statements...
ELSE
   Statements...
ENDIF

Ejemplos:
IF B0 <> 10 THEN
  B0 = B0 + 1
  B1 = B1 - 1
ENDIF

IF B0 = 20 THEN
  led = 1
ELSE
  led = 0
ENDIF

Lo común en un if es poner la condición que se valla a cumplir, seguido por un THEN que son todas las instrucciones que se realizaran si se cumple el if sino se debe colocar un ELSE para que sepa que hacer en caso de que no se cumpla.  Aquí son muy usado los operadores lógicos o de comparación


FOR
FOR  X=1     TO       10
          LED = 1
          PAUSE 50
          LED     = 0
          PAUSE 50
NEXT
Esta estructura es la mas básica de un FOR que es básicamente realizar el conjunto de instrucciones hasta que la variable llegue a la cantidad deseada.  Existen mas cosas, como el incremente que no sea de uno en uno.

WHILE
WHILE Condition
  Statements...
WEND
Se realizará hasta que la condicion sea verdadera.
Ejemplo:
INICIO2:       
            ADCIN 0, adval         
            valor = 30 * adval
            resul = valor/1024
                        LCDOUT $FE,1
            LCDOUT $FE,$80," ", #resul
            LCDOUT $FE,$C0,"mA1"

   Pause 100                            ' Wait .1 second
while PORTD.2 = 1
   Goto INICIO2                                 ' Do it forever
wend

(GOTO significa en al lugar donde el nombre (en este caso) INICIO2 aparezca)
Mientras el puerto d.2 sea igual a 1 realizará siempre esta subrutina en caso de que sea 0 continuará con el resto del código.

CASE
SELECT CASE var
   CASE expr1 {, expr...}
      statements
   CASE expr2 {, expr...}
      statements
   {CASE ELSE statements}
END SELECT
EJEMPLO:
SELECT CASE x
  CASE 1
    y = 10
  CASE 2, 3
    y = 20
  CASE IS > 5
    y = 100
  CASE ELSE
    y = 0

END SELECT

SUBRUTNA
En nuestro código, pueden haber ciertas instrucciones o conjunto de instrucciones que se repiten mucho por ello es necesario de lugar de implementarla 10 veces en el código hacer una subrutina para que ocupen muchos líneas de código a esto me refiero a que solo basta con “llamar” a la subrutina para que el programa valla a ejecutarlo.
Nombrar a un subrutina es fácil, se colocan las subrutinas fuera de nuestro programa principal y normalmente se colocan al final, pero antes del end del programa,  se pueden nombrar de cualquier forma solo debe contener : al final; ejemplo:
HOLA:
Al final de esta subrutina debe tener un GOTO a la sección del programa principal o donde sea requerido que continue.
Si queremos llamarlas solo se debe colocar GOSUB “nombre”
Ejemplo:
GOTO send
...
send:
SEROUT 0,N2400,["Hi"]

Los programas se deben guardar con la extensión .pbp
Al ejecutarlos correctamente no deberá aparecer ningún error y deberá decir


Quiza se tarde un poco al buscar en sus carpetas donde esta ubicado el compilador

Ahora solo deben colocar el punto .hex que genero el programa a un PIC y probarlo pero sino puede ir a proteus armar un circuito rápidamente y probarlo.  


TU PRIMER PROGRAMA: 

Una vez repasado todos los puntos anteriores solo queda hacer un primer programa

'Aprendiendo a hacer tu primer programa en MicroCode
'Como habras notado, para colocar mensajes se debe colocar    '
'Ahora bien primeramente uno debe escoger el PIC que usara para programar
'Es escoge en la siguiente sección, escoges el que mas te agrade
'Empecemos 

INCLUDE "bs2defs.bas" 'es la libreria mas usada y que siempre usaremos para lso programas

DEFINE osc 4 'Definimos que el crital de cuarzo a usar sera de 4MHz


'Fusibles
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT
@ DEVICE pic16F628A, WDT_OFF
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE pic16F628A, BOD_ON
@ DEVICE pic16F628A, MCLR_OFF
@ DEVICE pic16F628A, LVP_OFF
@ DEVICE pic16F628A, CPD_OFF
@ DEVICE pic16F628A, PROTECT_ON
'Aquí esta la manera de colocar los fusibles para este PIC 628A es necesario escoger bien el
'cristal de cuarzo interno

'Variables

LED1 VAR PORTB.0  'Colocamos nombres a cada uno de los puertos por comodidad, aunque se puede omitir
LED2 VAR PORTB.1
LED3 VAR PORTB.2

'Ahora definiremos que puertos serán de entradas o salidas por medio de los TRIS

TRISA = %11111111 'El uno significa entrada y el % es que es numero binario
TRISB = 000000  'Todo el puerto B será salida

'Programa principal

INICIO:   'es necesariamente poner : para que sepa que es una etiqueta

'Prenderemos LED's

LED1 = 1 ' colocar = 1 es poner ese PIN con un 1 logico
HIGH LED2  ' es otra manera de colocar un 1 lógico
LED3 = 3

PAUSE 1000 ' pause significa el tiempo de retardo que estaran prendidos, cada 1000 es 1 seg por tener un cristal de 4 Mhz

'Ahora apagaremos los led's

LED1 = 0 ' colocara en este pin un 0 logico
Pause 500
LOW LED2 ' Otra manera de colocar un 0 logico
PAUSE 500
LED3 = 0
PAUSE 500



    


GOTO INICIO ' Será el ciclo infinito para que se ejecute el programa siempre que este conectado

END

'Ahora a compilarlo, debemos escoger el compilador y guardar primeramente el programa con la extención .pbp
'Buscaremso el compilador,
'Ahora a compilarlo, sino ocurrieron errores nos aparecera en la esquina inferior derecha que lo hemos hecho bien :D 



LINK DE DESCARGA DEL PROGRAMA:

http://melabs.com/resources/win_ide.htm

MANUAL DE USO:

http://melabs.com/resources/pbpmanual/


PARTE 2
http://batiz9.blogspot.mx/2014/06/primer-programa-microcode-pbp-2-pic.html



Comentarios

  1. Que gran aporte tu blog. No te imaginas cuanto me ha servido. Sin saber nada de PIC gracias a tu ayuda hasta envío información por bluetooth desde mi 16F877A y el HC-05 bluetooth para Arduino

    ResponderEliminar
  2. Gracias muy bueno. Continua haciendo mas tutoriales de microcodestudio para los que solo sabemos programar en basic

    ResponderEliminar
  3. me dijeron que puedo poner "portb=001100" que seria lo mismo que poner "high portb.3:portb.2" me pueden indicar que estaria mal xq según el compilador esta mal la sintaxis del %. Gracias

    ResponderEliminar
  4. Buen tutorial. Para iniciar en este tema.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

PROGRAMAR EN PIC C COMPILER [CCS - PIC - C]

Para las personas que están un poco más familiarizadas a hacer programas en lenguaje C o sus derivados, en esta sección les traigo un manual de como programar un PIC usando el lenguaje C, pero como siempre un poco de teoría para que estén familiarizados un poco. PIC C Compiler  es un compilador C que contienen operadores estándar del lenguaje C y funciones incorporados en bibliotecas que son específicas a los registros de PIC, proporcionando a los desarrolladores una herramienta poderosa para el acceso al hardware las funciones del dispositivo desde el nivel de lenguaje C.  El compilador de CCS (Custom Computer Services) contiene más de 307 funciones integradas que simplifiquen el acceso al hardware, mientras que la producción eficiente y altamente optimizado código. Se incluyen funciones de hardware del dispositivo de características tales como: * Temporizadores y módulos PWM  * Convertidores A / D  * de datos on-chip EEPROM  * LCD controladores  * Memoria externa

STRUCTURE DECK - FREEZING CHAINS (Yu-Gi-Oh!)

En el 2020 se realizó el  Structure Deck Voting Contest OCG para elegir el nuevo deck de estructura que se lanzaría en el 2021. Y el ganador fue el arquetipo Ice-Barrier. En el siguiente video se muestran con realidad aumentada los modelos 3D de las cartas que se pueden encontrar. Continuando con la misma temática del 2019 Konami realizó una votación para elegir el próximo Structure Deck OCG, que posteriormente se llegaría también a TCG. Se enlistaran los arquetipos participantes del que obtuvo más votos al de menos: Ice Barrier Cyber Style Gusto Trickstar Morphotronic Kuriboh Kaiju Star Seraph Tour Guide Superheavy Samurai El Structure Deck: Freezing Chains fue lanzado el 19 de febrero del 2021, incluye 46 cartas (Deck Principal de 41 cartas + Deck Extra de 5 cartas): 37 Comunes 3 Súper Raras 6 Ultra Raras 1 Tapete de Juego  El regreso de Trishula A medida que el invierno se hace más crudo, la Prisión Helada es incapaz de contener la creciente tormenta en su interior, anunciando el re