Está en la página 1de 12

Con una línea de parámetro de configuración de código SIMULATION_WAITMS_VALUE con la directiva DEFINE, los argumentos de todas las

declaraciones WAITMS en el programa se ignorarán y el valor especificado se utilizará en su lugar durante la compilación. Establecer el valor

0 (predeterminado) para este parámetro (u omitir toda la línea) cancelará su efecto y el código compilado estará listo nuevamente para el
hardware real.

Es posible insertar puntos de interrupción para el simulador directamente en programas básicos usando la instrucción BREAK. Se compila como código de
operación reservado 0x0001 y el simulador interpretará este código de operación como un punto de interrupción y cambiará la tasa de simulación a paso a
paso.

Las funciones SHIFTLEFT y SHIFTRIGHT se pueden usar para cambiar la representación a nivel de bits de una variable a la izquierda y a la derecha. El primer
argumento es la variable de entrada y el segundo argumento es el número de turnos a realizar. A continuación, se muestran dos ejemplos:
Ejemplo 1:
TRISB = 0x00
PORTB =% 00000011

ve a la izquierda:
EsperaMs 250
PORTB = ShiftLeft (PORTB, 1)
Si PORTB =% 11000000 Entonces Goto goright Goto
goleft

ve a la derecha:
EsperaMs 250
PORTB = ShiftRight (PORTB, 1)
Si PORTB =% 00000011 Entonces Goto goleft Goto
goright

Ejemplo 2:
TRISB = 0x00
PORTB =% 00000001

ve a la izquierda:
EsperaMs 250
PORTB = ShiftLeft (PORTB, 1) If PORTB.7
Then Goto goright Goto goleft

ve a la derecha:
EsperaMs 250
PORTB = ShiftRight (PORTB, 1) Si PORTB.0
Entonces Goto goleft Goto goright

La función BÚSQUEDA se puede utilizar para seleccionar una de la lista de constantes Byte, según el valor de la variable Byte de índice, que se
proporciona como el último argumento separado de la función. La primera constante de la lista tiene un valor de índice 0. La constante
seleccionada se cargará en la variable de tipo de datos Byte de resultado. Si el valor de la variable de índice supera el número de constantes de
la lista, la función no afectará a la variable de resultado. Aquí hay un pequeño ejemplo de una pantalla LED de 7 segmentos:

Dígito atenuado Como Byte


Máscara atenuada Como
Byte TRISB =% 00000000
círculo:
Para dígitos = 0 a 9
máscara = LookUp (0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f), dígito PORTB = máscara

EsperaMs 1000
Siguiente dígito
Ir a bucle
Si todas las constantes en la lista (o parte de ellas) son valores ASCII, entonces se puede crear una forma más corta de la lista usando
argumentos de cadena. Por ejemplo:
máscara = Buscar ("ABCDEFGHIJK"), índice

Si es necesario contar el número de pulsos que llegan a uno de los pines del microcontrolador durante un cierto período de tiempo,
hay una instrucción COUNT disponible para ese propósito. Tiene tres argumentos. El primero es el pin que está conectado a la fuente
de pulsos. La declaración COUNT configurará el pin como un pin de entrada. El segundo argumento define la duración de la
observación expresada en milisegundos y debe ser una constante numérica en el rango 1-10000. El último argumento de esta
declaración es una variable Byte o Word donde el número de pulsos contados se almacenará después de su ejecución. La instrucción
COUNT utiliza el módulo periférico interno Timer0. Hay un parámetro COUNT_MODE disponible que se puede configurar con la
directiva DEFINE. Si se establece en el valor 1 (valor predeterminado), la instrucción COUNT contará el número de flancos de pulso
ascendente.
Definir COUNT_MODE = 1
Atenuar num_of_pulses como palabra
Contar PORTB.0, 1000, num_of_pulses

La declaración FREQOUT se puede utilizar para generar un tren de pulsos (tono de sonido) en el pin especificado con frecuencia constante y
duración especificada. Tiene tres argumentos. El primer argumento es el pin en el que se generará el tono. La declaración configurará el pin
como un pin de salida. El segundo argumento especifica la frecuencia del tono y debe ser una constante en el rango de 1-10000Hz. El tercer
argumento define la duración del tono y también debe ser una constante numérica en el rango de 110000ms. La elección de frecuencias de
tono más altas con una frecuencia de reloj de microcontrolador baja puede resultar en una frecuencia algo inexacta de los tonos generados. La
instrucción FREQOUT se puede usar alternativamente en 'modo variable' con variables de tipo de datos de Word en lugar de constantes para los
dos últimos argumentos. En este modo de uso, se supone que el segundo argumento contiene el medio período del tono (en microsegundos) y
el tercer argumento debe contener el número total de pulsos que se generarán. El siguiente código generará un segundo tono largo en el pin
RB0 con una frecuencia de 600Hz:
FreqOut PORTB.0, 600, 1000

Soporte de lenguaje estructurado (procedimientos y funciones)

Los procedimientos se pueden declarar con la instrucción PROC. Pueden contener hasta 5 argumentos (lista separada por comas) y todos los tipos de
datos disponibles se pueden usar para variables de argumento. Las variables de argumento se declaran localmente, por lo que no es necesario que
tengan nombres únicos en relación con el resto del programa básico del usuario, lo que facilita la reutilización de procedimientos una vez escritos en
otros programas básicos. Se puede salir de los procedimientos con la instrucción EXIT. Deben terminar con la instrucción END PROC y deben
colocarse después de la instrucción END en el programa. Las llamadas a los procedimientos se implementan con la instrucción CALL. La lista de
argumentos pasados puede contener tanto variables como constantes numéricas. Por ejemplo:
Dim x como byte
TRISB = 0
Para x = 0 a 255
Llamar portb_display (x)
EsperaMs 100
Siguiente x
Final

Proc portb_display (arg1 como byte) PORTB =


arg1
Finalizar proceso

Todos los hechos indicados para los procedimientos también son válidos para las funciones. Las funciones se pueden declarar con la instrucción
FUNCTION. Pueden contener hasta 5 argumentos y las variables de argumento se declaran localmente. Se puede salir de las funciones con la
instrucción EXIT y se deben finalizar con END FUNCTION. El nombre de la función se declara como una variable global, por lo que si la función se
llama con la instrucción CALL, después de su ejecución, la variable de función contendrá el resultado. También se puede utilizar la forma estándar de
llamadas a funciones en sentencias de asignación. Un simple ejemplo:
Dim x como byte
Dim y como palabra
Para x = 0 a 255
y = cuadrado (x)
Siguiente x
Final

Cuadrado de función (arg1 como palabra) Como


cuadrado de palabra = arg1 * arg1
Función final

El código fuente básico de un archivo externo se puede incluir en el programa actual mediante la directiva INCLUDE. Su único argumento es
una cadena que contiene la ruta al archivo .BAS externo. Esta puede ser la ruta completa o solo el nombre del archivo, si el archivo externo se
encuentra en la misma carpeta que el archivo del programa básico actual. Durante el proceso de compilación, la fuente básica externa se
agregará al programa actual. Se pueden incluir varios archivos con directivas INCLUDE independientes. Para mantener la estructura de código
básica general, se recomienda encarecidamente que el archivo externo contenga únicamente declaraciones, subrutinas, procedimientos y
funciones globales. Aquí hay un ejemplo muy simple para la demostración:
main.bas:
Dim i como palabra
Dim j como palabra

Incluir "inc1.bas"
Incluir "inc2.bas"

Para i = 1 a 10
j = func1 (i, 100) Llamar
proc1 (j)
Siguiente yo
Final

inc1.bas:
Atenuar total como palabra

Proc proc1 (i como Word)


total = total + i End Proc

inc2.bas:
Función func1 (i como palabra, j como palabra) como palabra
func1 = i + j
Función final

El soporte de lenguaje estructurado es un módulo adicional opcional para el compilador básico integrado.

Usando memoria EEPROM interna

El acceso a la memoria de datos EEPROM se puede programar usando instrucciones READ y WRITE. El primer argumento es la dirección de un
byte en la memoria EEPROM y puede ser una constante o una variable Byte. El segundo argumento son datos que se leen o escriben (para la
instrucción READ debe ser una variable Byte). Se sugiere mantener las interrupciones desactivadas durante la ejecución de la instrucción
WRITE.
Dim x como byte
Dim y como byte
x = 10
Leer x, y
Escribe 11, y

Usando el módulo convertidor A / D interno

La declaración ADCIN está disponible como soporte para el convertidor A / D interno. Su primer argumento es el número de canal ADC y el segundo
argumento es una variable que se utilizará para almacenar el resultado de la conversión A / D. La instrucción ADCIN usa dos parámetros ADC_CLOCK y
ADC_SAMPLEUS que tienen los valores predeterminados 3 y 20. Estos valores predeterminados se pueden cambiar usando la directiva DEFINE. El
parámetro ADC_CLOCK determina la elección de la fuente de reloj ADC (el rango permitido es 0-3 o 0-7 dependiendo del dispositivo utilizado). El
parámetro ADC_SAMPLEUS establece el tiempo de adquisición de ADC deseado en microsegundos (0-
255). La declaración ADCIN presupone que el pin correspondiente está configurado como una entrada analógica (registro TRIS, ADCON1 y en
algunos dispositivos registro ANSEL). He aquí un ejemplo:
Dim v (5) como byte Dim
vm como palabra
Dim i como byte

Definir ADC_CLOCK = 3 Definir


ADC_SAMPLEUS = 50 TRISA = 0xff

TRISB = 0
ADCON1 = 0

Para i = 0 a 4
Adcin 0, v (i)
Siguiente yo

vm = 0
Para i = 0 a 4
vm = vm + v (i)
Siguiente yo
vm = vm / 5

PORTB = vm.LB

Usando interrupciones

La rutina de interrupción debe colocarse como todas las demás subrutinas después de la instrucción END. Debe comenzar con ON INTERRUPT y
terminar con la instrucción RESUME. Si se utilizan operaciones aritméticas, matrices o cualquier otra instrucción compleja en la rutina de interrupción,
la instrucción SAVE SYSTEM debe colocarse justo después de la instrucción ON INTERRUPT para guardar el contenido de los registros utilizados por el
sistema. Las sentencias ENABLE y DISABLE se pueden usar en el programa principal para controlar el bit GIE en el registro INTCON. La instrucción
RESUME establecerá el bit GIE y habilitará nuevas interrupciones. Por ejemplo:
Ejemplo 1:
Dim x como byte
x = 255
TRISA = 0
PORTA = x
INTCON.INTE = 1
Permitir
Final

Al interrumpir
x=x-1
PORTA = x
INTCON.INTF = 0
Reanudar

Ejemplo 2:
Dim t como palabra
t=0
TRISA = 0xff
ADCON1 = 0
TRISB = 0
OPTION_REG.T0CS = 0
INTCON.T0IE = 1
Permitir
círculo:
Adcin 0, PORTB
Ir a bucle
Final
Al interrumpir
Guardar sistema
t=t+1
INTCON.T0IF = 0
Reanudar

Comunicación en serie mediante hardware interno UART

También está disponible el soporte para comunicación en serie de hardware y software. Las declaraciones HSEROPEN, HSEROUT, HSERIN y
HSERGET se pueden usar con dispositivos PIC que tienen hardware interno UART. La instrucción HSEROPEN configura la UART de hardware. Su
único argumento es la velocidad en baudios. Se aceptarán todas las velocidades en baudios en el rango 100-200000, pero se sugiere utilizar las
velocidades en baudios estándar: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 56000 o 57600. Si se omite el
argumento, UART se configurará para una velocidad de 9600 baudios. Si parámetro
ALLOW_MULTIPLE_HSEROPEN se establece en 1 usando la directiva DEFINE, será posible usar la instrucción HSEROPEN más de una vez en el
programa, por ejemplo, para cambiar la velocidad en baudios seleccionada. La declaración HSEROUT se utiliza para la transmisión en serie. La
instrucción HSEROUT puede tener varios argumentos separados por ','. Puede utilizar cadenas, la palabra clave LF para el carácter de avance de línea
o la palabra clave CRLF para el retorno de carro - secuencia de avance de línea, constantes y variables. Si se usa el signo '#' antes del nombre de una
variable, su representación decimal se envía al puerto serie. La instrucción HSERIN se puede utilizar para cargar una lista de variables Byte y Word
con los valores recibidos en el puerto serie. Esta declaración esperará hasta que se reciba el número requerido de bytes en el puerto serie. La
instrucción HSERGET tiene un argumento que debe ser una variable Byte.
Si hay un carácter esperando en el búfer de recepción, se cargará en la variable, de lo contrario se cargará el valor 0. Aquí hay unos
ejemplos:
Ejemplo 1:
Dim i como byte
Hseropen 38400
EsperaMs 1000
Para i = 20 a 0 Paso -1
Hserout "Número:", #i, CrLf WaitMs 500

Siguiente yo

Ejemplo 2:
Dim i como byte
Hseropen 19200
círculo:
Hserin i
Hserout "Número:", #i, CrLf Goto loop

Ejemplo 3:
Dim i como byte
Hseropen 19200
círculo:
Hserget i
Si i> 0 Entonces
Hserout "Número:", #i, CrLf WaitMs 50

Terminara si
Ir a bucle

Si se usa el signo '#' antes del nombre de una variable (válido para variables de tipo de datos Byte, Word, Long y Single), su representación
decimal se envía al dispositivo (caracteres ASCII). Esto es aplicable a las declaraciones Lcdout, GLcdwrite, Hserout, Serout y SeroutInv. El
parámetro SINGLE_DECIMAL_PLACES se utiliza para definir el número de lugares decimales impresos después del punto decimal en la
representación decimal de las variables de tipo de datos individuales. Los valores de parámetro válidos están en el rango 1-
6. El valor predeterminado es 3.
Defina SINGLE_DECIMAL_PLACES = 4

Implementación de software UART

En todos los dispositivos PIC compatibles, la comunicación en serie del software se puede implementar con declaraciones SEROUT y SERIN. El primer
argumento de ambas declaraciones debe ser uno de los pines del microcontrolador y el segundo argumento es la velocidad en baudios. Se aceptarán
todas las velocidades en baudios en el rango 100-60000, pero se sugiere utilizar las siguientes velocidades en baudios estándar: 300,
600, 1200, 2400, 4800 o 9600. El uso de velocidades en baudios más altas con una frecuencia de reloj baja podría causar errores de encuadre y
sincronización inexactos. Pequeños ajustes (1-5%) posiblemente podrían solucionar el problema. Para la instrucción SEROUT, sigue la lista de
argumentos que se enviarán al puerto serie. Puede utilizar cadenas, la palabra clave LF para el carácter de avance de línea o la palabra clave
CRLF para el retorno de carro - secuencia de avance de línea, constantes y variables. Si se usa el signo '#' antes del nombre de una variable, su
representación decimal se envía al puerto serie. La sentencia SEROUT usa el parámetro SEROUT_DELAYUS que puede ser establecido por la
directiva DEFINE y tiene un valor predeterminado de 1000 microsegundos. Esto define el intervalo de retraso antes de que un carácter se envíe
realmente al puerto y se utiliza para aumentar la confiabilidad de la rutina SEROUT del software. Para la instrucción SERIN, sigue la lista de
variables Byte y Word que se cargarán con los valores recibidos en el puerto serie. Esta declaración esperará hasta que se reciba el número
requerido de bytes en el puerto serie. Para la interfaz serial con niveles lógicos invertidos, hay disponibles declaraciones SERININV y
SEROUTINV. Algunos ejemplos:
Ejemplo 1:
Definir SEROUT_DELAYUS = 5000
Serout PORTC.6, 1200, "¡Hola, mundo!", CrLf

Ejemplo 2:
Dim i como byte
círculo:
Serin PORTC.7, 9600, i
Serout PORTC.6, 9600, "Número:", #i, CrLf Goto loop

Interfaces LCD de caracteres


El compilador básico también incluye soporte para módulos LCD basados en HD44780 o un chip controlador compatible. Antes de usar
declaraciones relacionadas con LCD, el usuario debe configurar la interfaz LCD usando las directivas DEFINE. Aquí está la lista de parámetros
disponibles:
LCD_BITS - define el número de líneas de interfaz de datos (los valores permitidos son 4 y 8; el predeterminado es 4)
LCD_DREG - define el puerto al que se conectan las líneas de datos (el predeterminado es PORTB)
LCD_DBIT - define la posición de las líneas de datos para la interfaz de 4 bits (0 o 4; el valor predeterminado es 4), ignorado para la interfaz de 8 bits
LCD_RSREG - define el puerto al que está conectada la línea RS (el valor predeterminado es PORTB) LCD_RSBIT - define el pin al que está
conectada la línea RS (el valor predeterminado es 3)
LCD_EREG - define el puerto al que está conectada la línea E (el valor predeterminado es PORTB)
LCD_EBIT - define el pin al que está conectada la línea E (el valor predeterminado es 2)
LCD_RWREG - define el puerto al que está conectada la línea R / W (se establece en 0 si no se utiliza; 0 es el valor predeterminado)
LCD_RWBIT - define el pin al que está conectada la línea R / W (establecido en 0 si no se usa; 0 es el predeterminado)
LCD_COMMANDUS - define el retraso después de la declaración LCDCMDOUT (el valor predeterminado es 5000)
LCD_DATAUS - define el retraso después de la declaración LCDOUT (el valor predeterminado es 100)
LCD_INITMS - define el retraso para la declaración LCDINIT (el valor predeterminado es 100)

Los últimos tres parámetros deben establecerse en valores bajos cuando se utiliza el simulador de módulo LCD integrado. Si la línea R / W está
conectada al microcontrolador y el parámetro LCD_READ_BUSY_FLAG se establece en 1 usando la directiva DEFINE, el compilador ignorará estos
parámetros de retardo y se implementará la sincronización correcta leyendo el estado de la bandera de ocupado en la pantalla LCD.

La declaración LCDINIT debe colocarse en el programa antes de cualquiera de las declaraciones LCDOUT (usado para enviar datos) y
LCDCMDOUT (usado para enviar comandos). El argumento constante numérico de LCDINIT se utiliza para definir el tipo de cursor: 0 = sin
cursor (predeterminado), 1 = parpadeo, 2 = subrayado, 3 = parpadeo + subrayado. Las declaraciones LCDOUT y LCDCMDOUT pueden tener
varios argumentos separados por ','. Las cadenas, constantes y variables se pueden utilizar como argumentos de la declaración LCDOUT. Si se
usa el signo '#' antes del nombre de una variable, su representación decimal se envía al módulo LCD. Las constantes y variables se pueden
usar como argumentos de la declaración LCDCMDOUT y las siguientes palabras clave también están disponibles: LcdClear, LcdHome,
LcdLine2Home, LcdDisplayOn, LcdDisplayOff, LcdCurOff, LcdCurBlink, LcdCurUnderline, LcdCurBlinkUnderline, LcdSeft, LcdShRightLnderline
LcdShiftRight, LcdLine1Clear, LcdLine2Clear, LcdLine1Pos () y LcdLine2Pos (). El argumento de LcdLine1Pos () y LcdLine2Pos () puede ser un
número en el rango (1-40) o una variable de tipo de datos Byte. El valor contenido en esa variable debe estar en el mismo rango.
LcdDisplayOn y LcdDisplayOff apagarán el cursor. Los comandos simbólicos relacionados con el cursor se pueden utilizar como argumentos
de LCDINIT. Aquí hay unos ejemplos:
Ejemplo 1:
Definir LCD_BITS = 8
Definir LCD_DREG = PORTB
Definir LCD_DBIT = 0
Definir LCD_RSREG = PORTD
Definir LCD_RSBIT = 1
Definir LCD_EREG = PORTD
Definir LCD_EBIT = 3
Definir LCD_RWREG = PORTD
Definir LCD_RWBIT = 2

Lcdinit LcdCurBlink
círculo:
Lcdout "¡Hola mundo!"
EsperaMs 1000
Lcdcmdout LcdClear
EsperaMs 1000
Ir a bucle

Ejemplo 2:
Definir LCD_BITS = 8
Definir LCD_DREG = PORTB
Definir LCD_DBIT = 0
Definir LCD_RSREG = PORTD
Definir LCD_RSBIT = 1
Definir LCD_EREG = PORTD
Definir LCD_EBIT = 3
Definir LCD_RWREG = PORTD
Definir LCD_RWBIT = 2

Dim x como palabra


x = 65535
Lcdinit 3
EsperaMs 1000
círculo:
Lcdout "¡Estoy contando!"
Lcdcmdout LcdLine2 Inicio
Lcdout #x
x=x-1
EsperaMs 250
Lcdcmdout LcdClear
Ir a bucle

Las declaraciones relacionadas con LCD tomarán el control sobre los registros TRIS conectados con los pines usados para la interfaz LCD, pero si usa
pines PORTA o PORTE en dispositivos con Módulo Convertidor A / D, entonces debe tomar control sobre el registro ADCON1 para configurar pines
usados como I / O.

Puede configurar hasta ocho caracteres definidos por el usuario para su uso en la pantalla LCD. Esto se puede hacer fácilmente con la declaración
LCDDEFCHAR. El primer argumento de esta declaración es el número de caracteres y debe estar en el rango 0-7. Los siguientes 8 argumentos forman un
patrón de caracteres de 8 líneas (de arriba a abajo) y deben estar en el rango 0-31 (5 bits de ancho). Estos 8 caracteres de usuario se asignan a los
códigos de caracteres 0-7 y 8-15 y se pueden mostrar mediante la instrucción LCDOUT. Después de la instrucción LCDDEFCHAR, el cursor estará en la
posición INICIO. Por ejemplo:
Lcddefchar 0, 10, 10, 10, 10, 10, 10, 10, 10
Lcddefchar 1,% 11111,% 10101,% 10101,% 10101,% 10101,% 10101,% 10101,% 11111 Lcdout 0, 1,
"¡Hola!" 1, 0
Para pantallas LCD con cuatro líneas de caracteres, se pueden utilizar argumentos simbólicos adicionales de la instrucción LCDCMDOUT:
LcdLine3Home, LcdLine4Home, LcdLine3Clear, LcdLine4Clear, LcdLine3Pos () y LcdLine4Pos (). El argumento de LcdLine3Pos () y LcdLine4Pos ()
puede ser un número en el rango (1-40) o una variable de tipo de datos Byte. El valor contenido en esa variable debe estar en el mismo rango.
Antes de usar estos elementos de lenguaje, los valores correctos que determinan el tipo de LCD deben asignarse a los parámetros LCD_LINES
y LCD_CHARS usando las directivas DEFINE.
Definir LCD_LINES = 4
Definir LCD_CHARS = 16
Definir LCD_BITS = 8
Definir LCD_DREG = PORTB
Definir LCD_DBIT = 0
Definir LCD_RSREG = PORTD
Definir LCD_RSBIT = 1
Definir LCD_EREG = PORTD
Definir LCD_EBIT = 3
Definir LCD_RWREG = PORTD
Definir LCD_RWBIT = 2

Lcdinit 3
círculo:
Lcdcmdout LcdClear
Lcdcmdout LcdLine1 Inicio
Lcdout "Esta es la línea 1"
Lcdcmdout LcdLine2Home
Lcdout "Esta es la línea 2"
Lcdcmdout LcdLine3
Lcdout "Esta es la línea 3"
Lcdcmdout LcdLine4Home
Lcdout "Esta es la línea 4" WaitMs
1000
Lcdcmdout LcdLine1Clear
Lcdcmdout LcdLine2Clear
Lcdcmdout LcdLine3Clear
Lcdcmdout LcdLine4Clear
Lcdcmdout LcdLine1Pos (1)
Lcdout "Línea 1"
Lcdcmdout LcdLine2Pos (2)
Lcdout "Línea 2"
Lcdcmdout LcdLine3Pos (3)
Lcdout "Línea 3"
Lcdcmdout LcdLine4Pos (4)
Lcdout "Línea 4"
EsperaMs 1000
Ir a bucle

Comunicación I2C con dispositivos I2C externos

La comunicación I2C se puede implementar en programas básicos utilizando sentencias I2CWRITE e I2CREAD. El primer argumento de ambas declaraciones debe ser uno de los pines del
microcontrolador que está conectado a la línea SDA del dispositivo I2C externo. El segundo argumento de ambas declaraciones debe ser uno de los pines del microcontrolador que está
conectado a la línea SCL. El tercer argumento de ambas declaraciones debe ser un valor constante o una variable de Byte llamada 'dirección esclava'. Su formato se describe en la hoja de datos
del dispositivo utilizado. Por ejemplo, para EEPROM de la familia 24C (con entradas de dirección de dispositivo conectadas a tierra), el valor 0xA0 debe usarse para el parámetro de dirección
esclava. Ambas declaraciones tomarán el control sobre el bit 0 de la dirección del esclavo durante la comunicación. El cuarto argumento de ambas declaraciones debe ser una variable Byte o
Word (esto depende del dispositivo utilizado) que contenga la dirección de la ubicación a la que se accederá. Si se utiliza un valor constante para el parámetro de dirección, debe estar en el
rango de valores de Byte. El último (quinto) argumento de la instrucción I2CWRITE es una constante o variable Byte que se escribirá en la dirección especificada, y para la instrucción I2CREAD
debe ser una variable Byte para almacenar el valor que se leerá desde la dirección especificada. Se permite utilizar más de un argumento de 'datos'. Para los dispositivos I2C que no admiten el
argumento de dirección de datos, hay una forma abreviada de declaraciones I2C (I2CWRITE1 e I2CREAD1) disponible donde el argumento de la dirección esclava va seguido con uno o más
argumentos de datos directamente. Para algunos dispositivos esclavos I2C, es necesario hacer un retraso para asegurarse de que el dispositivo esté listo para responder a la instrucción
I2CREAD. Para ese propósito, existe el parámetro I2CREAD_DELAYUS que se puede configurar mediante la directiva DEFINE y tiene un valor predeterminado de 0 microsegundos. Además, para
dispositivos I2C más lentos, podría ser necesario utilizar pulsos de reloj más largos. Eso se puede hacer configurando el parámetro I2CCLOCK_STRETCH usando la directiva DEFINE. Este
parámetro establecerá el factor de extensión del reloj. Su valor predeterminado es 1. Aquí hay un ejemplo combinado con módulo LCD y EEPROM 24C64 (SDA conectado a RC2; SCL conectado
a RC3): Eso se puede hacer configurando el parámetro I2CCLOCK_STRETCH usando la directiva DEFINE. Este parámetro establecerá el factor de extensión del reloj. Su valor predeterminado es
1. Aquí hay un ejemplo combinado con módulo LCD y EEPROM 24C64 (SDA conectado a RC2; SCL conectado a RC3): Eso se puede hacer configurando el parámetro I2CCLOCK_STRETCH usando
la directiva DEFINE. Este parámetro establecerá el factor de extensión del reloj. Su valor predeterminado es 1. Aquí hay un ejemplo combinado con módulo LCD y EEPROM 24C64 (SDA
conectado a RC2; SCL conectado a RC3):

Ejemplo 1:
Definir LCD_BITS = 8
Definir LCD_DREG = PORTB
Definir LCD_DBIT = 0
Definir LCD_RSREG = PORTD
Definir LCD_RSBIT = 1
Definir LCD_EREG = PORTD
Definir LCD_EBIT = 3
Definir LCD_RWREG = PORTD
Definir LCD_RWBIT = 2

Dim addr como palabra


Dim datos como byte
Símbolo sda = PORTC.2
Símbolo scl = PORTC.3 Lcdinit
3
EsperaMs 1000

Para addr = 0 a 31
Lcdcmdout LcdClear
datos = 255 - dirección
I2CWrite sda, scl, 0xa0, addr, data Lcdout "Write To
EEPROM"
Lcdcmdout LcdLine2 Inicio
Lcdout "(", #addr, ") =", #data WaitMs 1000

Siguiente dirección

Para addr = 0 a 31
Lcdcmdout LcdClear
I2CRead sda, scl, 0xa0, addr, data Lcdout "Leer
desde EEPROM"
Lcdcmdout LcdLine2 Inicio
Lcdout "(", #addr, ") =", #data WaitMs 1000

Siguiente dirección

Hay un conjunto de declaraciones de comunicación I2C de bajo nivel disponibles, si es necesario para tener más control sobre el proceso de
comunicación I2C. La declaración I2CPREPARE tiene dos argumentos que deben ser uno de los pines del microcontrolador. El primer
argumento define la línea SDA y el segundo argumento define la línea SCL. Esta declaración preparará estas líneas para la comunicación I2C.
La instrucción I2CSTART generará una condición de inicio y la instrucción I2CSTOP generará una condición de parada. Se puede enviar un
byte al esclavo I2C mediante la instrucción I2CSEND. Después de que se ejecute la declaración, el bit C en el registro STATUS mantendrá la
copia del estado en la línea SDA durante el ciclo de reconocimiento. Hay dos declaraciones que se pueden utilizar para recibir un byte del
esclavo I2C. I2CRECA o I2CRECEIVEACK generarán una señal de reconocimiento durante el ciclo de reconocimiento después de que se reciba
el byte. I2CRECN o I2CRECEIVENACK generarán una señal de no reconocimiento durante el ciclo de reconocimiento después de que se reciba
el byte. Un ejemplo:
Ejemplo 2:
Dim addr como Word
Atenuar datos (31) como byte

Símbolo sda = PORTC.2


Símbolo scl = PORTC.3 addr =
0

I2CPrepare sda, scl


I2CStart
I2CSend 0xa0
I2CSend addr.HB
I2CSend addr.LB
I2C Detener
I2CStart
I2CEnviar 0xa1
Para addr = 0 a 30
Datos de I2CReceiveAck (addr)
Siguiente dirección
Datos I2CRecN (31)
I2C Detener

Soporte para comunicación de interfaz periférica serial (SPI)

Antes de usar declaraciones relacionadas con SPI, la interfaz SPI debe configurarse usando las directivas DEFINE. Hay ocho
parámetros disponibles para definir la conexión de las líneas SCK, SDI, SDO y (opcionalmente) CS:
SPI_SCK_REG - define el puerto al que está conectada la línea SCK
SPI_SCK_BIT - define el pin al que está conectada la línea SCK
SPI_SDI_REG - define el puerto al que está conectada la línea SDI
SPI_SDI_BIT - define el pin al que está conectada la línea SDI
SPI_SDO_REG - define el puerto al que está conectada la línea SDO SPI_SDO_BIT
- define el pin al que está conectada la línea SDO SPI_CS_REG - define el
puerto al que está conectada la línea CS
SPI_CS_BIT - define el pin al que está conectada la línea CS

Los ajustes asumidos son activo-alto para la línea Clock y activo-bajo para la línea ChipSelect. Eso se puede cambiar asignando el valor 1 a los
parámetros SPICLOCK_INVERT y / o SPICS_INVERT por la directiva DEFINE. Para dispositivos SPI más lentos, puede ser necesario utilizar pulsos
de reloj más largos. El factor de extensión del reloj predeterminado (1) se puede cambiar configurando el parámetro SPICLOCK_STRETCH.

La instrucción SPIPREPARE (sin argumentos) preparará las líneas de interfaz para la comunicación SPI. Las declaraciones SPICSON y
SPICSOFF habilitarán / deshabilitarán la línea ChipSelect de la interfaz. Se puede enviar un byte al periférico SPI mediante la
instrucción SPISEND. Para recibir un byte del periférico, se debe utilizar la instrucción SPIRECEIVE. Para enviar el número especificado
de bits, hay disponible una declaración SPISENDBITS. Su primer argumento debe ser el número de bits a enviar [1-8] y el segundo
argumento es una variable o constante de bytes. Aquí hay un ejemplo de uso de la eeprom 25C040 SPI:
Ejemplo 1:
TodoDigital

Definir SPI_CS_REG = PORTC


Definir SPI_CS_BIT = 0
Definir SPI_SCK_REG = PORTC
Definir SPI_SCK_BIT = 3
Definir SPI_SDI_REG = PORTC
Definir SPI_SDI_BIT = 4
Definir SPI_SDO_REG = PORTC
Definir SPI_SDO_BIT = 5
SPIPrepare

Definir LCD_BITS = 8
Definir LCD_DREG = PORTD
Definir LCD_DBIT = 0
Definir LCD_RSREG = PORTE
Definir LCD_RSBIT = 0
Definir LCD_RWREG = PORTE
Definir LCD_RWBIT = 1
Definir LCD_EREG = PORTE
Definir LCD_EBIT = 2
Definir LCD_READ_BUSY_FLAG = 1 Lcdinit

Dim addr As Byte Dim


datos As Byte

Para addr = 0 a 10
datos = 200 - addr
SPICSOn
SPISend 0x06
SPICSOff
SPICSOn
SPISend 0x02
Dirección de SPISend
Datos de SPISend
SPICSOff
Lcdcmdout LcdClear
Lcdout "Escribir en EEPROM"
Lcdcmdout LcdLine2
Lcdout "(", #addr, ") =", #data WaitMs 500

Siguiente dirección

Para addr = 0 a 10
SPICSOn
SPISend 0x03
Dirección de SPISend
SPIReceive datos
SPICSOff
Lcdcmdout LcdClear
Lcdout "Leer desde EEPROM"
Lcdcmdout LcdLine2
Lcdout "(", #addr, ") =", #data WaitMs 500

Siguiente dirección

Aquí está el mismo ejemplo escrito para 93C86 Microwire EEPROM:


Ejemplo 2:
TodoDigital

Definir SPI_CS_REG = PORTC


Definir SPI_CS_BIT = 0
Definir SPICS_INVERT = 1
Definir SPI_SCK_REG = PORTC
Definir SPI_SCK_BIT = 3
Definir SPI_SDI_REG = PORTC
Definir SPI_SDI_BIT = 4
Definir SPI_SDO_REG = PORTC
Definir SPI_SDO_BIT = 5
SPIPrepare

Definir LCD_BITS = 8
Definir LCD_DREG = PORTD
Definir LCD_DBIT = 0
Definir LCD_RSREG = PORTE
Definir LCD_RSBIT = 0
Definir LCD_RWREG = PORTE
Definir LCD_RWBIT = 1
Definir LCD_EREG = PORTE
Definir LCD_EBIT = 2
Definir LCD_READ_BUSY_FLAG = 1
Lcdinit

Dim addr As Byte Dim


datos As Byte

SPICSOn
SPISendBits 6,% 100110
SPISendBits 8,% 00000000
SPICSOff

Para addr = 0 a 10
datos = 200 - addr
SPICSOn
SPISendBits 6,% 101000
SPISendBits 8, dirección
Datos de SPISend
SPICSOff
SPICSOn
SPISend 0x00
SPICSOff
Lcdcmdout LcdClear
Lcdout "Escribir en EEPROM"
Lcdcmdout LcdLine2
Lcdout "(", #addr, ") =", #data WaitMs 500

Siguiente dirección

Para addr = 0 a 10
SPICSOn
SPISendBits 6,% 110000
SPISendBits 8, dirección
SPIReceive datos
SPICSOff
Lcdcmdout LcdClear
Lcdout "Leer desde EEPROM"
Lcdcmdout LcdLine2
Lcdout "(", #addr, ") =", #data WaitMs 500

Siguiente dirección

Interfaz de pantallas LCD gráficas con matriz de puntos de 128x64

La interfaz gráfica de LCD con resolución de matriz de puntos 128x64 controlada por KS0108 o un chip compatible es compatible con
la siguiente lista de elementos de lenguaje básico: GLCDINIT, GLCDCLEAR, GLCDPSET, GLCDPRESET, GLCDPOSITION, GLCDWRITE,
GLCDCLEAN, GLCDOUT, GLCDIN, GLCDCMDOUT. Antes de usar declaraciones relacionadas con LCD gráficos, el usuario debe
configurar la interfaz con el módulo LCD gráfico usando las directivas DEFINE. Aquí está la lista de parámetros disponibles:

GLCD_DREG - define el puerto al que se conectan las líneas de datos (tiene que ser un puerto completo de 8 pines)
GLCD_RSREG - define el puerto al que se conecta la línea RS
GLCD_RSBIT - define el pin al que está conectada la línea RS
GLCD_EREG - define el puerto al que está conectada la línea E
GLCD_EBIT - define el pin al que está conectada la línea E
GLCD_RWREG - define el puerto al que está conectada la línea R / W
GLCD_RWBIT - define el pin al que está conectada la línea R / W
GLCD_CS1REG - define el puerto al que está conectada la línea CS1
GLCD_CS1BIT - define el pin al que está conectada la línea CS1
GLCD_CS2REG - define el puerto al que está conectada la línea CS2
GLCD_CS2BIT - define el pin al que está conectada la línea CS2

La instrucción GLCDINIT debe colocarse en algún lugar al comienzo del programa básico antes de que se utilicen otras instrucciones gráficas de LCD.
Las declaraciones gráficas relacionadas con la pantalla LCD tomarán el control sobre los registros TRIS conectados con los pines utilizados para la
interfaz LCD, pero si usa pines que están configurados como entradas analógicas en el encendido en dispositivos con convertidor A / D y / o módulos
comparadores, debe tomar el control a través de los registros apropiados (ADCON1, ANSEL, CMCON) para configurar los pines usados como E / S
digitales.

La instrucción GLCDCLEAR borrará toda la pantalla. Se puede utilizar con un argumento constante opcional en el rango 0255 que se colocará en cada
posición de byte en la pantalla (las pantallas gráficas de 128x64 están divididas internamente en dos mitades de 64x64; ambas mitades están divididas
en ocho páginas horizontales de 64x8; cada página tiene su número de direccionamiento en el rango 0-15; la página en la esquina superior izquierda
tiene el número 0; la página en la esquina inferior izquierda tiene el número 7; la página en la esquina superior derecha tiene el número 8; la página en
la esquina inferior derecha tiene el número 15; cada La página tiene 64 posiciones de bytes direccionadas con números en el rango 0-63; cada posición
de byte tiene 8 bits; el bit más alto es LSB y el bit más bajo es MSB). Por ejemplo:
GLcdinit
círculo:
GLcdclear 0xaa
EsperaMs 1000
GLcdclear 0x55
EsperaMs 1000
Ir a bucle

Las declaraciones GLCDPSET y GLCDPRESET se utilizan para encender y apagar uno de los puntos en la pantalla gráfica. El primer
argumento es la coordenada horizontal y debe ser una variable o constante de tipo de datos de byte en el rango 0-127. El
segundo argumento es la coordenada vertical y debe ser una variable o constante de tipo de datos de byte en el rango 0-63. El
punto en la esquina superior izquierda de la pantalla es el origen con coordenadas 0,0. Por ejemplo:
Dim i como byte
Dim j como byte
GLcdinit
Para i = 0 a 127 Para j =
0 a 63
GLcdpset i, j
Siguiente j
Siguiente yo

La instrucción GLCDCLEAN se utiliza para borrar una sección de la página en la pantalla. Tiene tres argumentos. El primer argumento es la
dirección de la página y debe ser una variable o constante de tipo de datos de byte en el rango 0-15. El segundo argumento es la primera
posición de byte en la página que se limpiará y debe ser una variable o constante de tipo de datos de byte en el rango 0-63. El tercer
argumento es la última posición de byte en la página que se limpiará y debe ser una variable o constante de tipo de datos de byte en el
rango 0-63. Si se omiten los dos últimos argumentos, se borrará toda la página. Por ejemplo:
Dim i como byte
GLcdinit
GLcdclear 0xff
Para i = 0 a 15
GLcdclean i
EsperaMs 500
Siguiente yo

La instrucción GLCDPOSITION se utiliza para direccionar una posición de byte en la pantalla. Debe usarse antes de cualquiera de las
sentencias GLCDWRITE, GLCDIN, GLCDOUT y GLCDCMDOUT. El primer argumento es la dirección de la página y debe ser una variable o
constante de tipo de datos de byte en el rango 0-15. El segundo argumento es la posición del byte de destino en la página y debe ser una
variable o constante de tipo de datos de byte en el rango 0-63. Si se omite el segundo argumento, se utiliza la posición de byte cero.

La sentencia GLCDWRITE se usa para escribir texto en la pantalla. Comenzará a escribir desde la posición actual del byte en la pantalla. Debe
usarse con cuidado, porque cuando se alcanza la posición del byte (63) de la página, la escritura continuará desde la posición del byte 0
permaneciendo en la misma página. El ancho de cada carácter escrito es de 5 posiciones de byte más una posición de byte clara. Después de
que se ejecute la instrucción, la posición actual del byte estará al final del texto escrito. La declaración GLCDWRITE puede tener varios
argumentos separados por ','. Las cadenas, constantes y variables de bytes se pueden utilizar como su
argumentos. Las constantes y los valores de las variables se interpretan como códigos ASCII. Si se usa el signo '#' antes del nombre de una
variable, entonces se escribe su representación decimal. Por ejemplo:
Dim i como byte
GLcdinit
Para i = 0 a 15
GLcdposición i, 0
GLcdwrite "Página:", #i WaitMs
250
Siguiente yo

La instrucción GLCDOUT se usa para escribir el valor de la variable o constante de bytes en la posición actual del byte en la pantalla. La posición
actual del byte se incrementará en uno. La instrucción GLCDIN leerá el valor de la posición actual del byte en la pantalla y lo colocará en la
variable de byte especificada como su argumento. La declaración GLCDCMDOUT se utiliza para enviar comandos de bajo nivel a la pantalla LCD
gráfica. Su argumento puede ser una variable de tipo de datos constante o de bytes. Todas estas tres declaraciones se pueden usar con
múltiples argumentos separados por ','.

Usando módulos PWM internos

Los módulos PWM internos (más precisamente: los modos PWM de los módulos CCP) se activan mediante la instrucción PWMON. Esta declaración
tiene dos argumentos. El primer argumento es el número de módulo y debe ser una constante en el rango 1-3. El segundo argumento se utiliza para
la selección de modo. El módulo PWM interno se puede utilizar en tres frecuencias de salida diferentes para cada una de las cuatro resoluciones de
ciclo de trabajo admitidas por la declaración PWMON (10 bits, 9 bits, 8 bits y 7 bits). Por lo tanto, el módulo PWM se puede activar con la declaración
PWMON en 12 modos. Aquí está la lista de todos los modos a una frecuencia de reloj de 4MHz (para otras frecuencias de reloj, los valores deben
ajustarse proporcionalmente):
modo 1 : 10 bits, 244 Hz
modo 2 : 10 bits, 977 Hz
modo 3 : 10 bits, 3906 Hz
modo 4 : 9 bits, 488 Hz
modo 5 : 9 bits, 1953 Hz
modo 6 : 9 bits, 7813 Hz
modo 7 : 8 bits, 977 Hz
modo 8 : 8 bits, 3906 Hz
modo 9 : 8 bits, 15625 Hz
modo 10 : 7 bits, 1953 Hz
modo 11 : 7 bits, 7813 Hz
modo 12 : 7 bits, 31250 Hz

El módulo PWM se inicia inicialmente con un ciclo de trabajo 0, por lo que la salida permanecerá baja hasta que se cambie el ciclo de
trabajo. El módulo PWM se puede apagar con la instrucción PWMOFF. Tiene un solo argumento: el número de módulo.

El ciclo de trabajo de la señal PWM se puede cambiar con la instrucción PWMDUTY. Su primer argumento es el número de módulo. El segundo argumento es el
ciclo de trabajo y puede ser una constante en el rango 0-1023 o una variable de tipo de datos de bytes o palabras. El usuario debe tener cuidado de utilizar los
rangos de valores adecuados para todos los modos PWM (0-1023 para resolución de 10 bits, 0-511 para resolución de 9 bits, 0-255 para resolución de 8 bits y 0-127
para resolución de 7 bits ). Aquí hay un ejemplo de ejemplo:
Dim duty como byte
PWMon 1, 9
círculo:
Adcin 0, deber
PWMduty 1, deber
Ir a bucle

Interfaz de servos de control de radio (R / C)

Para escribir aplicaciones en la interfaz de los servos R / C, hay dos declaraciones disponibles: SERVOIN y SERVOOUT. El servo R / C está controlado por
un tren de pulsos (15-20 pulsos por segundo) cuya longitud define la posición del brazo del servo. La duración válida de los pulsos está en el rango de
1-2 ms. Estas dos declaraciones tienen dos argumentos. El primer argumento de ambas declaraciones es el pin del microcontrolador donde se recibe o
transmite la señal del servo. Para la declaración SERVOIN, el pin debe configurarse previamente como un pin de entrada y para la declaración
SERVOOUT, el pin debe configurarse para la salida. El segundo argumento de la instrucción SERVOIN debe ser una variable Byte donde se guardará la
longitud del pulso. Los pulsos se miden en unidades de 10us, por lo que es posible medir pulsos en el rango de 0.01-2.55ms. El valor almacenado en la
variable para los servos normales debe estar en el rango de 100-200. El segundo argumento de la instrucción SERVOOUT debe ser una variable o
constante Byte que determina la longitud del pulso generado. Para un funcionamiento correcto del servo de destino, la instrucción SERVOOUT debe
ejecutarse de 15 a 20 veces durante un segundo. A continuación se muestra un ejemplo de la operación de retroceso del servo:

Dim longitud como Byte


TRISB.0 = 1
TRISB.1 = 0
círculo:
ServoIn PORTB.0, longitud
Si longitud <100 Entonces longitud = 100 Si
longitud> 200 Entonces longitud = 200 Longitud =
longitud - 100
longitud = 100 - longitud longitud =
longitud + 100 ServoOut PORTB.1,
longitud
Ir a bucle

Interfaz de motores paso a paso

Antes de usar declaraciones relacionadas con el motor paso a paso, su conexión y el modo de manejo deseado deben
configurarse usando las directivas DEFINE. Hay ocho parámetros disponibles para definir la conexión de las bobinas A, B, C y D:
STEP_A_REG - define el puerto al que se conecta una bobina
STEP_A_BIT - define el pin donde se conecta una bobina
STEP_B_REG - define el puerto al que está conectada la bobina B
STEP_B_BIT - define el pin al que está conectada la bobina B
STEP_C_REG - define el puerto al que está conectada la bobina C
STEP_C_BIT - define el pin al que está conectada la bobina C
STEP_D_REG - define el puerto al que está conectada la bobina D
STEP_D_BIT - define el pin donde se conecta una bobina

Las bobinas A y C son en realidad partes de una sola bobina con conexión común. Lo mismo es válido para las conexiones de bobina B y D.
También hay un parámetro STEP_MODE que se utiliza para definir el modo de conducción. Si se establece en 1 (predeterminado), el motor
funcionará en modo de paso completo. El valor 2 debe usarse para el modo de medio paso. La primera declaración básica que debe usarse
es STEPHOLD. Configurará los pines usados como salidas y también energizará las bobinas A y B para fijar el rotor en su posición inicial.
Para mover el rotor en sentido horario y antihorario, hay declaraciones STEPCW y STEPCCW disponibles. Su primer argumento es el número
de pasos del rotor que se realizarán y puede ser el tipo de datos Byte constante o variable. El segundo argumento define el retraso entre
pasos consecutivos expresado en microsegundos por una variable o constante de tipo de datos Byte o Word. Si el uso de la declaración
STEPCW da como resultado un movimiento del rotor en sentido contrario a las agujas del reloj, se deben cambiar los ajustes de conexión
para las bobinas B y D. Aquí hay dos ejemplos (el segundo ejemplo usa retrasos adecuados para la simulación en el simulador):

Ejemplo 1:
TodoDigital
ADCON1 = 0x0e
Definir STEP_A_REG = PORTB Definir
STEP_A_BIT = 7 Definir STEP_B_REG =
PORTB Definir STEP_B_BIT = 6 Definir
STEP_C_REG = PORTB Definir
STEP_C_BIT = 5 Definir STEP_D_REG =
PORTB Definir STEP_D_MEP_BIT = 4

EsperaMs 1000
StepHold
EsperaMs 1000

Atenuar an0 como palabra

círculo:
Adcin 0, an0
an0 = an0 * 60
an0 = an0 + 2000
StepCW 1, an0
Ir a bucle

Ejemplo 2:
TodoDigital
Definir STEP_A_REG = PORTB
Definir STEP_A_BIT = 7
Definir STEP_B_REG = PORTB
Definir STEP_B_BIT = 6
Definir STEP_C_REG = PORTB
Definir STEP_C_BIT = 5
Definir STEP_D_REG = PORTB
Definir STEP_D_BIT = 4
Definir STEP_MODE = 2

Espera 300
StepHold
Espera 1000

círculo:
Paso CCW 16, 300
Espera 1000
Paso CW 24, 300
Espera 1000
Ir a bucle

Interfaz de dispositivos de 1 CABLE

Antes de usar declaraciones relacionadas con 1-CABLE, el usuario debe definir el pin al que está conectado el dispositivo
usando las directivas DEFINE. Los parámetros disponibles son 1WIRE_REG y 1WIRE_BIT. Por ejemplo:
Definir 1WIRE_REG = PORTB Definir
1WIRE_BIT = 0

La secuencia de inicialización se puede realizar mediante la instrucción 1WIREINIT. Puede tener un argumento opcional (variable de tipo de datos de
bit) que se establecerá en 0 si se ha detectado la presencia del dispositivo y se establecerá en 1 si no hay ningún dispositivo en la línea.

Los bits individuales (intervalos de tiempo) se pueden enviar y recibir desde el dispositivo utilizando declaraciones 1WIRESENDBIT y
1WIREGETBIT. Ambas declaraciones pueden tener varios argumentos: lista separada por comas de variables de tipo de datos de Bit (o
constantes de Bit para la instrucción 1WIRESENDBIT).

Las declaraciones 1WIRESENDBYTE y 1WIREGETBYTE se pueden utilizar para enviar y recibir bytes desde el dispositivo. Ambas
declaraciones pueden tener varios argumentos: lista separada por comas de variables de tipo de datos Byte (o constantes de Byte para
la declaración 1WIRESENDBYTE). Aquí hay un ejemplo para medir la temperatura usando el dispositivo DS18S20:
Acabado tenue Como bit
Temp. Tenue Como byte
Signo tenue Como Byte

1wireInit
1wireSendByte 0xcc, 0x44
Espera Sra. 1
círculo:
1wireGetBit acabado
Si finaliza = 0, entonces ve al bucle
1wireInit
1wireSendByte 0xcc, 0xbe
1wireGetByte temp, signo

Este ejemplo puede ser muy breve si se utilizan dos declaraciones básicas de alto nivel específicas de DS18S20. La declaración DS18S20START
iniciará una conversión de temperatura única. Según la hoja de datos del dispositivo, la conversión se completará en 750 ms como máximo.
Después de ese período, el valor medido se puede leer mediante la instrucción DS18S20READT que requiere dos variables de tipo de datos
Byte como argumentos. El primer argumento contendrá el valor de temperatura en unidades de 0,5 grados centígrados (por ejemplo, el valor
100 representa la temperatura de 50 grados). El segundo argumento contendrá el valor 0x00 si la temperatura es positiva y el valor 0xFF si es
negativa. Por ejemplo:
Dim temp As Byte Dim
sign As Byte

DS18S20 Inicio
EsperaMs 1000
DS18S20Temp. De lectura, signo

Características avanzadas

Si se usa la directiva STARTFROMZERO, el compilador iniciará el programa desde la ubicación de la memoria flash del programa cero (vector de
reinicio) y usará la memoria del programa disponible continuamente. La rutina de interrupción, si se usa, debe implementarse utilizando código
ensamblador en línea. El compilador también dejará el control sobre el registro PCLATH al usuario suponiendo que todo el código se coloque en la
misma página de memoria del programa. Esta característica avanzada se puede utilizar al desarrollar aplicaciones de cargador de arranque, por
ejemplo.

También podría gustarte