5 dic 2010

ADIN

ADIN     (ADQUISICION  ANALOGICO DIGITAL)


Sintaxis

   Variable1 = ADIN NumeroCanal 


Detalles

    Lee el valor del conversor analogico digital del PisMicro.


Ejemplo


Ejemplo                            'Leer el valor del canal 0 del ADC y el lugar en la variable VAR1.

DECLARO ADIN_RES 10                   '10 bits resultado requerido
RC DECLARE ADIN_TAD FRC          'OSC elegido
DECLARO ADIN_STIME 50               'Permitir 50us tiempo de la muestra

DIM VAR1 como WORD

TRISA =% 00000001           'Configurar An0 (PORTA.0), como aporte
ADCON1 =% 10000000     'Ajuste de entrada analógica en PORTA.0
VAR1 = ADIN 0                  'Lugar de la conversión en la variable VAR1



Declaraciones:



Hay tres directivas de declaracion para su uso con ADIN. Estas son: -



            DECLARO ADIN_RES 8, 10, o 12

        Establece el número de bits en el resultado. Si esto no se declara, el valor por defecto es la maxima resolución des PIC a utilizar. Por ejemplo, la gama 16F87x dará lugar a una resolución de 10 bits, junto con los dispositivos de núcleo de 16 bits, mientras que el estándar de tipos PICmicro producirá un resultado de 8 bits. Usando lo anterior permite declarar un resultado de 8 bits que se obtendrán de los tipos de PIC de 10 bits, pero no de 10 bits de los tipos de 8 bits.


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

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

       Se debe tener cuidado al emitir este declarar, como el tipo equivocado de la fuente de reloj puede resultar en una pobre resolución, o sin conversión.  CRF es la configuración predeterminada si se declaran no se publicó la lista de BASIC.


        DECLARO ADIN_STIME 0 a 65535 microsegundos (nosotros).

       Permite a los condensadores internos  cargarse por completo antes que se tome una muestra. Esto puede ser un valor de 0 a 65535 microsegundos. Un valor demasiado pequeño puede resultar en una reducción de la resolución. Mientras que un valor demasiado elevado se traducirá en la velocidad de conversión.
        Un valor típico para ADIN_STIME es de 50 a 100. Esto permite que el tiempo de carga adecuada sin perder velocidad de conversión. Pero la experimentación producirá el valor adecuado para su requerimiento particular. El valor por defecto si se declaran no se utiliza en el listado básico es de 50.


Notas
     
        Antes de que el comando ADIN puede ser utilizado, el registro TRIS apropiado debe ser manipulado para ajustar el  canal en que se desee la  entrada Analogica. Además, el registro ADCON1 se debe establecer de acuerdo con el canal en que se requiera una entrada analógica, y en algunos casos, para configurar el formato del resultado de la conversión.

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

ACOS

ACOS           (ARCO-COSENO)

Sintaxys

   Variable1 = ACOS Variable2



Detalles

     Deduce el Arco Coseno de una Variable.
    El Valor de la Variable2 debes estra entre -1 a 1.

Ejemplo:
FLOATIN = 0.8

FLOATOUT = ACOS FLOATIN

PRINT DEC FLOATOUT


Notas:

      ACOS no está implementada en los dispositivos de 12 o 14 bits, sin embargo, con la funcionalidad adicional, y la memoria más lineal que ofrecen los dispositivos de base de 16 bits y  de 32 bits de punto flotante,  el  ARC COSENO esta implementada.

      La trigonometría de punto flotante es abarca amplios recursos de memoria, así que no se sorprenda si una gran parte de la memoria del  PIC se utiliza con un solo operador. Esto también significa que la trigonometría de punto flotante es relativamente lenta para operar.

ABS (COMANDO)

ABS  (VALOR ABSOLUTO)

Sintaxys

Variable = ABS Variable

Detalles
Retorna el Valor Absoluto de un numero.

Ejemplo:

DWD1 = -1234567
DWD2 = ABS DWD1
PRINT DEC DWD2           ' Muestra el Resultado "1234567"

19 sept 2010

MATEMATICA DE PUNTO FLOTANTE

           El compilador PROTON puede realizar calculos de Punto Flotante (32 x 32 bits IEEE 754).


           Declarar una variable como FLOAT permitirá los cálculos de punto flotante con esa variable.

La declaracion de una variable Punto Flotante se efectua de la siuiente manera;

       DIM VAR_FLT AS FLOAT

La declaracion de una Constante de Punto Flotante se efectua de la siuiente manera;


        SÍMBOLO PI = 3,14             
        SÍMBOLO FL_NUM = 5,0


       La aritmética de punto flotante no es lo máximo en exactitud, es simplemente una forma de comprimir un valor complejo o grande en un espacio pequeño (4 bytes en el caso del compilador). Resultados perfectamente adecuados por lo general se puede obtener de la escala correcta de variables de tipo entero, con un aumento en la velocidad y un ahorro de memoria RAM y el espacio de código. 32 bits de matemáticas de punto flotante es muy intensa ya que el microcontrolador PICmicro es sólo un procesador de 8 bits. También consume grandes cantidades de memoria RAM y espacio de los códigos para su funcionamiento, por lo tanto use siempre el  punto flotante con moderación, y sólo cuando sea estrictamente necesario. El punto flotante no está disponible en PICmicros núcleo de 12-bit debido a las restricciones de memoria, y es más eficiente cuando se utiliza con los dispositivos básicos de 16-bit debido al código más lineal y especificaciones de RAM.

Formato de punto flotante

        El compilador PROTON utiliza la variación del microchip del formato IEEE 754 de punto flotante. Las diferencias con la norma IEEE 745 son menores, y bien documentado en la nota de aplicación AN575 de Microchip (descargable en www.microchip.com).

        Números de punto flotante se representan en formato modificado IEEE-754. Este formato permite que a las rutinas de punto flotante aprovechar la arquitectura del PICmicro y reducir la cantidad de sobrecarga requerida en los cálculos. La representación se muestra a continuación en comparación con las normas del formato IEEE-754: donde s es el bit del signo, y es el LSB del exponente y x es un marcador de posición para la mantisa y exponente bits.

       Los dos formatos se pueden convertir fácilmente de una a la otra por la manipulación del exponente y la mantisa 0 bytes. El código de ensamblador siguiente se muestra un ejemplo de esta operación.

Formato              Exponente      Mantisa 0     Mantisa 1     Mantisa 2

IEEE-754            sxxx xxxx       xxxx xxxx      xxxx yxxx     xxxx xxxx

Microchip            xxxx xxxx       xxxx xxxy       sxxx xxxx    xxxx xxxx


IEEE-754 PARA MICROCHIP

RLF MANTISSA0
RLF exponente
RRF MANTISSA0


MICROCHIP PARA IEEE-754

RLF MANTISSA0
RRF exponente
RRF MANTISSA0

Las variables utilizadas por las Bibliotecas de punto flotante

        Varios registros de 8-bit de RAM son utilizados por las rutinas matemáticas para mantener los operandos y resultados de las operaciones de coma flotante. Dado que puede haber dos operandos necesarios para una operación de punto flotante (como la multiplicación o división), hay dos conjuntos de registros exponente y mantisa reservados (A y B). Para que el argumento A, PBP_AARGHHH sostiene el exponente y PBP_AARGHH, PBP_AARGH PBP_AARG y mantenga la mantisa. Para que el argumento B, PBP_BARGHHH sostiene el exponente y PBP_BARGHH, PBP_BARGH PBP_BARG y mantenga la mantisa.


Programas de Punto Flotante Ejemplo

"Multiplica dos valores de punto flotante

DEVICE = 18F452

XTAL = 4

DIM FLT que float

SÍMBOLO FL_NUM = 1,234 'Crear un punto flotante de valor constante

CLS

FLT = FL_NUM * 10

IMPRIMIR diciembre FLT

PARADA



'Agregar dos variables de punto flotante

DEVICE = 18F452

XTAL = 4

DIM FLT as float

DIM Flt1 as  float

DIM FLT2 as  float

CLS

Flt1 = 1,23

FLT2 = 1000,1

FLT = Flt1 FLT2

IMPRIMIR diciembre FLT

PARADA


Notas

          Expresiones de punto flotante que contiene más de 3 operandos no están permitidos, debido al espacio de RAM adicional necesario para una pila de software. Cualquier expresión que contiene una variable de punto flotante o el valor se calculará como un punto flotante. Aunque el término se aplica también contiene un byte, palabra o dword valor o variable.

        Si la variable de asignación es un byte, palabra o variable DWORD, pero la expresión tiene un carácter de punto flotante. A continuación, el resultado de punto flotante se convierte en un entero.

Ejemplo ;

DEVICE = 16F877

DIM DWD AS DWORD
DIM FLT que float
SÍMBOLO PI = 3,14
FLT = 10
DWD = FLT  + P      "El cálculo resultará en 13,14, pero se reducirán a un número entero 13
IMPRIMIR diciembre DWD ' Mostrar el resultado entero 13
PARADA

traducción del inglés al español


Requisitos de espacio de codigo

        Como se mencionó anteriormente, una precisión de punto flotante tiene un precio de velocidad, y el espacio de código. Ambas cuestiones no son un problema si un dispositivo básico de 16-bit se utiliza, sin embargo en  dispositivos de 14-bit básicos puede suponer un problema. El compilador intenta cargar las bibliotecas de punto flotante en la memoria baja, junto con todas las subrutinas de la biblioteca, pero si no entra dentro de los primeros 2048 bytes de espacio de código, y el PICmicro cuenta con más de 2048 bytes de código disponible, la bibliotecas de punto flotante podrá ser cargada en la parte superior de la memoria de 1000 bytes de código. Esto es invisible para el usuario, sin embargo, el compilador mostrará un aviso de que esté ocurriendo en caso de que parte de la memoria está siendo utilizado por su programa BASIC.

Mostrar más preciso valores en coma flotante

        De forma predeterminada, el compilador utiliza una rutina relativamente pequeño para la conversión de valores de punto flotante para preparar decimal, por RSOUT, $ PRINT STR etc Sin embargo, debido a su tamaño, ya que no realiza ningún redondeo del primer valor, y sólo es capaz de la conversión de valores relativamente pequeños. es decir, aproximadamente 6 dígitos de precisión. Con el fin de producir un resultado más exacto, el compilador necesita usar una rutina más grande. Esto se implementa mediante el uso de un DECLARA: -

FLOAT_DISPLAY_TYPE = LARGE o STANDARD

        Usando el modelo LARGE para declarar lo anterior dará lugar a que el compilador  use  la coma flotante más precisa a la rutina decimal. Tenga en cuenta que a pesar de que la rutina es más grande que el convertidor estándar, lo que realmente funciona mucho más rápido. Los valores por defecto del compilador para Norma, si este es declarar no se han concedido en el programa BASIC.

OPERADORES RELACIONALES

        Los operadores relacionales se utilizan para comparar dos valores, como se muestra en la siguiente lista. El resultado puede ser utilizado para tomar una decisión sobre el flujo del programa.

Relación         Operador         Expresión

Igualdad               =                 X = Y

Desigualdad         <>               X < > Y

Menor que            <                X  < Y

Mayor que            >                X >  Y

Menor o igual        <=             X  < =  Y

Mayor o igual       >=              X  > =  Y

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