Autor Tema: GUIA: PIC SIMULATOR IDE, Cap. 5 y 6  (Leído 4178 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
GUIA: PIC SIMULATOR IDE, Cap. 5 y 6
« en: 11 de Enero de 2007, 14:55:26 »
Dicen que lo prometido es deuda, asi que aca estan los dos capitulos nuevos del tutorial del PIC SIMULATOR IDE.
Lamentablemente, el capitulo 5 tiene gran cantidad de tablas, asi que no lo posteo, los invito que lo lean en el link que les dejo mas abajo. Se trata de un tema que no es especifico del PSI, pero que pude ser interesante recordar para entender los demas capitulos.

Un abrazo, Ariel.

> Capitulo 05 - Sistemas de Numeración

> Capitulo 06 - Variables:
Vamos a comenzar a ver algo de la programación en el BASIC incluido en el entorno PIC SIMULATOR IDE, al que en adelante nos referiremos como "BASIC", a secas.

La programación seria prácticamente imposible sin el uso de variables. Podemos hacernos una imagen mental de las variables consistente en una caja en la que podemos guardar algo. Esa caja es una de las muchas que disponemos, y tiene en su frente pegada una etiqueta con su nombre. Estas cajas tienen ciertas particularidades, que hace que solo se puedan guardar en ellas determinados tipos de objetos.
En esta analogía, cada caja es una variable, su contenido es el valor que adopta, y la etiqueta es el nombre de la variable. Como su nombre lo indica, y como veremos mas adelante, el contenido de una variable puede ser modificado a lo largo del programa.

El BASIC tenemos distintos tipos de variable, según el dato que puedan almacenar:
- Bit (un bit de longitud, almacena 0 o 1 únicamente)
- Byte (un byte de longitud, almacena números enteros entre 0 y 255)
- Word (dos bytes de longitud, almacena números enteros entre 0 y 65,535)
- Long (cuatro dos bytes de longitud, almacena números enteros entre 0 y 4,294,967,295)

El tipo "Long" solo esta disponible mediante un modulo opcional al PIC SIMULATOR IDE.
A diferencia de otros BASIC, la declaración de variables puede ser hecha en cualquier parte del programa, y todas son consideradas globales, es decir, su valor es accesible desde todas las subrutinas y zonas del programa. El numero de variables esta lógicamente limitado al monto de memoria RAM disponible en cada microcontrolador. Las variables las declaramos utilizando la instrucción DIM, como se muestra en los siguientes ejemplos:

DIM A AS BIT
DIM B AS BYTE
DIM X AS WORD
DIM Y AS LONG

También es posible utilizar vectores, que son una matriz de dimensiones 1xN . Por ejemplo, la sentencia siguiente:

DIM A(10) AS BYTE

declara un vector (al que nos referiremos algunas veces como "array") de diez elementos del tipo BYTE, que serán accedidos mediante el uso de subíndice (entre paréntesis) del 0 al 9.
LA sentencia RESERVE le permite al programador reservar un numero de posiciones de la RAM para su uso en rutinas en assembler o para el In-Circuit Debugger de MPLAB. Simplemente, si queremos reservar 20 bytes de RAM, escribimos:

RESERVE 20

Las variables tipo Word, como vimos, están compuestas por dos bytes. el primero de ellos es llamado byte "alto" y el otro "bajo", dado que el primero contiene los 8 bits mas significativos. En BASIC podemos acceder individualmente a cada uno de los bytes que componen un Word mediante las extensiones ".HB" (High byte, o byte alto) y ".LB" (Low Byte o byte bajo) . Veamos un ejemplo:

DIM A AS BYTE
DIM B AS WORD
A = B.HB
A = B.LB 'Esto es lo mismo que A = B
B.HB = A
B.LB = A
B = A 'Esto también borra el byte alto de la variable B

Los bits individuales de cada variable pueden ser accedidos individualmente también, simplemente poniendo como extensión ".n" donde "n" es el numero de bit (1,2, 3, etc. )

DIM A AS BYTE
DIM B AS BIT
B = A.1
B = A.7
A.0 = A.5 

Todos los registros del microcontrolador esta disponibles para usar en los programas BASIC, como si se tratase de variables del tipo BYTE con el nombre del registro utilizado en las datasheet (PORTA, PORTB, TRISA, etc.). Por supuesto, se puede acceder a bits individuales de los registros con la técnica vista párrafos atrás. Algunos ejemplos:

TRISA.1 = 0
TRISB = 0
PORTA.1 = 1
PORTB = 255
STATUS.RP0 = 1
INTCON.INTF = 0

Existe una "forma corta" de acceder a los bits individuales de cada port, simplemente usando las variables BASIC tipo byte RA, RB, RC, RD, RE o bien las tipo bit RA0, RA1, RA2, ..., RE6, RE7

RA = 0xFF
RB0 = 1

En BASIC también podemos usar punteros. En realidad, cualquier variable definida como tipo BYTE o WORD pude ser usada como un putero de memoria, usándola como argumento de la función POINTER. El valor contenido por la variable debe tener un valor comprendido entre 0 y 511. Ejemplos:
 
DIM X AS WORD
DIM Y AS BYTE
X = 0x3F
Y = POINTER(X)
Y = Y + 0x55
X = X - 1
POINTER(X) = Y
Y = 0xAA
X = X - 1
POINTER(X) = Y

Una forma de escribir programas que nos resulten mucho mas fáciles de entender es el uso de nombres simbólicos, o SYMBOL. Un "symbol" es una cadena que contiene código, asignado a un nombre. Al momento de compilar, PIC BASIC hace la "búsqueda y reemplazo" de nuestros símbolos y luego genera el código ASM y el HEX. Supongamos que tenemos un LED conectado al bit cero del puerto B. Mediante SYMBOL podemos hacer:

SYMBOL LED1 = PORTB.0

Luego, si queremos encender el LED, en lugar de

PORTB.0 = 1

podemos hacer

LED1 = 1

que es mucho mas claro y fácil de leer.
Las constantes (valores que usamos en nuestro programa, y que, por ejemplo, asignamos a las variables) pueden ser escritas en decimal (directamente el valor), en hexadecimal (anteponiendo "0x" o posponiendo "H" al valor) o en binario (anteponiendo "%" al valor). Por ejemplo:

DIM A AS BIT
DIM B AS BYTE
A = TRUE
B = 0x55
B = %01010101

Por supuesto, se pueden asignar nombres a las constantes, usando la instrucción CONST:

DIM A AS WORD
CONST PI = 314
A = PI

Hay tres instrucciones para el manejo individual de bits, que si bien no hacen nada que no se puede resolver con otras instrucciones o símbolos, ayudan mucho en la lectura del código. Se tratan de HIGH, LOW y TOGGLE, que ponen el bit en alto, bajo o lo invierten, respectivamente.
Importante: Si el bit implicado como argumento de una de estas instrucciones es un bit de un PORT, el mismo bit en el TRIS correspondiente es puesto en cero, y dicho pin queda configurado como salida. Algunos ejemplos:

HIGH PORTB.0
LOW ADCON0.ADON
TOGGLE OPTION_REG.INTEDG

-----------------------------------------------
En los próximos capítulos veremos algunas instrucciones basicas (IF...THEN...ELSE...ENDIF, FOR...TO...NEXT, etc.) para encarar nuestros primeros programas. Como siempre...si hay sugerencias, criticas o comentarios, agradecido.
Saludos!
« Última modificación: 11 de Enero de 2007, 14:59:23 por aitopes »
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert


 

anything