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