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:

Carácter 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 extensión .pbp

'Buscaremos el compilador,

'Ahora a compilarlo, sino ocurrieron errores nos aparecerá en la esquina inferior derecha que lo hemos hecho bien :D