31 may 2010

WHILE.....WEND

HACER MIENTRAS

Sintaxis

     WHILE Condicion

            Instrucciones
            ..
            ..
            Instrucciones



     WEND


Informacio General
         Ejecuta un bloque de instrucciones mientras una condicion sea cierta

Ejemplo :

     VAR1 = 1


     WHILE VAR1 <= 10     ; Ejecuta las instrucciones del bucle mientras 
                                               ; VAR1 sea igual o menor a 10
          PRINT @VAR1 , " "
          VAR1 = VAR1 + 1

     WEND                                 ;

COMUNICACION SERIAL - SERIN

          Una de las formas más populares de la comunicación entre dispositivos electrónicos es la comunicación serial. Hay dos tipos principales de comunicación  serial; síncrona y asíncrona. El HRSin, HRSOut, HSerIn, HSerOut, RSin, RSOut, Serín y comandos SerOut se usan para enviar y recibir datos en serie asíncronos. Mientras los comandos SHIn y SHOut son para uso exclusivo de comunicación síncrona.

          El término  asincrónico significa "sin ver el reloj" . De una manera mas especifica, "en la comunicación serial asincrona lo datos son transmitidos y recibidos sin el uso de un reloj. Los datos pueden ser enviados usando tan sólo dos cables, uno para datos y otra para tierra. Los puertos serie del PC (también llamados puertos COM o RS232) utilizan la comunicación serial asíncrona. Nota: el otro tipo de comunicación serial,  síncrona, utiliza por lo menos tres cables, uno para el reloj, una para datos y otra para tierra.

        El RS232 es la especificación eléctrica para las señales que usa el puerto serie del PC. A diferencia de las lógicas TTL, donde 5 voltios es un 1 lógico y 0 voltios es la lógica 0, RS232 utiliza -12 voltios para la lógica 1 y  +12 voltios para la lógica 0. Esta especificación permite comunicación a través de longitudes de cable más largo sin amplificación. La mayoría de los circuitos que trabajan con RS232 utiliza un controlador de línea /receptor (transceptor), o adaptador de niveles.  Este componente hace dos cosas: - 


  1. Convierte los ± 12 voltios de RS-232 a TTL compatible 0 a 5 voltios niveles.

  2. Invierte los niveles de tensión, de modo que la lógica de 5 voltios = 1 y 0 voltios lógica = 0.
          Debido a las capacidades de E/S, excelente para la  gama de dispositivos PICmicro, y la adopción de niveles TTL en la mayoría de los puertos serie de los PC modernos, un conductor de línea es a menudo innecesaria a menos que las largas distancias están involucrados entre el transmisor y el receptor. En su lugar  una simple resistencia de limitación de corriente es todo lo que se requiere.

        Usted debe recordar que cuando se utiliza un circuito adpatador de niveles transmisor-receptor, tal como el MAX232, la polaridad del modo serial se invierte en el proceso de convertir los niveles de señal, sin embargo, si se utiliza la conexión directa, el modo es virgen. Esta es la causa más común de errores al conectar dispositivos en serie, por lo tanto usted debe hacer provisiones por este dentro de su software.
       
        La comunicación asíncrona en serie se basa en la sincronización exacta. Tanto el emisor como el receptor deben ajustarse para medir el tiempo idéntico, lo que comúnmente se expresa en bits por segundo (bps) llamada baudios. Serín requiere un valor llamado Baudmode que informa de las características relevantes de los datos en serie que se  reciben, el período de bit, el número de datos , el   bit de paridad, y la polaridad.

        El argumento de Serín Baudmode acepta un valor de 16-bit que determina sus características: 1-bit de parada, los bits 8-datos / sin paridad o bits de datos 7-/ paridad par- y prácticamente cualquier velocidad a partir de tan 300 baudios a una mayor de 38K baudios (dependiendo de la frecuencia del cristal utilizado).  La lista a continuación muestra cómo se calcula Baudmode, consulte el manual para algunos baudmodes norma común para velocidades de serie.
       
        Si las comunicaciones son con software o hardware existente, su velocidad y modo determinará la elección de la velocidad de transmisión y el modo. En general, 7-bit /paridad-par (7E) se utiliza el modo de texto, y 8-bit/no-parity (8N) para los datos orentados a byte. Nota: el modo más común es 8-bit/sin-paridad, incluso cuando los datos transmitidos es sólo texto. La mayoría de los dispositivos que utilizan un modo de 7-bit de datos, lo hacen para aprovechar la función de la paridad. La paridad puede detectar algunos errores de comunicación, sino que en  su uso se pierde un bit de datos. Esto significa que los datos de entrada de bytes transferidosen el  modo 7E (paridad-par) sólo puede representar valores de 0 a 127, en vez de la 0 a la 255 del 8N (sin paridad) de modo.

         Los comandos  seriales del compilador "Serín" y "SerOut", todavia tienen la opción de utilizar un bit de paridad con desde 4 hasta 8 bit de datos. Esto es mediante el uso de las declaraciones: -


Con la paridad desactivada: -


DECLARE SERIAL_DATA 4 ' Configura SERIN y SEROUT para 4 bit de datos
DECLARE SERIAL_DATA 5 'Configura SERIN y SEROUT para 5 bit de datos
DECLARE SERIAL_DATA 6 ' Configura SERIN y SEROUT para 6 bit de datos
DECLARE SERIAL_DATA 7 ' Configura SERIN y SEROUT para 7 bit de datos
DECLARE SERIAL_DATA 8 ' Configura SERIN y SEROUT para 8 bit de datos (POR DEFECTO)



Con paridad Activada: -



DECLARE SERIAL_DATA 5 ' Configura SERIN y SEROUT para 4 bit de datos
DECLARE SERIAL_DATA 6 ' Configura SERIN y SEROUT para 5 bit de datos
DECLARE SERIAL_DATA 7 ' Configura SERIN y SEROUT para 6 bit de datos
DECLARE SERIAL_DATA 8 ' Configura SERIN y SEROUT para 7 bit de datos (POR DEFECTO)
DECLARE SERIAL_DATA 9 ' Configura SERIN y SEROUT para 8 bit de datos


        Los bit de datos de la declaracion SERIAL_DATA puede variar de 4 a 8 bits (el valor predeterminado si no se declara es el POR DEFECTO). La Habilitación de paridad utiliza uno de los número de bits especificado.

DECLARE SERIAL_PARITY ODD o EVEN

        Establece el tipo de paridad de Serín y SerOut. Si la paridad es permitidA pero el DECLARE SERIAL_PARITY no se emite en el programa, la configuración predeterminada es paridad par.

        DECLARE SERIAL_PARITY = EVEN 'si se desea paridad par
        DECLARE SERIAL_PARITY = ODD 'si se desea paridad impar

        DECLARE SERIAL_DATA 9 : Permite 8 bits de datos, junto con un noveno bit de paridad.

        La paridad es una característica simple de comprobación de errores. Cuando un remitente de datos serie está previsto para paridad par (el modo compatible con el compilador), este cuenta el número de unos en el byte de salida y utiliza el bit de paridad para hacer este numero de unos sea par. Por ejemplo, si se está enviando el valor de 7-bit: "0011010", establece el bit de paridad de 1 a fin de hacer un número par de unos (cuatro), es decir, como el datos tiene tres unos, el bit de paridad se hace uno para dar cuatro unos.

       El receptor cuenta también con los bits de datos para calcular lo que el bit de paridad debe ser. Si coincide con el bit de paridad, el receptor serial supone que los datos se recibieron correctamente. Por supuesto, esto no es necesariamente cierto, ya que dos bits de forma incorrecta podrían hacer parecer correcto la recepcion, o el bit de paridad en sí mismo podría ser malo cuando el resto de los datos es correcta.

       Muchos sistemas funcionan exclusivamente con el uso de texto de 7-bit / modo de paridad-par. Por ejemplo, para recibir un byte de datos a través de bits de PORTA-0 a 9600 baudios, 7E, invertido:


        SERIN PORTA.0, 24660, [SerData]

       En el ejemplo anterior funcionará correctamente, sin embargo, no informa al programa qué hacer en caso de un error de paridad. A continuación, es una versión mejorada que utiliza el argumento opcional que proporciona una etiqueta que a la cual se direccionara en caso de que se produzca un error de paridad en la recepcion:

        SERIN PORTA.0, 24660, P_ERROR, [SerData]
        PRINT @SerData
        STOP

 P_ERROR:
        PRINT "Error de paridad"

        Si coincide con la paridad, el programa continúa en la instrucción de PRINT después de SERIN. Si la paridad no coincide, el programa salta a la etiqueta P_ERROR. Tenga en cuenta que un error de paridad tiene prioridad sobre otras especificaciones InputData (tan pronto como se detecta un error, Serín aborta y salta a la rutina Plabel).

        En los ejemplos anteriores, la única manera de poner fin a la instrucción de Serín (que no sea reiniciar o de apagado) es dar a Serin los datos en serie que necesita. Si no hay datos de serie recibidos, el programa se queda atascado en un bucle sin fin. Sin embargo, se puede forzar a Serin a abortar si no recibe datos en un número especificado de milisegundos. Por ejemplo, para recibir un valor a través de PORTA-0 a 9600 baudios, 8N, invertido y Serín abortar después de 2 segundos (2000 ms) si no llegan datos: -

        SERIN PORTA.0 , 16468 , 2000 , TO_ERROR , [SerData]
        PRINT CLS , @Result
        STOP

TO_ERROR:
        PRINT CLS , "Timed Out"

        Si no se reciben datos serie en 2 segundos, Serín aborta y salta hasta la etiqueta TO_ERROR. Ambos argumentos, de Espera y de la Paridad se pueden combinar. A continuación se muestra un ejemplo para recibir un de valor a través de PORTA-0 a 2400 baudios, 7E, invertida con un tiempo de espera de 10 segundos:

        DIM SerData AS BYTE

Again:
        SERIN PORTA.0 , 24660 , P_ERROR , 10000 , TO_ERROR , [SerData]
        PRINT CLS , @SerData

        GOTO Again 

TO_ERROR:
        PRINT CLS , "Timed Out"
       GOTO Again

P_ERROR:
        PRINT CLS , "Parity Error"
        GOTO Again

        Al diseñar una aplicación que requiere la comunicación serie entre PICmicros, usted debe recordar a trabajar dentro de estos límites: -

1. Cuando el PICmicro está enviando o recibiendo datos, no puede ejecutar otras instrucciones.
2. Cuando el PICmicro está ejecutando otras instrucciones, no se puede enviar o recibir datos.
3. El compilador no ofrece un buffer de orden que hay en un PC. A bajas frecuencias del cristal oscilador, y las mayores tasas de datos serie, el PICmicro no puede recibir datos a través de Serín, procesarlo, y ejecutar otro Serín a tiempo para tomar la siguiente parte de los datos, a menos que existan importantes pausas entre las transmisiones de datos.



SERIN Modificadores

        Como ya sabemos, Serin va a esperar y recibir un solo byte de datos, y almacenarlo en una variable. Si el PICmicro esta conectado a un PC que ejecuta un programa de terminal y el usuario pulsa la tecla "A" en el teclado, después de ejecutado el comando Serin, la variable contendra el valor 65, que es el código ASCII de la letra "A".

         ¿Qué pasaría si el usuario pulsa la tecla "1"? El resultado sería que la variable que contendrá el valor 49 (el código ASCII para el caracter "1"). Este es un punto importante a recordar: cada vez que se pulsa una letra en el teclado, el ordenador recibe el valor ASCII de ese carácter. Corresponde a la parte receptora de interpretar los valores según sea necesario. En este caso, tal vez en realidad quería que la variable terminara con el valor 1, en lugar del código ASCII 49. El comando Serin proporciona un modificador, el modificador llamado decimal, que interpretará esto para nosotros. Mira el siguiente código: -

        DIM SERDATA AS BYTE
        SERIN PORTA.1, 16780, [DEC SERDATA]

         Observe el modificador de decimales en el comando SERIN que aparece justo a la izquierda de la variable SERDATA. Esto le dice a Serín para convertir texto entrantes representar los números decimales en forma decimal verdadera y guardar el resultado en SERDATA. Si el usuario que ejecuta el software de terminal pulsa el "1", "2" y luego "3" claves seguido de un espacio u otro texto no numérico, el valor 123 se almacenará en la variable SERDATA, permitiendo que el resto del programa para realizar cualquier operación sobre la variable numérica.

        Sin el modificador decimales, sin embargo, habría sido obligado a recibir cada personaje ("1", "2" y "3") por separado, y aún así tendría que hacer alguna conversión manual para llegar al número 123 (cien veintitrés) antes de poder hacer los cálculos que desee sobre el mismo.

         El modificador decimal está diseñado para buscar texto que representa los números decimales. Los caracteres que representan números decimales son los caracteres "0" a "9". Una vez que el comando Serin se le pide que utilice el modificador decimal de una variable en particular, sigue de cerca los datos serie entrantes, buscando el primer carácter decimal. Una vez que encuentra el carácter primera cifra decimal, seguirá buscando más (la acumulación de todo el número de varios dígitos) hasta que se encuentra un carácter numérico no decimales. Recuerde que no terminará hasta que encuentra al menos un carácter decimal seguido por al menos un carácter no decimales. Para ilustrar esto aún más, examine los siguientes ejemplos (suponiendo que estamos usando el ejemplo de código igual al anterior): -

 Entrada serial : "ABC"

 Resultado: El programa se detiene en el símbolo del Serín, continua en espera para el texto decimal.

Entrada Serial : "123" (sin caracteres siguientes ella)

Resultado: El programa se detiene en el símbolo del Serín. Se reconoce los caracteres "1", "2" y "3" como el número ciento veintitrés, pero como no no hay datos siguientes al "3", espera de forma continua, ya que no hay manera de saber si 123 es el número entero o no.

Entrada serial : "123 " (seguido por un carácter de espacio)

Resultados: Al igual que el ejemplo anterior, excepto una vez que el carácter de espacio se recibe, el programa sabe el número completo es 123, y almacena este valor en SERDATA. El comando Serin luego termina, permitiendo a la siguiente línea de código se ejecute.

Entrada  serial: "123A"

Resultados: Igual que el ejemplo de arriba. La "A" carácter, como el carácter de espacio, es el primer texto no decimales después del número 123, que indica al programa que ha recibido todo el número.

Entrada Serial: "ABCD123EFGH"

Resultados: Al igual que los ejemplos anteriores. Los caracteres "ABCD" se pasan por alto (ya que no son decimales, los caracteres 123  son evaluados para ser el número 123 y el siguiente carácter, "E", indica al programa que ha recibido todo el número.

        El resultado final del modificador de DEC está limitado a 16 bits (hasta el valor de 65535). Si un valor mayor que este valor recibido por el modificador de decimales, el resultado final será incorrecto porque el resultado se extiende el plazo del valor máximo de 16-bit. Por lo tanto, los modificadores de Serín no puede (en este momento) se utiliza para cargar DWORD (32 bits) variables.

        El modificador DEC es sólo uno de una familia de modificadores de conversión disponibles con Serin Más abajo encontrará una lista de modificadores de conversión disponibles. Todos los modificadores de la conversión de trabajan similar al modificador decimal (como se describió anteriormente). Los modificadores de recibir bytes de datos, a la espera para el primer byte que está comprendida en el rango de caracteres que aceptan (por ejemplo, "0" o "1" para binario, "0" a "9" para decimal, "0" a "9 "y" A "a" F "para hexadecimal. Una vez que reciben un carácter numérico, siguen aceptando la entrada hasta que un carácter no numérico llega, o en el caso de los modificadores de longitud fija, hasta que el número máximo de dígitos especificados es recibido.

        Aunque es muy eficaz en el filtrado y conversión de texto de entrada, los modificadores no son totalmente infalibles. Como se mencionó anteriormente, los modificadores conversión podrian seguir aceptando texto, hasta que el primer texto no numérico llege, incluso si el valor resultante supere el tamaño de la variable.Usted puede controlar esto hasta cierto punto mediante el uso de un modificador que especifica el número de dígitos, como DEC2, que aceptaría los únicos valores en el rango de 0 a 99.

        Los caracteres de conversión de tipos de modificadores numéricos Número aceptadas

        DEC (1 .. 5) decimal, opcionalmente limitada del 0 al 9 de 1 a 5 dígitos
        HEX (1 .. 4) Hexadecimal, opcionalmente limitada del 0 al 9, de 1 a 4 dígitos de la A a F
        BIN (1 .. 16) binario, opcionalmente limitada 0 y 1 de 1 a 16 dígitos

Una variable precedida por BIN va a recibir la representación ASCII de su valor binario.

Por ejemplo, si se especifica BIN VAR1 y "1000" se recibe, VAR1 se establecerá en 8.

Una variable precedida de SWX recibirá la representación ASCII de su valor decimal.

Por ejemplo, si se especifica DEX VAR1 y "123" es recibido, VAR1 se establecerá en 123.

Una variable precedida por HEX recibirá la representación ASCII de su valor hexadecimal.

Por ejemplo, si se especifica HEX VAR1 y "FE" se recibe, VAR1 se establecerá en 254.

        El comando Serin se puede configurar para esperar a una secuencia de caracteres antes de que se recuva cualquier entrada adicional. Por ejemplo, supongamos que un dispositivo conectado al PICmicro envia muchas secuencias diferentes de datos, pero los únicos datos que desea observar sean solo justo después de los caracteres únicos, "XYZ". El modificador WAIT  puede ser utilizado para este propósito: -

        SERIN PORTA.0, 16468, [WAIT ("XYZ"), SERDATA]

       El código de arriba espera a que los caracteres "X", "S" y "Z" sean recibidos, en ese orden, entonces recibe el byte de datos que viene y lo coloca en la variable SERDATA.


STR Modificador

        El compilador también tiene un modificador para el manejo de una cadena de caracteres, denominado STR. El modificador STR se utiliza para recibir una cadena de caracteres en una variable de matriz de bytes.

        Una cadena es un conjunto de caracteres que se disponen o acceden  en un cierto orden. Los caracteres "ABC" se almacena en una cadena con la "A", seguido por el "B" y luego seguido por el "C". Una matriz de bytes es un concepto similar al de una cadena, sino que contiene datos que se disponen en un orden determinado. Cada uno de los elementos de una matriz es del mismo tamaño. La cadena "ABC" se almacenaría en una matriz de bytes que contiene tres bytes (elementos). A continuación se muestra un ejemplo que recibe diez bytes a través de bits de PORTA-0 a 9600 bps, N81/inverted, y los almacena en la matriz de 10 bytes, SERSTRING: -

        DIM SerString [10] AS BYTE                                   'Crear una matriz de 10 bytes.
        SERIN PORTA.0, 16468, Relleno [STR SerString]   'la matriz con los datos recibidos.
        PRINT SerString                                         'Mostrar la cadena.

        Si la cantidad de caracteres recibidos no es suficiente para llenar toda la matriz, a continuación, un formateador puede ser colocado después del nombre de la matriz, que sólo recibirá caracteres hasta la longitud especificada. Por ejemplo: -

        DIM SerString [10] AS BYTE 'Crear una matriz de 10 bytes.
        SERIN PORTA.0, 16468, [STR SerString \ 5] 'Rellenar los primeros 5 bytes de la matriz
        PRINT STR SerString \ 5 'Mostrar la cadena de 5 caracteres.
        
        El ejemplo anterior ilustra cómo llenar sólo los primeros n bytes de una matriz y, a continuación, cómo mostrar sólo los primeros n bytes de la matriz. n se refiere al valor que se da después de la barra invertida.



Consideraciones Generales

Preste atención a cableado

        Tome más tiempo para estudiar y verificar los diagramas de cableado de  comunicación serial. Un error en el cableado puede causar problemas en la comunicación, o la no comunicación. Asegúrese de conectar las clavijas de tierra (Vss) entre los dispositivos que se comunican en serie.

        Compruebe configuración de puerto en el PC y en los comandos de la serie


        Una configuración desigual entre el emisor y el  receptor hará que las transferencias de datos sean  ilegibles o no exista transferencias de datos. 

         Recuerde siempre que un transmisor-receptor de línea invierte la polaridad de serie. Si los datos recibidos de serie no se puede leer, lo más probable es causado por un error de velocidad de transmisión , error de posición, o un error de polaridad. Si recibe datos de otro dispositivo que no es un PICmicro, trate de usar velocidades de transferencia de 9600 y por debajo, o como alternativa, utilize un cristal de frecuencia más alta. Debido a los gastos generales adicionales en el PICmicro, y el hecho de que el comando Serin no ofrece algún tipo de bufer de hardware de recepción para la comunicación serial, po rl oque recepciones consecuentes, pueden ser perdidas o ilegibles. Si esto ocurre, intente reducir la velocidad de transmisión, o aumentar la frecuencia del cristal. Uso de variables simples (no matrices) también aumentará la probabilidad de que el PICmicro recibirá los datos correctamente.

Vea Tambien:
                         SEROUT

HARDWARD






      Si deseamos conectar el micro al PC, debemos utilizar un circuito adaptador como el MAX232;  en la figura se muestran conectados los pines, 8 y 9, los cuales son opcionales en caso de que se quiera programar el micro con el Microcode Loader de Proton.
     Si queremos comunicar dos micros que estan en el mismo PCB, no hace falta utilizar este circuito, mas bien si, cuando estos estan conectados en PCB distintas y a distancias considerables.


IF... THEN ... ELSE

Sintaxis

Caso 1

     IF Comparacion THEN
           Instrucciones1
     END IF

Caso 2

     IF Comparacion THEN
           Instrucciones2
     ELSE
         Instrucciones3
     END IF

Caso 3

     IF Comparacion THEN

          Instrucciones4
     ELSEIF Comparacion THEN
          Instrucciones5
     ELSE
         Instrucciones6
     ENDIF

Informacion General

Primer Caso :   Evalúa la comparación que sigue al IF, si se cumple el  o los criterios, se ejecutan las instrucciones1. Si la comparación no se cumple la instrucción se ignora

Segundo Caso:    Evalúa la comparación que sigue al IF, si se cumple el o los criterios, se ejecutan unicamente las instrucciones2; si la comparación no se cumple la instrucciónes2 se ignoran,y se pasa a verificar la comparacion que le sigue al ELSE, si se cumple el o los criterios, se ejecutan unicamente las instrucciones3; si la comparación no se cumple la instrucciónes3 se ignoran.

Tercer caso:  Evalúa la comparación que sigue al IF, si se cumple el o los criterios, se ejecutan unicamente las instrucciones4; si la comparación no se cumple la instrucciónes4 se ignoran,y se pasa a verificar la comparacion que le sigue al ELSEIF, si se cumple el o los criterios, se ejecutan unicamente las instrucciones5; si la comparación no se cumple la instrucciónes5 se ignoran, y se pasa a verificar la comparacion que le sigue al ELSE, si se cumple el o los criterios, se ejecutan unicamente las instrucciones6; si la comparación no se cumple la instrucciónes6 se ignoran.


Ejemplo 1

     SYMBOL LED = PORTB.4
     VAR1 = 3
     LOW LED


     IF VAR1 > 4 THEN

             HIGH LED
             DELAYMS 500 
             LOW LED

     END IF

       En el ejemplo anterior, VAR1 no es superior a 4, en consecuencia, el creiterio no se cumple, por lo que  las instrucciones HIGH LED, DELAYMS 500 y LOW LED,  nunca se ejecutan. Sin embargo, si cambiamos el valor de la variable VAR1 a 5, a continuación, el LED se encenderá durante 500 ms y luego se apaga, porque VAR1 es ahora mayor que 4, por lo que cumple los criterios de comparación.


Ejemplo 2


     IF X & 1 = 0 THEN
          A = 0
          B = 1
     ELSE
         A = 1
    ENDIF


Ejemplo 3

     IF X = 10 THEN
          HIGH LED1
     ELSEIF X = 20 THEN
          HIGH LED2
     ELSE
          HIGH LED3
     ENDIF


  ; Si X es igual a 10, enciende LED1 unicamente, SINO SI X es igual a 20, enciende LED2 unicamente, SINO se cumple ninguna de la anteriores entonces se enciende LED3 unicamente.


Ejemplo 4


     IF X >10 AND  X<50 THEN
          HIGH LED1
     ENDIF

; Enciende el LED1 solo si X es mayor a 10 y X es menor a 50.

Las comparaciones se pueden plantear de manera organizada con el uso de los parentesis, por ejemplo:

   IF (  (X>10 AND X<50) Or (X>80  AND X<100)  ) THEN
        HIGH LED1
  END IF

;En este  Enciende el LED1 solo si X es mayor a 10 y X es menor a 50, ò si X es mayor a 80 y X es menor a 100.

LCD ALFANUMERICA

CONEXION PREDETERMINADA DEL LCD  CON PROTON




PRINT

         La instruccion utilzada para el manejo de una pantalla LCD alfanumerica es PRINT y se usa segun la siguiente sintaxis:

     PRINT AT posicion_Y, posision_X, expresion1, expresion2,expresion3,....,

posicion_Y =>  corresponde a la linea donde se escribira
posicion_X => corresponde a la columna

        Luego de esto los datos a escribir separados por comas, estos pueden ser valores o expresiones matematicas, boleanas, y cadenas de texto.

       Las cadena de texto deben ser encerradas entre comillas, por ejemplo:

                PRINT AT 1,1, "HOLA MUNDO"
                PRINT AT 1,1 "HOLA","  ", "MUNDO"

      Tambien existen una serie de modificadores que permiten dar formato a los valores numericos que se desean visuaizar, son las siguientes:

     BIN          =>  Binario
     DEC        =>  Decimal
     HEX        =>  Hexadecimal
     SBIN       =>  Binario con signo
     SDEC      => Decimal con signo
     SHEX      =>  Hexadecimal con signo
     IBIN        =>  Binario con el caracter % al inicio
     IDEC       =>  Decimal con el caracter # al inicio
     IHEX       =>  Hexadecimal  con el caracter $ al inicio
     ISBIN     => Binario con signo y  con el caracter % al inicio
     ISDEC    => Decimal con signo y con el caracter # al inicio
     ISHEX    => Hexadecimal consigno y con el caracter $ al inicio
     REP c\n   = > Envia un caracter c, n veces
     STR array\n   = >  envia una parte de un arreglño
     CSTR cdata  0  =>   envia una cadena  definida en la instruccion cdata.

         Cuando utilizamos DEC, HEX O BIN, se puede determinar el numerpo de caracteres deseados colocandole un numero, si quisieramos 2 decimales seria, DEC2, cuatro decimales DEC4, si se omite este numero y simplemente se coloxca DEC, el po defecto es 3 decimales.

Ejemplo  1:

DIM VAR1 AS BYTE
   
VAR1 = 15


PRINT AT 1,1, "HOLA MUNDO"     'Muestra "HOLA MUNDO"
PRINT AT 2,1,  DEC VAR1                'Muestra 15
PRINT AT 2,1,  DEC4 VAR1             'Muestra 0015

PRINT AT 3,1, "VAR1 HEX = " , HEX VAR1  ' Muestra  "VAR1 HEX = F"
PRINT AT 4,1, "VAR1 BIN = " , BIN VAR1     '  Muestra "VAR1 BIN = 1111"
PRINT AT 6,1 ,"VAR1 HEX= " , HEX4 VAR1 '     Muestra "VAR1 HEX= 000F"

    Si es una variable punto flotante la que se quiere visualizar,  el digito que se le agrega a DEC, determina el numero de digitos  despues del punto decimal, por ejemplo:

       DIM FLT_VAR AS FLOAT
       FLT_VAR = 3.145

       PRINT DEC2 FLT_VAR            ' Muestra 3,14
       PRINT DEC4 FLT _VAR          ' Muestra 3,1400
       PRINT DEC1 FLT_VAR           ' Muestra 3,1

DECLARACIONES ASOCIADAS AL LCD

      Existen seis declaraciones para ser usadas con el LCD alfanumerico y la instruccion PRINT, y son :

DECLARE LCD_TYPE 1 or 0 , GRAPHIC or ALPHA

     Informa al compilador el tipo de LCD que se direccionara a traves de la instruccion PRINT,  1 es para Grafica y 0 para Alfanumerica, si esta declaracion no es usada, la configuracion por defecto es  del tipo Alfanumerico.


DECLARE LCD_INTERFACE 4 or 8


Informa al compilador cuantas lineas de datos seran usadas para el manejo del LCD, ocho o cuatro lineas.


DECLARE LCD_DTPIN PORT . PIN

     Asigna el puerto a ser usado por las lineas de datos del LCD,  esta puede ser conectada usando 8 lineas de datos ó cuatro lineas de datos, si se utilizan solo cuatro lineas, estas deben ser conectadas a los cuatro pines mas sgnificativos, o los cuatro menos significaivos, y esto puede ser configurado de la manera siguiente:


DECLARE LCD_DTPIN PORTB.0

' Usado para interface de cuatro lineas y deben ser conectadas desde RB0 hasta RB7

DECLARE LCD_DTPIN PORTB.4
' Usado para interface de cuatro lineas y deben ser conectadas desde RB4 hasta RB7

Si esta declaracion no es utilizada la configuracion por defecto es PORTB.4.


DECLARE LCD_LINES 1 , 2 , or 4


Informa al compilador el numero de lineas del LCD.

   Las LCD´s alfanumericas  vienen en un rango de medidas dadas por el numero de filas y columnas, el tipo mas popular es el de 16 columnas por dos fila (16X2),  aunque tamebien las de 16X4. Si esta declaracion no es usada la configuracion por defecto es de 2 lineas.


      Recomiendo en todo programa no obviar las declaraciones aunque se desee utilizar la configuiracion por defecto, el formato del codigo del programa lo desarrollo asi:


CODIGO DE EJEMPLO:

Device 16f877

XTAL 4

PORTB_PULLUPS = TRUE

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Configuracion del LCD'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
DECLARE LCD_TYPE 0 ' LCD alfanumerica
DECLARE LCD_INTERFACE 4 ' 4 lineas de datos
DECLARE LCD_DTPIN PORTB.4 ' lineas de datos al PORTB RB4->RB7
DECLARE LCD_ENPIN PORTB.2 ' EN al pin RB2
DECLARE LCD_RSPIN PORTB.3 ' RS al pin RB3
DECLARE LCD_LINES 4 ' LCD de cuatro lineas
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


Inicio:                             ' Etiqueta

print at 1,1, "Linea 1"
print at 6,1, "Linea 6"

Fin:                                 ' Etiqueta

ADIN (LEER ADC)

ADIN

Sintaxis

Variable = ADIN número de canal

Información general

Lee el valor del convertidor analogico a digital del microcontrolador.

Operadores

Variable - una variable definida por el usuario de tipo bit, byte, byte_array, palabra, word_array, dword, o flotar.

número del canal - una constante, variable o expresión. (0,1,2,3,4,5,.....)


Ejemplo

'Lee el valor desde el canal 0 del ADC y el lugar en la variable VAR1.

DECLARE ADIN_RES 10 'resultado de 10-bit requiere

RC DECLARE ADIN_TAD FRC 'OSC elegido

DECLARE ADIN_STIME 50 'Permitir 50us muestra de tiempo

DIM VAR1 como WORD

TRISA =% 00000001 'Configurar An0 (PORTA.0) como una variable

ADCON1 =% 10000000 'entrada analógica Ubicado en PORTA.0

VAR1 = 0 ADIN 'coloca la conversión en la variable VAR1



Declaraciones


Hay tres directivas de declarar para el uso con ADIN. Estos son: -


DECLARE ADIN_RES 8, 10 o 12

Establece el número de bits en el resultado. Si no se utiliza esta declaracion, el valor por defecto es la resolución maxima del tipo utilizado PICmicro.


DECLARE ADIN_TAD 2_FOSC, 8_FOSC, 32_FOSC, o FRC.

        Fuente de reloj Establecida para el ADC. Todos los PICmicros compatibles tienen cuatro opciones para la fuente de reloj utilizado por el ADC. 2_FOSC, 8_FOSC y 32_FOSC,son proporcionados por oscilador externo, mientras que la CRF es el oscilador interno de RC del PICmicro. En lugar de utilizar los nombres predefinidos de la fuente de reloj, los valores de 0 a 3 puede ser utilizado. Estos reflejan la configuración de bits 0-1 en ADCON0 registro.

         Se debe tener cuidado al emitir esta declaracion, un tipo equivocado de fuente de reloj puede resultar en baja resolución, o ninguna conversión. CRF es la configuración predeterminada si no se realiza esta declaracion.


DECLARE ADIN_STIME 0 a 65535 microsegundos (nosotros).

        Permite a los condensadores internos que se cargue ncompletamente antes que se tome una muestra. Esto puede ser un valor de 0 a 65535 microsegundos (us). Un valor demasiado pequeño puede resultar en una reducción de la resolución. Mientras que un valor demasiado elevado se traducirá en una velocidad de conversión pobre sin ningún tipo de resolución extra alcanzado.

        Un valor típico para ADIN_STIME es de 50 a 100. Esto permite que un tiempo de carga adecuada, sin perder demasiada velocidad de conversión. Pero la xperimentación producirá el valor correcto para su requerimiento particular. El valor por defecto si no se utiliza esta declaracion es de 50.

Notas

        Antes de que el comando ADIN puede ser utilizado, el registro TRIS deben ser manipulados apropiadamente para que el pin deseado sea una entrada. Además, el registro ADCON1 debe definirse en función al PIN que se requiere como una entrada analógica, y en algunos casos, para configurar el formato del resultado de la conversión. Vea las numerosas fichas técnicas de Microchip para obtener más información sobre estos registros y cómo configurarlo correctamente para el dispositivo específico usado.

        Si varias conversiones se están aplicando a continuación, se debe utilizar un pequeño retraso después del comando ADIN. Esto permite que los condensadores internos de la ADC puedan cargarser íntegramente: -

Ejemplo:

inicio:

VAR1 = ADIN 3 'Coloca la conversión en la variable VAR1


Espere DELAYUS 1 'para 1us


GOTO inicio 'Leer el ADC para siempre

FOR....NEXT

Sintaxis


FOR Variable = ValorInicial TO ValorFinal [ STEP { Incremento } ]

        {Instrucciones}
        {Instrucciones}
        {Instrucciones}
        .
        .

NEXT



Información general


          El bucle for ...next, se utiliza para ejecutar una instrucción o una serie de declaraciones de una determinada cantidad de veces.

Operadores

Variable - se refiere a una variable de índice utilizado por el bucle. Esta variable de índice en sí puede ser utilizado en el cuerpo del código, pero tenga cuidado de alterar su valor dentro del bucle ya que esto puede causar muchos problemas.

ValorInicial - es el valor de que se le asigna inicialmente al Operador Variable le. Este no tiene por qué ser un número real - que podría ser el contenido de otra variable.

ValorFinal - es el valor del Operador Variable  que genera la terminacion del bucle. Esto no tiene que ser un número real - que podría ser el contenido de otra variable, o una expresión.

Incremento - es una constante o variable opcional por el que el operador  Variable aumenta o disminuye con cada viaje a través del bucle FOR ... NEXT.  Si  se desea que Variable tome valores decrementales un signo  menos debe preceder a Incremento.

Ejemplo 1

' Muestra en un LCD y en formato decimal, todos los valores que la variable  WRD
' toma en el bucle FOR...NEXT


' El bucle se realiza 1000 veces ,  ya que la variable WRD, inicia con el valor 0 y va uncrementando
' de 2 en dos hasta llegar a 2000 y sale del bucle.

DIM WRD as WORD

FOR WRD = 0 TO 2000 STEP
         PRINT Dec WRD ," "     ' Muestra el  Valor de WRD en el LCD
NEXT       ' cierre del bucle

Ejemplo 2

' Muestra en Decimal los vallores de WRD
' en este ejemplo el bucle se realiza 1000 veces ya que la variable WRD inicial con el valor
' 2000 y va decrementando de 2 en 2 hasta llegar a cero para finalizar el bucle.


DIM WRD as WORD

FOR WRD = 2000 TO 0 STEP -2 '

PRINT Dec WRD ," " '       ' muetra la variable WRD en el LCD en formato decimal
NEXT '      cierre del bucle for..next

30 may 2010

SEROUT

Sintaxis


         SEROUT Tpin { \ Fpin } , Baudmode , { Pace, } { Timeout , Tlabel, } [ OutputData ]


Informacion General
        Trasmite Datos seriales Asincronos (p.e. RS232 datos).


Vea Tambien:

         Comunicacion Serial - SERIN

PROGRAMADOR PROTON (MICROCODE LOADER)

        EL Cargador de microcodigo (Microcode Loader) permite programar el microcontrolador en su circuito de aplicacion , a traves del puerto serial del PC; esta aplicacion esta presente en PROTON IDE.

       Esto permite contar con la "progrmacion in circuit", y no tener que extraer el microcontrolador  para agragarle un codigo nuevo ò modificfado, dandole flexibilidad a su diseño.




Requisitos

Para su implementacion se necesita el uso del CI MAX232, en la siguiente configuracion:




       Ademas se requiere grabarle el FIRMAWARE del microcontrolador, esto se hace una sola vez,  y los codigos se pueden econtrar dentro de la carpeta:

C:\Archivos de programa\Crownhill\ProtonIDELite\MCLoader

     Los FIRWARE son especificos para cada microcontarolador y ademas dependiendo del oscilador a utilizar (4 MHZ , 20 MHZ):

10 may 2010

_ CARACTER DE CONTINUACION DE LINEA

        Lineas que son muy largas para mostrar, pueden ser cotinuadas en la linea inferior por medio del uso del caracter "_"; y este solo puede ser utilizado luego de un delimitador coma ","; por ejemplo :


VAR1 = LOOKUP VAR2,[1,2,3,_

4,5,6,7,8]


o tambien


PRINT AT 1,1,_

"HELLO WORLD",_

DEC VAR1,_

HEX VAR2

9 may 2010

CADENAS (STRINGS)

        EL  PROTON compiler soporta variables de cadena ó strings, solo cuando se trabaja con dispositivos de 16-bit core.


        La sintaxis para crear cadenas es el siguiente:

                    DIM  Nombre as STRING * Largo

        Nombre => cualquiera que no sea palabra reservada
        largo = > entre 0-255, es el numero de caracteres que puedes almacenar la cadena.

     La linea de abajo crea una cadena de nombre ST que puede almacenar 20 caracteres.

   DIM ST as STRING * 20


Concatenacion

    Dos o mas cadenas puedes ser concatenadas  usando el operador mas (+) :

              SOURCE_STRING1 = "HELLO 
              SOURCE_STRING2 = "WORLD" '  
     'Ambas cadenas son concatenadas en la cedana DEST_STRING

             DEST_STRING= SOURCE_STRING1+ SOURCE_STRING2




Maniplular Cadenas por Partes

        Cada posicion de una cadena puede ser accedido usando el mismo nombre de la cadena y con el uso de los corchetes, ejemplo:

            SOURCE_STRING[0] = "H"

         Coloca el caracter "H" en la primera posicion, ó posicion cero de la cadena.

7 may 2010

ARREGLOS (ARRAYS)


         El PROTON compiler SOPORTA variables de multiples elementos del tipo byte o word. Un arreglo es un grupo de variables de el mismo tipo  (8-bits ó 16-bits), que comparten el mismo nombre , pero coocadas en celdas numeradas llamadas elementos.

        Un arreglo se define usando las siguiente sintaxis:
                      DIM Nombre[ largo] AS BYTE
                      DIM Nombre[largo ] AS WORD

             Nombre => cualquiera, excluyendo las palabras reservadas
             largo     => (0-255) para el tipo byte, (0-128) para el tipo word.

    Ejemplo:

       DIM MYARRAY[10] AS BYTE ' Crea un arreglo de 10 elementos del tipo byte.

       DIM MYARRAY[10] AS WORD ' Creaun arreglo de  10 elementos del tipo word
 
 
    Codigo Ejemplo:
 
          DEVICE 16F84 '

          DIM MYARRAY[10] AS BYTE ' Creaun arreglo de 10 elementos del tipo byte.
          DIM INDEX AS BYTE ' Crea una variable normal del tipo   BYTE.


        FOR INDEX = 0 TO 9 ' Repite con  INDEX= 0,1,2...9
                      MYARRAY[INDEX] = INDEX * 10 '
       NEXT


      FOR INDEX = 0 TO 9 ' Repite con  INDEX= 0,1,2...9
                PRINT AT 1 , 1 , DEC MYARRAY [INDEX] '
                DELAYMS 500 'retardo de 500 ms
      NEXT


      STOP


6 may 2010

PALABRAS RESERVADAS


     Las palabras de la lista son protejidas para el uso interno del compilador. asegurese de no usar cuanquiera de ellas como nombre de variables o etiquetas, de no ser asi se pueden producir errores.



A

ABS, ACOS, ACTUAL_BANKS, ADC_RESOLUTION, ADIN, ADIN_RES, ADIN_STIME, ADIN_TAD

ALL_DIGITAL, ASM, AVAILABLE_RAM, ASIN, ATAN



B

BANK0_END, BANK0_START, BANK10_END, BANK10_START, BANK11_END, BANK11_START

BANK12_END, BANK12_START, BANK13_END, BANK13_START, BANK14_END, BANK14_START

BANK15_END, BANK15_START, BANK1_END, BANK1_START, BANK2_END, BANK2_START

BANK3_END, BANK3_START, BANK4_END, BANK4_START, BANK5_END, BANK5_START

BANK6_END, BANK6_START, BANK7_END, BANK7_START, BANK8_END, BANK8_START

BANK9_END, BANK9_START, BANK_SELECT_SWITCH, BANKA_END, BANKA_START

BIN, BIN1, BIN2, BIN3, BIN4, BIN5, BIN6, BIN7, BIN8, BIN9, BIN10, BIN11, BIN12

,BIN13, BIN14, BIN15, BIN16, BIN17, BIN18, BIN19, BIN20, BIN21, BIN22, BIN23, BIN24, BIN25

,BIN26, BIN27, BIN28, BIN29, BIN30, BIT, BOOTLOADER, BOX, BRANCH

BRANCHL, BREAK, BRESTART, BSTART, BSTOP, BUS_DELAYMS, BUSACK, BUSIN, BUSOUT

BUTTON, BUTTON_DELAY, BYTE



C

CALL, CASE, CCP1_PIN, CCP2_PIN, CDATA, CERASE, CHR$, CIRCLE, CLEAR, CLEARBIT, CLS

CON, CONFIG, CONTEXT, CORE, COS, COUNT, COUNT_ERRORS, COUNTER, CREAD, CURSOR, CWRITE



D

DA, DATA, DB, DC, DCD, DE, DEC, DEC1, DEC2, DEC3, DEC4, DEC5, DEC6, DEC7, DEC8, DEC9, DEC10

DECLARE, DEBUG, DEFINE, DELAYMS, DELAYUS, DEVICE

DJC, DJNC, DJZ, DJNZ, DIG, DIM, DISABLE, DIV2, DT, DTMFOUT, DW, DWORD



E

EDATA, EEPROM_SIZE, ELSE, ELSEIF, ENABLE, END, ENDSELECT, ENDASM

ENDIF, ENDM, EQU, EREAD, ERRORLEVEL, EWRITE, EXITM, EXP, EXP10, EXPAND

EXP



F

FILE_REF, FLASH_CAPABLE, FLOAT, FONT, FONT_ADDR, FOR, FREQOUT, FSRSAVE



G

GETBIT, GLCD_CS_INVERT, GLCD_FAST_STROBE, GOSUB, GOTO



H

HBRESTART, HBSTART, HBSTOP, HBUS_BITRATE, HBUSACK

HBUSIN, HBUSOUT, HEX, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7, HEX8

HIGH, HPWM, HRSIN, HRSOUT, HSERIAL_BAUD

HSERIAL_CLEAR, HSERIAL_PARITY, HSERIAL_RCSTA, HSERIAL_SPBRG, HSERIAL_TXSTA



I

I2CREAD, I2CWRITE, IBIN, IBIN1, IBIN2, IBIN3, IBIN4, IBIN5, IBIN6, IBIN7, IBIN8, IBIN9, IBIN10, IBIN11, IBIN12

IBIN13, IBIN14, IBIN15, IBIN16, IBIN17, IBIN18, IBIN19, IBIN20, IBIN21, IBIN22, IBIN23, IBIN24, IBIN25

IBIN26, IBIN27, IBIN28, IBIN29, IBIN30,ICD, IDATA, IF

IHEX, IHEX1, IHEX2, IHEX3, IHEX4, IHEX5, IHEX6, IHEX7, IHEX8

INC, INCLUDE, INKEY, INPUT, INTERNAL_BUS, INTERNAL_FONT, IJC, IJNC, IJNZ, IJZ

ISBIN, ISBIN1, ISBIN2, ISBIN3, ISBIN4, ISBIN5, ISBIN6, ISBIN7, ISBIN8, ISBIN9, ISBIN10, ISBIN11, ISBIN12

ISBIN13, ISBIN14, ISBIN15, ISBIN16, ISBIN17, ISBIN18, ISBIN19, ISBIN20, ISBIN21, ISBIN22, ISBIN23, ISBIN24, ISBIN25

ISBIN26, ISBIN27, ISBIN28, ISBIN29, ISBIN30

ISDEC, ISDEC1, ISDEC2, ISDEC3, ISDEC4, ISDEC5, ISDEC6, ISDEC7, ISDEC8, ISDEC9, ISDEC10

ISHEX, ISHEX1, ISHEX2, ISHEX3, ISHEX4, ISHEX5, ISHEX6, ISHEX7, ISHEX8



J



K

KEYPAD_PORT



L

LCD_CS1PIN, LCD_CS2PIN, LCD_DTPIN, LCD_DTPORT, LCD_ENPIN, LCD_INTERFACE

LCD_LINES, LCD_RSPIN, LCD_RWPIN, LCD_TYPE, LCDOUT, LCDREAD, LCDWRITE

LEN, LEFT$ LET, LIBRARY, LINE, LOADBIT, LOCAL, LOG, LOG10, LOOKDOWN, LOOKDOWNL, LOOKUP, LOOKUPL, LOW



M

MACRO_PARAMS, MAX, MID$, MIN, MSSP_TYPE



N

NCD, NEXT



O

ON, ON_INTERRUPT, ON_LOW_INTERRUPT, ONBOARD_ADC, ONBOARD_UART

ONBOARD_USB, OREAD, ORG, OUTPUT, OWRITE



P

PAGE, PAGESEL, PAUSE, PAUSEUS, PEEK, PEEKCODE, PICMICRO_PAGES

PIXEL, PLOT, POKE, POKECODE, POP, PORTB_PULLUPS, POT, POW, PRINT, PSAVE

PULSIN, PULSIN_MAXIMUM, PULSOUT, PUSH, PWM



Q



R

RAM_BANK, RAM_BANKS

RANDOM, RCIN, RCTIME, READ, REM, REMARKS, REMINDERS, REP

REPEAT, RES, RESET_BANK, RESERVE_RAM, RESTORE, RESUME, RETURN, REV

RIGHT$, ROR, ROL, RSIN, RSIN_MODE, RSIN_PIN, RSIN_TIMEOUT, RSOUT

RSOUT_MODE, RSOUT_PACE, RSOUT_PIN



S

S_ASM, SBIN, SBIN1, SBIN2, SBIN3, SBIN4, SBIN5, SBIN6, SBIN7, SBIN8, SBIN9, SBIN10, SBIN11, SBIN12

SBIN13, SBIN14, SBIN15, SBIN16, SBIN17, SBIN18, SBIN19, SBIN20, SBIN21, SBIN22, SBIN23, SBIN24, SBIN25

SBIN26, SBIN27, SBIN28, SBIN29, SBIN30, SCL_PIN, SDEC, SDEC1, SDEC2, SDEC3, SDEC4, SDEC5, SDEC6

SBREAK, SDEC7, SDEC8, SDEC9, SDEC10

SDA_PIN, SERIAL_BAUD, SEED, SELECT, SERIAL_DATA

SERIN, SERIN2, SEROUT, SEROUT2, SERVO, SERIAL_PARITY

SET, SET_BANK, SETBIT, SET_DEFAULTS, SET_OSCCAL, SHIFT_DELAYUS

SHEX, SHEX1, SHEX2, SHEX3, SHEX4, SHEX5, SHEX6, SHEX7, SHEX8

SHIN, SHOUT, SIN, SLEEP, SLOW_BUS, SNOOZE

SOUND, SOUND2, SQR, SSAVE, STEP, STOP, STR, STRN, STRING, STR$

STAMP_SIN, STAMP_COS, STAMP_SQR, SWAP, SYMBOL



T

TAN, THEN, TO, TOGGLE, TOLOWER, TOUPPER



U

UDATA, UNPLOT, UNTIL, UPPER

USB_CLASS_FILE, USB_DESCRIPTOR, USB_SHOW_ENUM, USBIN, USBINIT, USBOUT



V

VAL, VAR, VARIABLE



W

WAIT, WARNINGS, WATCHDOG, WEND, WHILE, WORD, WRITE, WSAVE



X

XIN, XOUT, XIN_TRANSLATE, XOUT_TRANSLATE, XTAL



Y



Z

5 may 2010

CONSTANTES Y SIMBOLOS

 DECLARACION DE CONSTANTES

        Las constantes pueden ser creadas de la misma manera que las variables. Estas pueden ser para uso informativo o como nombre de una constante numerica. Una vez que una constante es declarada el valor de esta no puede ser modificado.

       La manera de declarar una variable es la siguiente:

        DIM Label as Constant expression

      Ejemplo :

      DIM MOUSE as 1   ; el valor de la constante MOUSE sera 1
       DIM MICE as MOUSE * 400 ; el valor de la constante MICE  sera 1*400

       DIM MOUSE_PI as MOUSE + 3.14; ; el valor de la constante MOUSE_PI sera +3,14



DECLARACION DE SIMBOLOS
        Symbol proporciona otro método para asignar alias a las variables y constant. Symbol no puede ser usado para crear una variable. Constantes declaradas con el empleo de SYMBOL no usan la RAM en el PICmicro.

Ejemplos:

SYMBOL CAT = 123

SYMBOL TIGER = CAT
SYMBOL MOUSE = 1
SYMBOL TIGOUSE = TIGER + MOUSE '
SYMBOL PI = 3.14
SYMBOL FL_NUM = 5.0 '

4 may 2010

REGISTROS DE HARDWARE Y PUERTOS

        Todos los registros del hardward PICmicro, incluyendo los puertos, pueden ser accedidos igual que cuquier variable. Esto quiere decir que pueden ser leidas o escritas con el uso de ecuaciones directamente:

Por ejemplo:

PORTA = %01010101 ' Escribe el valor binario en el puerto A

VAR1 = WRD * PORTA 'Multiplica la variable WRD y el puerto A



         El compilados tambien puede combinar registros de 16 bits como TMR1, en una variable del tipo word. Lo cual simplifica la lectura y escritura de estos registros.

Ejemplo:



DIM TIMER1 AS TMR1L.WORD

TIMER1 = 12345

        Se combinan TMR1H, y TMR1L en una variable TIMER1, luego TMR1 se carga con el valor 12345.

DIM TIMER3 AS TMR3L.WORD ' Combine TMR3L y TMR3H

DIM AD_RESULT AS ADRES.WORD ' Combina ADRESL y ADRESH

DIM MUL_PROD AS PRODL.WORD ' Combina PRODL y PRODH

3 may 2010

REPRESENTACIONES NUMERICAS

PROTON reconoce cuatro diferentes representaciones numericas:

Binario, por el prefijo %, por ejemplo:

PORTB = %11110000

Hexadecimal, por el prefijo $, por ejemplo:

PORTC = $11110000

Caracter byte, se utiliza colocando los cvaracteres entre comillas y se corresponden en decimal a su correpondiente en codificacion ASCII. Por ejemplo:

var1 = "a" ; y representa el valor 97.

Decimal, los valores decimales no requieren prefijo.

PORTD = 254

Punto Flotante, es creado por el uso del punto decimal. Por ejemplo:

var2 = 3.1

2 may 2010

FORMATO GENERAL


1.-El compilador no  diferencia mayusculas de minusculas, excepto cuando procesamos constantes entre comillas como "Hola".

2.- Multiples instrucciones pueden ser combinada en la misma linea separando cada una por dos puntos (":").


Por ejemplo:

TRISB = 000000 : FOR VAR1 = 0 TO 100 : PORTB = VAR1 : NEXT

1 may 2010

FUNDAMENTOS DE PROTON BASIC

PROTON IDE

       El compilador Proton Basic es un lenguaje de programación de nueva generación que hace mas fácil y rápido el manejo de microcontroladores Pic micro de Microchip. El lenguaje Basic es mucho más fácil de leer y escribir que el lenguaje ensamblador Microchip.

       El Proton Basic produce un código que puede ser programado para una variedad de micro controladores PIC que tengan de 8 a 68 pins y varias opciones en el chip incluyendo convertidores A/D, temporizadores y puertos seriales.


Bases del Protón Basic


Identificadores

        Un identificador es simplemente un nombre. Son usados en Pronto Basic como etiquetas de líneas y nombres de variables. Un identificador es cualquier secuencia de letras, dígitos y símbolos, aunque no deben comenzar con un dígito. Los identificadores no distinguen las letras mayúsculas de las minúsculas, por lo que etiqueta, ETIQUETA, Etiqueta son todas tratadas como equivalentes. Aunque las etiquetas pueden tener cualquier número de caracteres de longitud, Protón Basic solamente reconoce los primeros 32.


Etiquetas

       Para marcar líneas que el programa puede desear referenciar con comandos GOTO ó GOSUB, Proton BAsic usa tiquetas de línea y no permite número de línea y no requiere que cada línea sea etiquetada. Cualquier línea puede comenzar con una etiqueta de línea que es simplemente un identificador seguido por dos puntos (:)

ejemplo

                                  here:


                                 Goto here

Variables

       Variables es donde se guardan datos en forma temporaria en el programa. Son creadas usando la palabra clave DIM. Pueden ser bits , bytes, word, dword, float y string.

        El Espacio para cada variable es automáticamente destinado en la memoria RAM del microcontrolador.

        El formato para crear una variable es el siguiente:


                    DIM etiqueta AS tipo


       Etiqueta es cualquier identificador excluyendo palabras claves como se describe anteriormente.

       Tipo es bit, byte , word , dword or float.

Algunos ejemplos de declaracion de varibles de cada tipo son:

DIM   Var1      AS BYTE  ' Crea una  variable de 8-bit sin signo  (0 - 255)

DIM   Var2      AS BIT      ' Crea una variable de un simple bit (0 - 1)
DIM   Var3      AS WORD ' Crea una variable de 16-bit sin  signo (0 - 65535)
DIM   Var4 AS DWORD   ' Crea a variable de 32-bit con signo (-2147483647 , +2147483647)
DIM   Var5      AS FLOAT  '  Crea una variable de 32-bit punto flotante.
DIM    ST       AS STRING * 20 ' Crea una cadena con capacidad de 20 caracteres (8-bit)

Alias

       DIM también puede ser usado para crear un alias para una variable. Esto es muy útil para acceder al interior de una variable.

                              Dim Var1 as Var2 ´Var2 es otro nombre de var1


                              Dim VAr3 as Portb.1 ´asigna el alias Var3 a la patilla RB0

Arreglos

       Los arreglos de variables pueden ser creados en una manera similar a las variables.

                                 Dim Etiqueta [tamaño] as tipo


       Etiqueta es cualquier identificador, excluyendo palabras claves, como se describió anteriormente.

       Tipo es BIT, BYTE ó WORD. Número de elementos es cuantos lugares en el arreglo se desean. Algunos ejemplos de creación de arreglo son los siguientes:

                             DIM sharks[10] as byte


                             DIM var3[10] as Word

         La primera ubicación dentro del arreglo es el elemento cero. Dada la forma en que los arreglos están localizados en memoria hay límites de tamaño para cada tipo.


Constantes

        Las llamadas constantes pueden ser creadas de manera similar a las variables. Puede ser mas conveniente usar un nombre de constante en lugar de un número constante. Si el número necesita ser cambiado, únicamente puede ser cambiando en un lugar del programa donde se define la constante. No pueden guardarse datos variables dentro de una constante. Ejemplos :

                                    Dim Mice as 4.13

       En este ejemplo la constante mice es de 4,13 y la misma no puede ser modificada durante el transcurso del programa.


Constantes Numéricas

       Proton BAsic permite definir constantes numéricas en tres bases: decimal, binario y hexadecimal. Valores binarios son definidos usando el prefijo “%” y valores hexadecimales usando el prefijo “$”. Los valores decimales se toman por defecto y no requieren prefijo. Ejemplos:

                           100 ´ valor decimal 100

                           %100 ´ valor binario para el decimal 4.

                          $100 ´ valor hexadecimal para el decimal 256.

Pines

       A los pines de Microcontrolador, se puede acceder de diferentes modos. El mejor camino para especificar un pin para una operación, es simplemente usar sus nombres PORT y un número de bit:

                            PORTB.1=1 ‘ Coloca PORTB, bit 1 a 1

 
      Para recordar fácilmente para qué puede ser usado un pin, debe serle asignado un nombre usando el comando DIM. De esta manera, el nombre puede ser utilizado luego en cualquier operación.


Comentarios

       Un comentario de Protón Basic comienza con la palabra clave REM o el apóstrofe (´). Todos los demás caracteres de esa línea se ignoran. REM es una única palabra clave y no es una abreviación de REMark, por lo tanto, los nombres de variables pueden comenzar con REM (aunque REM por sí mismo no es válido).


Declaraciones múltiples

       Para permitir programas mas compactos y agrupamientos lógicos de comandos relacionados, Proton Basic soporta el uso de (:) para separar comandos ubicados en la misma línea. Los siguientes dos ejemplos son equivalentes.

                            W2 = W0
                            W0 = W1
                            W1 = W2
Es lo mismo que:

                            W2 = w0 : W0 = W1 : W1 = W2

En los dos casos, el tamaño del código generado es el mismo.


Operadores Matemáticos

       Protón Basic efectúa todas las operaciones matemáticas en orden jerárquico. Esto significa que existe precedencia para los operadores .Multiplicación y división son efectuados antes que suma y resta , por ejemplo.

       Para asegurarse que las operaciones son efectuadas en el orden que se desea, se usan paréntesis para agrupar las operaciones.

                                       A = ( B + C ) * ( D - E )

       Todas las operaciones matemáticas se realizan sin signo y con una precisión de 16 bit.


Los operadores soportados son :

Operador matemático Descripción

                            + Suma

                            - Resta

                            * Multiplicación

                            ** 16 bits superiores de la multiplicación

                            */ 16 nits medios de la multiplicación

                             / División

                            // Resto (módulo)

                           << Desplazamiento izquierdo

                           >> Desplazamiento derecho

                          ABS Valor absoluto

                          COS Coseno

                          DIG Digito

                          SIN Seno

                          SQR Raiz cuadrada


Operadores lógicos

       Los operadores lógicos difieren de las operaciones de bit inteligente. Entregan un resultado CIERTO / FALSO de su operación .Valores 0 son tratados como falso. Cualquier otro valor es cierto. Se usan junto a operadores de comparación en una declaración IF .. THEN .Los operadores soportados son :


Operador Descripción

        AND o && AND logico

        OR o I I OR logico

        XOR o ^ ^ OR exclusivo logico

        NOT AND NAND logico

        NOT OR NOR logico

        NOT XOR NXOR logico



Relational operators are used to compare two values as shown in the list below. The result can be used to make a decision regarding program flow.




Operadores del tipo   Expression de Relacion

        Los Operadores de Relacion son usados para comparar dos valores como se muestra en la lista abajo. El resultado es boleano y pouede ser usado para tomar deiciones en el flujo del programa.

           Operador             Relacion              Ejemplo
                 =                     Igualdad                X = Y
                <>                  desigualdad             X <> Y
                 <                     menor que             X < Y
                 >                    mayor que              X > Y
                <=              menor o igual que        X <= Y
                >=              mayor o igual que        X >= Y


CALL etiqueta

        Ejecuta la subrutina ensamblador llamada etiqueta. Normalmente se usa GOSUB para ejecutar una subrutina .La principal diferencia entre GOSUB y CALL, es que con ésta última no se chequea la existencia de etiquetas hasta el momento de ensamblar. Usando CALL se puede acceder a una etiqueta en una sección de lenguaje ensamblador, lo que es inaccesible mediante Protón Basic .

        Dentro de los comandos de Protón Basic mas estudiados para la elaboración del diseño se describen los Siguientes:


END

        Detiene la ejecución del proceso y entra en modo de baja potencia .Todos los pins de I/O permanecen en el estado en que se encuentran ,END trabaja ejecutando una instrucción SLEEP continua dentro de un loop . Un END , STOP ó GOTO deben ser colocados al final de un programa para evitar pasar del límite de la misma u comience nuevamente .


FOR .. NEXT


         FOR Count = Start TO End {STEP {-} Inc}

                {Body}

        NEXT {Count}

        
        El loop FOR .. NEXT permite a los programas ejecutar un número de declaraciones ( Body ) un numerode veces , usando una variable como contador . Debido a su complejidad y versatilidad , es mejor describirla paso a paso .

        El valor de Start se asigna a la variable índice ,Count , que puede ser una variable de cualquier tipo . Se ejecuta el Body . Body es opcional y puede ser omitido ( quizás por un loop de demora ). El valor de Inc es sumado a ( ó restado si se especifica “-“ ) Count .Si no se define una cláusula STEP , se incrementa Count en uno . Si Count no pasó End ó desbordó el tipo de variable , la ejecución vuelve al paso 2) . Si el loop necesita contar más de 255 ( Count > 255 ) , se debe usar una variable de tamaño word .


IF ...THEN

        IF Comp { AND/OR Comp ... } THEN
                {Declaración}
        ELSE
              { Declaración}
       ENDIF

        Efectúa una ó más comparaciones .Cada término Comp puede relacionar una variable con una constante ú otra variable e incluye uno de los operadores listados anteriormente . En la segunda forma, IF..THEN puede ejecutar condicionalmente un grupo de declaraciones que sigan al THEN. Las declaraciones deben estar seguidas por un ELSE o un ENDIF para completar la estructura.


ON INTERRUPT GOTO Label

        Permite el manejo de las interrupciones del micro controlador por medio de una subrutina . Existen dos formas de manejar interrupciones usando Proton Basic . La primera es escribir una subrutina de interrupción en lenguaje ensamblador .Esta es la forma de manejar interrupciones con la menor latencia y el menor overhead . El segundo método es escribir un handler ( manejador ) de interrupciones.Es similar a una subrutina , pero termina con un RESUME . Cuando ocurre una interrupción , se marca con una bandera .Cuando la ejecución de la declaración que se estaba ejecutando termina , el programa salta al handler de interrupciones indicado en Label.

        Una vez que termina el trabajo del handler , una declaración RESUME envía el programa de vuelta a donde estaba cuando ocurrió la interrupción , tomando todo como lo dejó .


DISABLE y ENABLE

        Permiten que distintas secciones de un programa se ejecuten sin la posibilidad de ser interrumpidas .El lugar más notorio para usar DISABLE es justo antes del actual handler de interrupciones. O el handler puede ser colocado antes que la declaración ON INTERRUPT ya que la bandera de interrupciones no se chequea antes del primer ON INTERRUPT en un programa .