You are on page 1of 29

PIC BÁSICO COMPILADOR REFERENCE MANUAL

LA LISTA DE TODAS LAS PALABRAS CLAVE DEL COMPILADOR DE BASE:

1WIRE_REG, 1WIRE_BIT, 1WIREINIT, 1WIRESENDBIT, 1WIREGETBIT,


1WIRESENDBYTE, 1WIREGETBYTE, ADCIN, ADC_CLOCK, ADC_SAMPLEUS,
ALLDIGITAL, ALLOW_ALL_BAUDRATES, ALLOW_MULTIPLE_HSEROPEN, AND,
AS, ASM, BIT, BREAK, BYTE, CALL, CASE, CLOCK_FREQUENCY, CONF_WORD,
CONF_WORD_2, CONFIG, CONST, COUNT, COUNT_MODE, CRLF, DEFINE, DIM,
DISABLE, DS18S20START, DS18S20READT, EEPROM, ELSE, ENABLE, END, END
FUNCTION, END PROC, ENDIF, ENDSELECT, EXIT, FALSE, FOR, FREQOUT,
FUNCTION, GLCD_DREG, GLCD_RSREG, GLCD_RSBIT, GLCD_EREG,
GLCD_EBIT, GLCD_RWREG, GLCD_RWBIT, GLCD_CS1REG, GLCD_CS1BIT,
GLCD_CS2REG, GLCD_CS2BIT, GLCDINIT, GLCDCLEAR, GLCDPSET,
GLCDPRESET, GLCDCLEAN, GLCDPOSITION, GLCDWRITE, GLCDOUT, GLCDIN,
GLCDCMDOUT, GOSUB, GOTO, HALT, HIGH, HSERGET, HSERIN, HSEROUT,
HSEROPEN, I2CWRITE, I2CREAD, I2CREAD_DELAYUS, I2CCLOCK_STRETCH,
I2CWRITE1, I2CREAD1, I2CPREPARE, I2CSTART, I2CSTOP, I2CSEND, I2CRECA,
I2CRECEIVEACK, I2CRECN, I2CRECEIVENACK, IF, INPUT, LCD_BITS,
LCD_DREG, LCD_DBIT, LCD_RSREG, LCD_RSBIT, LCD_EREG, LCD_EBIT,
LCD_RWREG, LCD_RWBIT, LCD_COMMANDUS, LCD_DATAUS, LCD_INITMS,
LCD_READ_BUSY_FLAG, LCD_LINES, LCD_CHARS, LCDINIT, LCDOUT,
LCDCMDOUT, LCDCLEAR, LCDHOME, LCDDISPLAYON, LCDDISPLAYOFF,
LCDCUROFF, LCDCURBLINK, LCDCURUNDERLINE, LCDCURBLINKUNDERLINE,
LCDLEFT, LCDRIGHT, LCDSHIFTLEFT, LCDSHIFTRIGHT, LCDLINE1HOME,
LCDLINE2HOME, LCDLINE3HOME, LCDLINE4HOME, LCDLINE1CLEAR,
LCDLINE2CLEAR, LCDLINE3CLEAR, LCDLINE4CLEAR, LCDLINE1POS,
LCDLINE2POS, LCDLINE3POS, LCDLINE4POS, LCDDEFCHAR, LF, LONG,
LOOKUP, LOW, MOD, NAND, NEXT, NOR, NOT, NXOR, ON INTERRUPT, OR,
OUTPUT, POINTER, PROC, PWMON, PWMDUTY, PWMOFF, READ, RESERVE,
RESUME, RETURN, SAVE SYSTEM, SELECT CASE, SERIN, SERININV, SEROUT,
SEROUTINV, SEROUT_DELAYUS, SERVOIN, SERVOOUT, SHIFTLEFT,
SHIFTRIGHT, SIMULATION_WAITMS_VALUE, SPI_CS_REG, SPI_CS_BIT,
SPI_SCK_REG, SPI_SCK_BIT, SPI_SDI_REG, SPI_SDI_BIT, SPI_SDO_REG,
SPI_SDO_BIT, SPICS_INVERT, SPICLOCK_INVERT, SPICLOCK_STRETCH,
SPICSON, SPICSOFF, SPIPREPARE, SPISEND, SPISENDBITS, SPIRECEIVE,
SQR, STARTFROMZERO, STEP, STEP_A_REG, STEP_A_BIT, STEP_B_REG,
STEP_B_BIT, STEP_C_REG, STEP_C_BIT, STEP_D_REG, STEP_D_BIT,
STEP_MODE, STEPHOLD, STEPCW, STEPCCW, SYMBOL, THEN, TO, TOGGLE,
TRUE, WAITMS, WAITUS, WEND, WHILE, WORD, WREG, WRITE, XOR.

● Elementos del lenguaje Standard

Extensión por defecto para archivos de código fuente básica es BAS. La salida del
compilador es archivo de código fuente en ensamblador (con extensión ASM) que
puede ser traducido al código binario usando el ensamblador integrado. Editor de
todas las marcas Smart reservados palabras clave en diferentes colores, que simplifica
el proceso de depuración. BÁSICO ensamblador de salida compilador tiene todas las
líneas de comentario necesario, que lo hace muy útil para fines educativos, también.

www.myspace.com/dahauser
Cuatro tipos de datos son compatibles:
- Bit (1-bit, 0 o 1)
- Byte (1-byte enteros en el rango de 0 a 255)
- Word (enteros de 2 bytes en el rango de 0 a 65.535)
- Long (enteros de 4 bytes en el rango de 0 a 4.294.967.295) - módulo opcional

Las declaraciones se pueden colocar en cualquier lugar en el programa. Todas las


variables son considera mundial. El número total de variables está limitado por la
disponible de memoria RAM del microcontrolador. Las variables son declaradas
utilizando Instrucción DIM:

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

Si es necesario, la dirección variable puede ser especificado en la declaración:


DIM x As Byte @ 0x050

También es posible usar matrices unidimensionales. Por ejemplo:


DIM A (10) As Byte

declara una matriz de 10 variables con el índice de la matriz Byte en el rango de [0-9].
Declaración de reserva permite el uso avanzado de la reserva algunos de los Lugares
de memoria RAM para ser utilizado por las rutinas en ensamblador de código o
MPLAB In-Circuit Debugger. Por ejemplo:

RESERVE 0x70

De alto y byte bajo de una variable de palabra se puede abordar. HB y. LB


extensiones. Bits individuales pueden ser abordadas por .0, .1,..., .14 y .15
extensiones. Es posible hacer conversiones entre Byte y Word Los tipos de datos
utilizando. LB y. extensiones de HB o directamente:

DIM A AS BYTE
DIM B AS WORD
A = B.HB
A = B.LB 'es equivalente a A = B
B.HB = A
B.LB = A
B = A 'This statement will also clear the high byte of B variable

Palabra alta (compuesto por bytes 3 y 2) y la palabra baja (compuesta por bytes 1 y 0)
de una variable de tiempo puede ser dirigida por. HW y. extensiones LW. Byte 0 puede
ser dirigida por. LB y por byte 1. Extensiones de HB. Por ejemplo:

DIM A AS BYTE
DIM B AS WORD
DIM x As Long

www.myspace.com/dahauser
A = X LB
B = X. HW

Todos los registros de funciones especiales (SFRs) están disponibles como variables
Byte en programas básicos. Los bits de una variable Byte pueden ser abordadas por
.0, .1, .2, .3, .4, .5, .6 Y .7 extensiones o utilizando los nombres oficiales de los bits:

DIM A AS BIT
DIM B AS BYTE
A = B.7
B.6 = 1
TRISA.1 = 0
TRISB = 0
PORTA.1 = 1
PORTB = 255
STATUS.RP0 = 1
INTCON.INTF = 0

Formularios estándar de corto para los registros de acceso a puerto y los pernos de
chips individuales también están disponibles (RA, RB, RC, RD, RE se puede utilizar
como variables Byte; RA0, RA1, RA2,..., Te6, RE7 están disponibles como variables
Bit):

RA = 0xFF
RB0 = 1

Los puertos del microcontrolador y los pernos se pueden configurar como entradas o
salidas de la asignación de valores adecuados a los registros de TRISx o sus bits. Esa
tarea también puede se consigue mediante un comunicado CONFIG. Su sintaxis se
desprende de los siguientes ejemplos:

CONFIG PORTB = OUTPUT


CONFIG RA0 = OUTPUT
CONFIG PORTC.3 = INPUT
CONFIG RD = INPUT

Cualquier variable que se declara como un byte o variable Word utilizando instrucción
Dim puede ser utilizado como un puntero a la memoria de usuario de la memoria RAM
cuando se utiliza como un argumento de La función de puntero. El valor contenido en
la variable que se utiliza como un puntero debe estar en el rango 0-511. He aquí un
ejemplo:

DIM X AS WORD
DIM Y AS BYTE
X = 0x3F
Y = POINTER(X)
Y = Y + 0x55
X=X-1
POINTER(X) = Y
Y = 0xAA

www.myspace.com/dahauser
X=X-1
POINTER(X) = Y

También es posible utilizar nombres simbólicos (símbolos) en los programas:

SYMBOL LED1 = PORTB.0


LED1 = 1
SYMBOL AD_ACTION = ADCON0.GO_DONE

Constantes pueden ser usadas en el sistema de numeración decimal, sin especiales


marcas, en el sistema de número hexadecimal con 0x notación (o con H al final) y en
el sistema binario con la marca líder% (o con B en el final). Palabras clave de
verdadero y falso también están disponibles para las constantes de tipo bit. Por
ejemplo:

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

Las constantes también pueden ser asignadas a los nombres simbólicos utilizando
CONST Directiva:

DIM A AS WORD
CONST PI = 314
A = PI

Hay tres estados que se utilizan para la manipulación de bits - ALTA, BAJA y alternar.
Si el argumento de estas declaraciones es un poco en un de los registros PORT, a
continuación, el mismo bit en el TRIS correspondiente registro se borra
automáticamente, ajuste el pasador afectados como una salida PIN. Algunos
ejemplos:

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

Todos los microcontroladores PIC que incorporan características analógicas


(conversores A / D y / o comparadores analógicos) están configurados en el poder
para usar los pines complicado para estos efectos análogos. Para poder utilizar los
pines como entrada / salidas digitales, que debe ser el programa de instalación para el
uso digital cambiando los valores en algunas de las registros de funciones especiales
como se especifica en las fichas técnicas. Para configurar todos los pines para fines
digitales, la declaración ALLDIGITAL puede ser utilizado al comienzo del programa
básico.

Cinco operaciones aritméticas (+, -, *, /, MOD) están disponibles para Byte, Word y
Tipos de datos Long. El compilador es capaz de compilar todos los complejos posibles
expresiones aritméticas. Por ejemplo:

www.myspace.com/dahauser
DIM A AS WORD
DIM B AS WORD
DIM X AS WORD
A = 123
B = A * 234
X=2
X = (B * X - 12345) / (A + X)

La raíz cuadrada de un número (0-65535 rango) puede ser calculada usando la


función SQR:
DIM A AS WORD
A = 3600
A = SQR(A)

Para las variables de tipo bit de datos de siete operaciones lógicas disponibles. Es
posible hacer sólo una operación lógica en una sola declaración. Las operaciones
lógicas también están disponibles para Byte y las variables de Word. Para ejemplo:

DIM A AS BIT
DIM B AS BIT
DIM X AS BIT
X = NOT A
X = A AND B
X = A OR B
X = A XOR B
X = A NAND B
X = A NOR B
X = A NXOR B

DIM A AS WORD
DIM B AS WORD
A = A OR B
PORTB = PORTC AND %11110000

Hay dos parámetros de configuración CONF_WORD y CONF_WORD_2 (no


disponible para todos los dispositivos) que se puede establecer mediante Directiva
definen a reemplazar los valores por defecto. La frecuencia de reloj del dispositivo de
destino puede ser especificado por el parámetro de configuración
CLOCK_FREQUENCY (el valor es expresada en MHz). Estos parámetros pueden ser
de instalación al principio del programa básico. Por ejemplo:

DEFINE CONF_WORD = 0x3F72


DEFINE CLOCK_FREQUENCY = 20

Contenido de la memoria EEPROM se puede definir en los programas básicos


mediante declaración EEPROM. Su primer argumento es la dirección del primer byte
de la lista de datos. Múltiples Declaraciones EEPROM se puede utilizar para rellenar
las diferentes áreas de la memoria EEPROM, si es necesario. Por ejemplo:

www.myspace.com/dahauser
EEPROM 0, 0x55
EEPROM 253, 0x01, 0x02, 0x03

La declaración GOTO usa el nombre de etiqueta de línea como argumento. Las


etiquetas de línea debe ser seguido por la marca de dos puntos ":". He aquí un
ejemplo:

DIM A AS WORD
A=0
loop: A = A + 1
GOTO loop

WAITMS y declaraciones WAITUS puede ser usado para forzar al programa de


esperar a que el número especificado de milisegundos o microsegundos. También es
posible utilizar el argumento de variable de bytes de datos de Word o de tipo. Estos las
rutinas de uso de frecuencia de reloj de parámetros que se pueden cambiar desde el
Menú Opciones. Rutina WAITUS tiene un retraso mínimo y de paso que también
dependerá de los parámetros de la frecuencia de reloj.

DIM A AS WORD
A = 100
WAITMS A
WAITUS 50

NOTA: Al escribir programas para dispositivos PIC real que se la mayoría de los
intervalos de demora probable uso que son comparables a 1 segundo o 1000
milisegundos. Hay muchos ejemplos en este archivo de ayuda también el uso del
tiempo como 'real' intervalos. Pero, si se desea simular los programas que tienen que
ser mucha paciencia para ver que suceda algo, incluso en equipos muy potentes
disponibles en la actualidad. Para la simulación de 'WaitMs 1000' declaración sobre la
4MHz que tienen que esperar el simulador para simular 1000000 instrucciones y se
tomar mucho tiempo, incluso si "extremadamente rápido" velocidad de simulación está
seleccionado. Así que, sólo con el propósito de la simulación se debería recompilar de
sus programas con intervalos de retardo ajustado, que no deberá exceder de 1-10ms.
Sin embargo, asegúrese de volver a compilar el programa con retrasos original antes
de descargarlo a un dispositivo real. Hay una forma fácil de cambiar los argumentos de
todas las declaraciones WAITMS en un gran programa básico con un valor en el rango
de 1-10 para fines de simulación. Con una línea de código de ajuste de parámetros
con SIMULATION_WAITMS_VALUE DEFINE Directiva, los argumentos de todas las
declaraciones WAITMS en el programa serán ignorados y el valor especificado su
lugar se utilizará durante la compilación. Establecer el valor 0 (por defecto) para este
parámetro (o la omisión de toda la línea), se cancelará su efecto y el código compilado
estará listo de nuevo para el hardware real.

Si es necesario contar el número de impulsos que llegan a un de los pines del


MICROCNTROLADOR durante un cierto período de tiempo, no es COUNT
declaración disponibles para ese fin. Tiene tres argumentos. La primera es el pin que
se conecta a la fuente de pulsos. Que previamente debe ser de configuración como
pin de entrada digital. El segundo argumento se define de la duración de la
observación expresada en milisegundos y debe ser un numérico constante en el rango
1-10000. El último argumento de esta declaración es un byte o palabra variable, donde

www.myspace.com/dahauser
el número contado de pulsos serán almacenados después de su ejecución.
Declaración CONTAR utiliza el módulo timer0 interior periférica. Hay COUNT_MODE
de parámetros disponibles que pueden ser de configuración con Directiva definen. Si
se establece en el valor 1 (valor predeterminado) cuentan declaración se cuentan el
número de aristas de pulso en aumento. Si COUNT_MODE = 2, el número de aristas
caída será contado.

DEFINE COUNT_MODE = 1
DIM num_of_pulses AS WORD
COUNT PORTB.0, 1000, num_of_pulses

FREQOUT declaración puede ser utilizada para generar un tren de pulsos (tono de
sonido) en el pin especificado con frecuencia constante y de duración determinada.
Tiene tres argumentos. El primer argumento es el pin que el tono se se generará en.
Que previamente deben ser configurados como pines de salida digital. El segundo
argumento especifica la frecuencia de tono y debe ser una constante en la rango de 1-
10000Hz. El tercer argumento define el tono y la duración también se debe una
constante numérica en el rango de 1-10000ms. Selección de frecuencias más altas
tono con baja frecuencia de reloj del microcontrolador puede resultar un tanto
imprecisos en la frecuencia de los timbres que generan. Declaración FREQOUT
alternativamente, puede ser utilizado en modo 'variable' con datos de Word variables
de tipo de cambio de las constantes durante los dos últimos argumentos. En este
modo del uso de la segunda alegación se supone que debe mantener el período de
media de la señal de (en microsegundos) y el tercer argumento debe contener el
número total de pulsos de que se generarán. El siguiente código generará un tono
largo segundo en el pin RB0 con 600Hz de frecuencia:

TRISB.0 = 0
FREQOUT PORTB.0, 600, 1000

Estándar de cuatro estructuras básicas son compatibles: FOR-TO-STEP-NEXT,


WHILE-WEND, IF-THEN-ELSE-ENDIF y SELECT CASE-CASE-ENDSELECT. He
aquí varios ejemplos:

DIM A AS BYTE
TRISB = 0
A = 255
WHILE A > 0
PORTB = A
A=A-1
WAITMS 100
WEND
PORTB = A

TRISB = 0
loop:
IF PORTA.0 THEN
PORTB.0 = 1

www.myspace.com/dahauser
ELSE
PORTB.0 = 0
ENDIF
GOTO loop

DIM A AS WORD
TRISB = 0
FOR A = 0 TO 10000 STEP 10
PORTB = A.LB
NEXT A

DIM A AS BYTE
DIM B AS BYTE
DIM X AS BYTE
B = 255
X=2
TRISB = 0
FOR A = B TO 0 STEP -X
PORTB = A
NEXT A

DIM A AS BYTE
loop:
SELECT CASE A
CASE 255
A=1
CASE <= 127
A=A+1
CASE ELSE
A = 255
ENDSELECT
GOTO loop

Después de IF-entonces en la misma línea se pueden colocar casi todos los posible
declaración de otros y, a continuación ENDIF no se utiliza. No hay límites para el
número de declaraciones anidadas de ningún tipo. En las expresiones de prueba de
IF-THEN y WHILE es posible las condiciones de uso múltiple AND OR y múltiples.
Condiciones separadas por comas múltiples puede ser utilizado con las declaraciones
caso, también.

Función de búsqueda puede ser utilizada para seleccionar uno de la lista de Byte
constantes, basados en el valor de la variable índice del byte, es decir suministrado
como argumento separado de la última función. La primera constante en la lista tiene
un valor de índice 0. Las constantes seleccionadas serán cargadas en la variable
resultado Byte tipo de datos. Si el valor en el índice variable va más allá del número de
las constantes en la lista, el resultado variable no se verá afectada por la función. He
aquí un pequeño ejemplo: de 7-segment LED display:

DIM DIGIT AS BYTE


DIM MASK AS BYTE

www.myspace.com/dahauser
loop:
TRISB = %00000000
FOR DIGIT = 0 TO 9
MASK = LOOKUP(0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F),
DIGIT
PORTB = MASK
WAITMS 1000
NEXT DIGIT
GOTO loop

Si todas las constantes en la lista (o parte de ellos) son los valores ASCII, a
continuación, forma más corta de la lista puede ser creada mediante el uso de
argumentos de la cadena. Para ejemplo:

MASK = LOOKUP("ABCDEFGHIJK"), INDEX

SHIFTLEFT y funciones SHIFTRIGHT se puede utilizar para cambiar a nivel de bits la


representación de una variable a la izquierda y la derecha. El primer argumento es la
entrada de variable y el segundo argumento es el número de cambios a realizar. He
aquí dos ejemplos:

TRISB = 0x00
PORTB = %00000011
goleft:
WAITMS 250
PORTB = SHIFTLEFT(PORTB, 1)
IF PORTB = %11000000 THEN GOTO goright
GOTO goleft
goright:
WAITMS 250
PORTB = SHIFTRIGHT(PORTB, 1)
IF PORTB = %00000011 THEN GOTO goleft
GOTO goright

TRISB = 0x00
PORTB = %00000001
goleft:
WAITMS 250
PORTB = SHIFTLEFT(PORTB, 1)
IF PORTB.7 THEN GOTO goright
GOTO goleft
goright:
WAITMS 250
PORTB = SHIFTRIGHT(PORTB, 1)
IF PORTB.0 THEN GOTO goleft
GOTO goright

Programas estructurados se pueden escribir con llamadas de subrutina con GOSUB


declaración de que usa el nombre de etiqueta de línea como argumento. Regreso de
una subrutina se realiza por instrucción de devolución. Usuario necesidad de cuidar
que la estructura del programa es coherente. Al utilizar subrutinas, principal necesidad

www.myspace.com/dahauser
de rutina que terminó con la declaración de END. Declaración de END es compilado
como un bucle infinito. Aquí está un ejemplo:

SYMBOL ad_action = ADCON0.GO_DONE


SYMBOL display = PORTB
TRISB = %00000000
TRISA = %111111
ADCON0 = 0xC0
ADCON1 = 0
HIGH ADCON0.ADON
main:
GOSUB getadresult
display = ADRESH
GOTO main
END
getadresult:
HIGH ad_action
WHILE ad_action
WEND
RETURN

Si hay una necesidad de insertar un bucle infinito en el programa básico, que que se
puede hacer con la declaración de HALT. Es posible insertar puntos de interrupción
para el simulador directamente en la base utilizando programas de instrucción break.
Está compilado como código de operación reservados 0x0001 y el simulador
interpretará este código de operación como un punto de interrupción y el interruptor la
velocidad de simulación de paso a paso. Es posible utilizar los comentarios en los
programas de fuente básica. Los comentarios debe comenzar con el símbolo de
comilla simple ( ') y se puede poner en cualquier lugar de el programa. Las líneas de
código fuente en ensamblador se puede colocar en cualquier parte de base programa
de origen y debe comenzar con ASM: prefijo. Por ejemplo:

ASM: NOP
ASM:LABEL1: MOVLW 0xFF

Los nombres simbólicos de variables declaradas se pueden utilizar en ensamblador


rutinas de dirección variable adecuada, porque se le asignará a los nombres por la
Directiva EQU:

DIM VARNAME AS BYTE


ASM: MOVLW 0xFF
ASM: MOVWF VARNAME

Cuando se trabaja con el código ensamblador, podría ser útil usar registro de trabajo
como origen o destino en asignar declaraciones. Para esa palabra clave WREG
propósito debe ser utilizada y el compilador se encargará del control del banco:

DIM VARNAME AS BYTE


ASM: MOVLW 0xFF
VARNAME = WREG

www.myspace.com/dahauser
● apoyo lenguaje estructurado (procedimientos y funciones) - Módulo opcional

Procedimientos pueden ser declarados con la declaración PROC. Pueden contener


hasta 5 argumentos (lista separada por comas) y todos los tipos de datos disponibles
se pueden utilizar para las variables de argumentos. El argumento se declara las
variables a nivel local, por lo que no es necesario tener únicos los nombres en relación
con el resto de los usuarios básicos del programa, que hace muy fácil de reutilización
de los procedimientos, una vez por escrito en otros programas de base. Los
procedimientos pueden ser salido con la declaración de EXIT. Se debe terminar con la
instrucción End PROC y debe ser colocado después de la declaración END en el
programa. Las llamadas a los procedimientos se apliquen con la instrucción CALL. La
lista de argumentos pasados puede contener variables y constantes numéricas. Por
ejemplo:

DIM A AS BYTE
FOR A = 0 TO 255
CALL portb_display(A)
WAITMS 100
NEXT A
END

PROC portb_display(arg1 AS BYTE)


PORTB = arg1
END PROC

Todos los hechos establecidos para los procedimientos son válidos para las funciones,
también. Funciones puede ser declarada con la declaración de FUNCTION. Pueden
contener hasta 5 argumentos y las variables de la alegación se declaran a nivel local.
Las funciones se pueden salir con Declaración EXIT y debe terminar con End
Function. El nombre de la función de se declara como una variable global, de modo
que si la función se llama con CALL declaración, después de su ejecución función de
la variable contendrá el resultado. Forma estándar de llamadas a funciones en
instrucciones de asignación se puede utilizar, también. Un ejemplo simple:

DIM A AS BYTE
DIM B AS WORD
FOR A = 0 TO 255
B = square(A)
NEXT A
END

FUNCTION square(arg1 AS WORD) AS WORD


square = arg1 * arg1
END FUNCTION

● Uso de la memoria EEPROM interna

El acceso a los datos de la memoria EEPROM se pueden programar con LEA y


Escribir instrucciones. El primer argumento es la dirección de un byte en la De
memoria EEPROM y puede ser una variable continua o Byte. La segunda argumento
es un dato que se lee o escribe (para la declaración LEA debe ser un Variable de
bytes). Se sugiere mantener las interrupciones con discapacidad durante el la
ejecución del comando WRITE.

www.myspace.com/dahauser
DIM A AS BYTE
DIM B AS BYTE
A = 10
READ A, B
WRITE 11, B

● Un internos utilizando / módulo convertidor D

ADCIN declaración está disponible como un apoyo a un interno de convertidor A / D.


Su el primer argumento es el número de canal ADC y el segundo argumento es un
variable que se utiliza para almacenar el resultado de la conversión A / D. ADCIN
instrucción utiliza dos parámetros ADC_CLOCK y ADC_SAMPLEUS que tienen
valores por defecto 3 y 20. Estos valores por defecto puede ser cambiar mediante
Directiva definen. Parámetro determina ADC_CLOCK la elección de la fuente de reloj
ADC (rango permitido es de 0-3 o 0-7 dependiendo de en el dispositivo utilizado).
ADC_SAMPLEUS parámetro establece el ADC deseado tiempo de adquisición en
microsegundos (0-255). ADCIN afirmación presupone que el pin correspondiente se
configura como una entrada analógica (TRIS, Registro ADCON1 y en algunos
dispositivos de registro ANSEL). Aquí está UN ejemplo:

DIM V(5) AS BYTE


DIM VM AS WORD
DIM I AS BYTE
DEFINE ADC_CLOCK = 3
DEFINE ADC_SAMPLEUS = 50
TRISA = 0xFF
TRISB = 0
ADCON1 = 0
FOR I = 0 TO 4
ADCIN 0, V(I)
NEXT I
VM = 0
FOR I = 0 TO 4
VM = VM + V(I)
NEXT I
VM = VM / 5
PORTB = VM.LB

● Uso de las interrupciones

La rutina de interrupción debe ser colocado como todas las otras subrutinas después
de la END declaración. Se debe comenzar con en la interrupción y terminar con
Resume. Si las operaciones aritméticas, matrices o cualquier otro instrucciones
complejas se utilizan en la rutina de interrupción, entonces salvar el sistema de
declaración debe ser colocado inmediatamente después de la declaración sobre
interrupción para guardar el contenido de los registros utilizados por el sistema.
Habilitar y deshabilitar declaraciones pueden ser utilizadas en el programa principal
para el control de bits GIE en INTCON registro. Instrucción Resume se establece el bit
GIE y permitir que los nuevos interrupciones. Por ejemplo:

DIM A AS BYTE

www.myspace.com/dahauser
A = 255
TRISA = 0
PORTA = A
INTCON.INTE = 1
ENABLE
END
ON INTERRUPT
A=A-1
PORTA = A
INTCON.INTF = 0
RESUME

DIM T AS WORD
T=0
TRISA = 0xFF
ADCON1 = 0
TRISB = 0
OPTION_REG.T0CS = 0
INTCON.T0IE = 1
ENABLE
loop:
ADCIN 0, PORTB
GOTO loop
END
ON INTERRUPT
SAVE SYSTEM
T=T+1
INTCON.T0IF = 0
RESUME

Comunicación serie ● utilizando hardware interno UART

El soporte para el hardware y el software de comunicación en serie es también está


disponible. HSEROPEN, HSEROUT, HSERIN y HSERGET las declaraciones se
pueden utilizar con dispositivos PIC que han de hardware interno UART. HSEROPEN
declaración establece el hardware UART. Su única argumento es Baud Rate y los
valores permitidos son: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800,
31250, 38400, 56000 y 57600. Si el argumento se omite UART se creará para 9600
baudios. Si ALLOW_MULTIPLE_HSEROPEN parámetro se establece en 1, utilizando
DEFINE Directiva, será posible utilizar HSEROPEN declaración de más de , una vez
en el programa, por ejemplo, para el cambio, seleccione la velocidad en baudios. Si
ALLOW_ALL_BAUDRATES parámetro se establece en 1, utilizando DEFINE Todas
las tarifas Directiva baudios en el rango de 100-57600 será permitido. HSEROUT
comando se usa para la transmisión en serie. HSEROUT declaración puede tener
varios argumentos separados por ','. Usted puede utilizar cadenas, LF palabra clave
para la Línea carácter de avance o una palabra clave para la CRLF Carriage Return -
Line Feed secuencia, las constantes y variables. Si '#' el signo se utiliza antes de que
el nombre de una variable, entonces su decimal la representación se envía al puerto
serie. Declaración HSERIN puede ser utilizado para cargar una lista de Byte y las
variables de Word con los valores recibidos en puerto serie. Esta declaración será
esperar hasta que el número necesario de bytes es reciben en el puerto de serie.
Declaración HSERGET con un argumento que debe ser una variable Byte. Si hay un
carácter de espera en recibir la tampón será cargado en la variable, de lo contrario el
valor 0 se cargará. Éstos son algunos ejemplos:

www.myspace.com/dahauser
DIM I AS BYTE
HSEROPEN 38400
WAITMS 1000
FOR I = 20 TO 0 STEP -1
HSEROUT "Number: ", #I, CrLf
WAITMS 500
NEXT I

DIM I AS BYTE
HSEROPEN 19200
loop:
HSERIN I
HSEROUT "Number: ", #I, CrLf
GOTO loop

DIM I AS BYTE
HSEROPEN 19200
loop:
HSERGET I
IF I > 0 THEN
HSEROUT "Number: ", #I, CrLf
WAITMS 50
ENDIF
GOTO loop

● Software UART aplicación

En todos los dispositivos de serie de software de PIC la comunicación puede ser


implementada con serout y declaraciones SERIN. La primera argumento de los dos
estados debe ser uno de los pines del microcontrolador, y el segundo argumento es
Baud Rate: 300, 600, 1200, 2400, 4800, 9600 o 19200. Uso de las tasas de baudios
con baja frecuencia de reloj puede causar errores de encuadre. Para la declaración
serout luego sigue la lista de argumentos que se enviados al puerto serie. Usted puede
utilizar cadenas, LF palabra clave para la línea de alimentación carácter o palabra
clave para CRLF Carriage Return - Line Feed secuencia, las constantes y variables. Si
'#' signo se utiliza antes de que el nombre de una variable entonces su representación
decimal se envía al puerto serie. Serout declaración SEROUT_DELAYUS usa el
parámetro que se puede establecer por el DEFINE Directiva y tiene un valor
predeterminado de 1000 microsegundos. Esto define el intervalo de demora antes de
que un personaje sea enviado al puerto de y se utiliza para aumentar la fiabilidad del
software serout rutina. Para SERIN declaración luego sigue la lista de Byte y las
variables de Word que se cargado con los valores recibidos en el puerto de serie. Esta
declaración será esperar hasta el número necesario de bytes se reciben en el puerto
de serie. Para serie interfaz con los niveles de lógica invertida que hay SERININV y de
Declaraciones SEROUTINV disponibles. Algunos ejemplos:

DEFINE SEROUT_DELAYUS = 5000


SEROUT PORTC.6, 1200, "Hello world!", CrLf

www.myspace.com/dahauser
DIM I AS BYTE
loop:
SERIN PORTC.7, 9600, I
SEROUT PORTC.6, 9600, "Number: ", #I, CrLf
GOTO loop

● Comunicación I2C con dispositivos externos de I2C

Comunicación I2C se pueden implementar en los programas básicos con I2CWRITE y


declaraciones I2CREAD. El primer argumento de los dos las declaraciones deben ser
uno de los pines del microcontrolador que se conecta a la línea SDA del dispositivo
I2C externos. El segundo argumento de ambos comandos deben ser uno de los pines
del microcontrolador que se conectado a la línea SCL. El tercer argumento de ambos
comandos debe ser un valor constante o variable Byte llamada "dirección de esclavo".
Su formato es se describe en la hoja de datos del dispositivo utilizado. Por ejemplo,
para EEPROM 24C de la familia (con entradas de dirección del dispositivo conectado
a suelo), el 0xA0 valor debe utilizarse para el parámetro de esclavos dirección. En
ambas declaraciones se tomarán el control sobre el bit 0 de la dirección de esclavos
durante comunicación. El cuarto argumento de ambos comandos deben ser un byte
Word o variable (depende del dispositivo utilizado) que contiene el la dirección de la
ubicación que se tendrá acceso. Si un valor constante se utilizado para el parámetro
de dirección debe estar en el rango de valor Byte. La última (quinta) El argumento de
la declaración de I2CWRITE Byte es una constante o variable que será escrito a la
dirección especificada, y para la declaración I2CREAD debe ser una variable de bytes
para almacenar el valor que se leerá de la dirección especificada. Se permite utilizar
más de un argumento de 'datos'. Para los dispositivos I2C que no admiten datos de la
dirección argumento hay forma abreviada de las declaraciones I2C (I2CWRITE1 y
I2CREAD1) disponibles donde el argumento dirección del esclavo es seguido con uno
o más datos argumentos directamente. Para algunos dispositivos esclavos I2C es
necesario hacer un retraso para que el dispositivo esté listo para responder a la
declaración de I2CREAD. Para ello hay I2CREAD_DELAYUS parámetro que se puede
fijados por la Directiva DEFINE y tiene un valor predeterminado de 0 microsegundos.
Además, para dispositivos más lentos I2C, podría ser necesario utilizar más pulsos de
reloj. Eso se puede hacer mediante el establecimiento de parámetros
I2CCLOCK_STRETCH utilizando Directiva definen. Este parámetro se establece
alargamiento del reloj. Su valor predeterminado es 1. He aquí un ejemplo en
combinación con el módulo LCD y 24C64 EEPROM (SDA conectado a RC2, SCL
conectado a RC3):

DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTB
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTD
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTD
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTD
DEFINE LCD_RWBIT = 2
DIM ADDR AS WORD
DIM DATA AS BYTE
SYMBOL SDA = PORTC.2
SYMBOL SCL = PORTC.3
LCDINIT 3

www.myspace.com/dahauser
WAITMS 1000
FOR ADDR = 0 TO 31
LCDCMDOUT LcdClear
DATA = 255 - ADDR
I2CWRITE SDA, SCL, 0xA0, ADDR, DATA
LCDOUT "Write To EEPROM"
LCDCMDOUT LcdLine2Home
LCDOUT "(", #ADDR, ") = ", #DATA
WAITMS 1000
NEXT ADDR
FOR ADDR = 0 TO 31
LCDCMDOUT LcdClear
I2CREAD SDA, SCL, 0xA0, ADDR, DATA
LCDOUT "Read From EEPROM"
LCDCMDOUT LcdLine2Home
LCDOUT "(", #ADDR, ") = ", #DATA
WAITMS 1000
NEXT ADDR

Hay un conjunto de declaraciones de bajo nivel de I2C de comunicación disponibles, si


es necesario para tener más control sobre el proceso de comunicación I2C.
Declaración I2CPREPARE tiene dos argumentos que deben ser uno de los alfileres
microcontrolador. El primer argumento define la línea SDA y el segundo argumento
define la línea SCL. Esta declaración será preparar estas líneas para Comunicación
I2C. Declaración I2CSTART generará condición de arranque, y la declaración de
i2cstop generará condición de paro. Un byte puede ser envió al esclavo I2C using
I2CSEND. Después de la declaración es bit C ejecutado en registro de estado
mantendrá la copia del estado de la Línea SDA durante el ciclo de reconocer. Hay dos
afirmaciones que puede ser utilizado para recibir un byte de esclavo I2C. I2CRECA o
I2CRECEIVEACK generará señal de reconocimiento durante el ciclo de acknowlegde
después de recibir el byte. I2CRECN o I2CRECEIVENACK generará no reconocer la
señal durante la ciclo de acknowlegde después de recibir el byte. Un ejemplo:

DIM ADDR AS WORD


DIM DATA(31) AS BYTE
SYMBOL SDA = PORTC.4
SYMBOL SCL = PORTC.3
ADDR = 0
I2CPREPARE SDA, SCL
I2CSTART
I2CSEND 0xA0
I2CSEND ADDR.HB
I2CSEND ADDR.LB
I2CSTOP
I2CSTART
I2CSEND 0xA1
FOR ADDR = 0 TO 30
I2CRECEIVEACK DATA(ADDR)
NEXT ADDR
I2CRECN DATA(31)
I2CSTOP

● Apoyo de Serial Peripheral Interface (SPI) comunicación

www.myspace.com/dahauser
Antes de utilizar las declaraciones relacionadas con SPI, la interfaz de SPI debe
crearse el uso de directivas DEFINE. Hay ocho parámetros disponibles para definir de
la conexión de SCK, SDI, SDO y (opcionalmente) las líneas de CS:

SPI_SCK_REG - define el puerto donde la línea SCK está conectado a


SPI_SCK_BIT - define el pin en la línea SCK está conectado a
SPI_SDI_REG - define el puerto donde la línea IDE está conectado a
SPI_SDI_BIT - define el pin donde la línea IDE está conectado a
SPI_SDO_REG - define el puerto donde la línea SDO está conectado a
SPI_SDO_BIT - define el pin donde la línea SDO está conectado a
SPI_CS_REG - define el puerto en línea de CA está conectado a
SPI_CS_BIT - define el pin donde la línea CS está conectado a
La configuración de la hipótesis se activa alta de la línea del reloj y la activa baja para
la línea ChipSelect. Que puede ser cambiado por asignar el valor 1 a
SPICLOCK_INVERT y / o parámetros SPICS_INVERT por la Directiva DEFINE. Para
los dispositivos más lentos SPI, podría ser necesario utilizar más tiempo del reloj
pulsos. El valor por defecto factor de estiramiento de reloj (1) se puede cambiar
mediante el establecimiento de Parámetro SPICLOCK_STRETCH.

Declaración de SPIPREPARE (sin argumentos) preparará las líneas de interfaz de


para la comunicación SPI. SPICSON y declaraciones SPICSOFF permitirá /
deshabilitar la línea de ChipSelect de la interfaz. Un byte se pueden enviar a la
declaración periféricos SPI SPISEND utilizando. Para recibir un byte de la declaración
SPIRECEIVE periférica deben ser utilizados. Para enviar el especificado número de
bits que hay SPISENDBITS declaración disponible. Su primer argumento debe ser el
número de bits que se enviarán [1-8] y el segundo argumento es una variable o
constante de bytes. He aquí un ejemplo para el uso de 25C040 SPI EEPROM:

AllDigital

Define SPI_CS_REG = PORTC


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

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

Dim addr As Byte

www.myspace.com/dahauser
Dim data As Byte

For addr = 0 To 10
data = 200 - addr
SPICSOn
SPISend 0x06
SPICSOff
SPICSOn
SPISend 0x02
SPISend addr
SPISend data
SPICSOff
Lcdcmdout LcdClear
Lcdout "Write To EEPROM"
Lcdcmdout LcdLine2Home
Lcdout "(", #addr, ") = ", #data
WaitMs 500
Next addr

For addr = 0 To 10
SPICSOn
SPISend 0x03
SPISend addr
SPIReceive data
SPICSOff
Lcdcmdout LcdClear
Lcdout "Read From EEPROM"
Lcdcmdout LcdLine2Home
Lcdout "(", #addr, ") = ", #data
WaitMs 500
Next addr

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

AllDigital

Define SPI_CS_REG = PORTC


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

Define LCD_BITS = 8
Define LCD_DREG = PORTD
Define LCD_DBIT = 0
Define LCD_RSREG = PORTE
Define LCD_RSBIT = 0

www.myspace.com/dahauser
Define LCD_RWREG = PORTE
Define LCD_RWBIT = 1
Define LCD_EREG = PORTE
Define LCD_EBIT = 2
Define LCD_READ_BUSY_FLAG = 1
Lcdinit

Dim addr As Byte


Dim data As Byte

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

For addr = 0 To 10
data = 200 - addr
SPICSOn
SPISendBits 6, %101000
SPISendBits 8, addr
SPISend data
SPICSOff
SPICSOn
SPISend 0x00
SPICSOff
Lcdcmdout LcdClear
Lcdout "Write To EEPROM"
Lcdcmdout LcdLine2Home
Lcdout "(", #addr, ") = ", #data
WaitMs 500
Next addr

For addr = 0 To 10
SPICSOn
SPISendBits 6, %110000
SPISendBits 8, addr
SPIReceive data
SPICSOff
Lcdcmdout LcdClear
Lcdout "Read From EEPROM"
Lcdcmdout LcdLine2Home
Lcdout "(", #addr, ") = ", #data
WaitMs 500
Next addr

● Interfaz de carácter LCD

Compilador Basic también cuenta con el apoyo de módulos basados en LCD HD44780
o el chip controlador compatible. Antes de utilizar las declaraciones relacionadas con
LCD, el usuario debe crear la interfaz de cristal líquido mediante directivas DEFINE.
Esta es la lista de la parámetros disponibles:
LCD_BITS - define el número de líneas de datos de interfaz (los valores permitidos
son de 4 y 8, por defecto es 4)
LCD_DREG - define el puerto en el que las líneas de datos están conectados a (por
defecto es PORTB)

www.myspace.com/dahauser
LCD_DBIT - define la posición de las líneas de datos para la interfaz de 4-bit (0 o 4;
por defecto es 4), ignorado por 8-bit de interfaz de
LCD_RSREG - define el puerto donde se conecta la línea RS (por defecto es PORTB)
LCD_RSBIT - define el pin RS cuando está conectado a la línea (por defecto es 3)
LCD_EREG - define el puerto donde se conecta la línea E (por defecto es PORTB)
LCD_EBIT - define el pin donde se conecta la línea E (por defecto es 2)
LCD_RWREG - define el puerto en el R / W es la línea conectada (en conjunto a la 0 si
no se utiliza; 0 es por defecto)
LCD_RWBIT - define el pin en R / W es la línea conectada a (a 0 si no se utiliza, 0 por
defecto)
LCD_COMMANDUS - define el retraso después de la declaración LCDCMDOUT (valor
por defecto es 5000)
LCD_DATAUS - define el retraso después de la declaración LCDOUT (por defecto el
valor es 100)
LCD_INITMS - define el retraso de la declaración LCDINIT (valor por defecto es 100)

Los tres últimos parámetros pueden ser fijados a los valores bajos cuando se utiliza
simulador de LCD integrada módulo. Si R / W es la línea conectada al
microcontrolador y LCD_READ_BUSY_FLAG parámetro se establece en 1, utilizando
DEFINE Directiva, a continuación, estos parámetros de demora será ignorado por el
compilador y el momento correcto será llevarse a cabo mediante la lectura de la
situación de la bandera de ocupado en la pantalla LCD.

Declaración LCDINIT debe ser colocado en el programa antes de cualquiera de


LCDOUT (utilizado para el envío de datos) y LCDCMDOUT (utilizado para el envío de
comandos) las declaraciones. Argumento numérico constante de LCDINIT se utiliza
para definir el tipo de cursor: 0 = No cursor (por defecto), 1 = abrir y cerrar, 2 =
subrayado, parpadeo + 3 = subrayado. LCDOUT y declaraciones LCDCMDOUT puede
tener varios argumentos separados por ','. Cadenas, constantes y variables pueden
ser utilizados como los argumentos de la declaración de LCDOUT. Si '#' signo se
utiliza antes de que el nombre de una variable, entonces su representación decimal se
envía al módulo LCD. Las constantes y las variables pueden ser utilizados como
argumentos de LCDCMDOUT declaración y las siguientes palabras también están
disponibles: LcdClear, LcdHome, LcdLine2Home, LcdDisplayOn, LcdDisplayOff,
LcdCurOff, LcdCurBlink, LcdCurUnderline, LcdCurBlinkUnderline, LcdLeft, LcdRight,
LcdShiftLeft, LcdShiftRight, LcdLine1Clear, LcdLine2Clear, LcdLine1Pos () y
LcdLine2Pos (). Argumento de LcdLine1Pos () y LcdLine2Pos () puede ser un número
en el rango (1-40) o datos de tipo Byte variable. El valor contenido en esa variable
debe estar en el mismo rango. LcdDisplayOn y LcdDisplayOff será desactivar el
cursor. Cursor relacionados simbólico comandos pueden ser utilizados como
argumentos de LCDINIT. Éstos son algunos ejemplos:

DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTB
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTD
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTD
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTD
DEFINE LCD_RWBIT = 2
LCDINIT LcdCurBlink
loop:

www.myspace.com/dahauser
LCDOUT "Hello world!"
WAITMS 1000
LCDCMDOUT LcdClear
WAITMS 1000
GOTO loop

DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTB
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTD
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTD
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTD
DEFINE LCD_RWBIT = 2
DIM A AS WORD
A = 65535
LCDINIT 3
WAITMS 1000
loop:
LCDOUT "I am counting!"
LCDCMDOUT LcdLine2Home
LCDOUT #A
A=A-1
WAITMS 250
LCDCMDOUT LcdClear
GOTO loop

Declaraciones relacionadas con LCD tendrá el control de los registros TRIS


conectados con clavos utilizados para la interfase LCD, pero si se utiliza PORTA o
Porte pins en dispositivos con A / D Converter Módulo entonces usted debería tomar el
control sobre el registro ADCON1 utilizados para establecer los pines como E / S
digital

Puedes configurar hasta ocho caracteres definidos por el usuario que se utilizará en la
pantalla LCD. Esto puede hacerse fácilmente con la declaración de LCDDEFCHAR. La
primera el argumento de esta afirmación es el número de caracteres y debe estar en el
rango de 0-7. El próximo 8 de argumentos el Formulario 8-char patrón de línea (de
arriba hacia abajo) y debe estar en el rango 0-31 (5-bits de ancho). Estos personajes 8
de usuario se asignados a los códigos de caracteres 0-7 y 8-15 y se pueden mostrar
utilizando LCDOUT declaración. Después de la declaración LCDDEFCHAR el cursor
estará en Posición inicial. 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, "Hello!", 1, 0

Para LCD con cuatro líneas de caracteres adicionales argumentos simbólico de


LCDCMDOUT declaración puede ser utilizada: LcdLine3Home, LcdLine4Home,
LcdLine3Clear, LcdLine4Clear, LcdLine3Pos () y LcdLine4Pos (). Argumento de
LcdLine3Pos () y LcdLine4Pos () puede ser un número en el rango (1-40) o datos de

www.myspace.com/dahauser
tipo Byte variable. El valor contenido en esa variable debe estar en la misma gama.
Antes de utilizar estos elementos el idioma, los valores correctos determinar el tipo de
LCD debe ser asignado a LCD_LINES y parámetros LCD_CHARS mediante directivas
DEFINE.

DEFINE LCD_LINES = 4
DEFINE LCD_CHARS = 16
DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTB
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTD
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTD
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTD
DEFINE LCD_RWBIT = 2
LCDINIT 3
loop:
LCDCMDOUT LcdClear
LCDCMDOUT LcdLine1Home
LCDOUT "This is line 1"
LCDCMDOUT LcdLine2Home
LCDOUT "This is line 2"
LCDCMDOUT LcdLine3Home
LCDOUT "This is line 3"
LCDCMDOUT LcdLine4Home
LCDOUT "This is line 4"
WAITMS 1000
LCDCMDOUT LcdLine1Clear
LCDCMDOUT LcdLine2Clear
LCDCMDOUT LcdLine3Clear
LCDCMDOUT LcdLine4Clear
LCDCMDOUT LcdLine1Pos(1)
LCDOUT "Line 1"
LCDCMDOUT LcdLine2Pos(2)
LCDOUT "Line 2"
LCDCMDOUT LcdLine3Pos(3)
LCDOUT "Line 3"
LCDCMDOUT LcdLine4Pos(4)
LCDOUT "Line 4"
WAITMS 1000
GOTO loop

● Interfaz gráfica LCD con matriz de puntos de 128x64

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

www.myspace.com/dahauser
GLCD_DREG - define el puerto en el que las líneas de datos están conectados a (se
ha ser completos de 8 pines del puerto)
GLCD_RSREG - define el puerto en el RS línea está conectada a
GLCD_RSBIT - define el pin RS en línea está conectada a
GLCD_EREG - define el puerto en la línea E se conecta a
GLCD_EBIT - define el pin en la línea E se conecta a
GLCD_RWREG - define el puerto en el R / W en línea está conectada a
GLCD_RWBIT - define el pin en R / W línea está conectada a
GLCD_CS1REG - define el puerto donde la línea CS1 está conectado a
GLCD_CS1BIT - define el pin donde la línea CS1 está conectado a
GLCD_CS2REG - define el puerto donde la línea está conectada a CS2
GLCD_CS2BIT - define el pin donde la línea CS2 está conectado a

Declaración GLCDINIT debe ser colocado en algún lugar del comienzo de la programa
de base antes de que los gráficos se stetements LCD relacionadas que se utilicen.
LCD gráfica de las declaraciones relacionadas a tomar el control de los registros TRIS
relacionados con alfileres utilizados para la interfase LCD, pero si usted usa pines que
se de configuración como entradas analógicas en el encendido de los dispositivos con
un convertidor D / A y / o El comparador de módulos, usted debe tomar el control
sobre el registro correspondiente (s) (ADCON1, Ansel, CMCON) para fijar pernos
usados como digital I / O.

GLCDCLEAR declaración de voluntad clara toda la pantalla. Se puede utilizar con una
argumento constante opcional en el rango 0-255, que se pondrán en cada la posición
de byte en la pantalla (128x64 muestra gráfica se divide internaly 64x64 en dos
mitades, las dos mitades se dividen en ocho páginas 64x8 horizontal; cada página
tiene su número de abordar en el rango 0-15, página en la parte superior izquierda
Rincón tiene el número 0; página en la esquina inferior izquierda tiene el número 7,
página en la la esquina superior derecha tiene el número 8, página en la esquina
inferior derecha tiene el número 15; Cada página tiene 64 posiciones de byte de
abordarse con números en el rango 0-63; todas las posiciones de byte tiene 8 bits, el
bit superior es LSB y la más baja poco es MSB). Por ejemplo:

GLCDINIT
loop:
GLCDCLEAR 0xAA
WAITMS 1000
GLCDCLEAR 0x55
WAITMS 1000
GOTO loop

GLCDPSET y declaraciones GLCDPRESET se utilizan para encender y apagar uno de


los puntos en la pantalla gráfica. El primer argumento es el coordenada horizontal y
debe ser un tipo de byte de datos constante o variable en el rango de 0-127. El
segundo argumento es la coordenada vertical y es debe ser un tipo de datos byte
variable o constante en el rango de 0-63. El punto en la esquina superior izquierda de
la pantalla es el origen de coordenadas 0,0. Por ejemplo:

DIM I AS BYTE
DIM J AS BYTE
GLCDINIT

www.myspace.com/dahauser
FOR I = 0 TO 127
FOR J = 0 TO 63
GLCDPSET I, J
NEXT J
NEXT I

GLCDCLEAN comando se usa 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 un
byte de datos de tipo variable o constante en el rango de 0-15. El segundo argumento
es la posición de primer byte de la página que será limpiado y debe ser un byte de
datos de tipo variable o constante en el rango de 0-63. El tercer argumento es la
posición de último byte de la página que será limpiado y debe ser un byte de datos de
tipo variable o constante en el rango de 0-63. Si los dos últimos argumentos Se han
omitido toda la página se borrará. Por ejemplo:

DIM I AS BYTE
GLCDINIT
GLCDCLEAR 0xFF
FOR I = 0 TO 15
GLCDCLEAN I
WAITMS 500
NEXT

I Declaración GLCDPOSITION se utiliza para tratar una posición de byte en la


pantalla. Debe ser usado antes de cualquiera de los GLCDWRITE, GLCDIN,
GLCDOUT y GLCDCMDOUT declaraciones. El primer argumento es la dirección de la
página y debe ser un tipo de datos de byte variable o constante en el rango de 0-15. El
segundo argumento es el byte de destino posición en la página y debe ser un tipo de
datos byte variable o constante en la rango 0-63. Si se omite el segundo argumento,
se utiliza en posición cero bytes.

GLCDWRITE comando se usa para escribir texto en la pantalla. Se empieza a escribir


de la posición de byte actual en la pantalla. Debe usarse con cuidado, porque cuando
se alcanza la posición de byte (63) de la página, la escritura continuará a partir de la
posición de byte 0 mantenerse 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 claro. Después de la instrucción
se ejecuta la posición de byte actual será al final del texto escrito. GLCDWRITE
declaración puede tener varios argumentos separados por ','. Cadenas, constantes y
variables byte se puede utilizar como sus argumentos. Constantes y valores de las
variables son interpretadas como códigos ASCII. Si '#' signo se utiliza antes de que el
nombre de una variable (byte o palabra de datos de tipo), su representación decimal
está escrito. Por ejemplo:

DIM I AS BYTE
GLCDINIT
FOR I = 0 TO 15
GLCDPOSITION I, 0
GLCDWRITE "Page: ", #I
WAITMS 250
NEXT I

www.myspace.com/dahauser
GLCDOUT comando se usa para escribir el valor de la variable o constante de bytes
en la posición de byte actual en la pantalla. La posición de byte actual se incrementa
en uno. Declaración de GLCDIN leerá el valor de la posición de byte actual en el
mostrar y poner en la variable de bytes especificado como argumento. GLCDCMDOUT
comando se usa para enviar comandos de bajo nivel a la pantalla LCD gráfica. Su
argumento puede ser una variable constante o byte de tipo de datos. Estos tres
estados se puede utilizar con varios argumentos separados por ','.

● Uso de los módulos de PWM internos

Interior módulos de PWM (con más precisión: los modos PWM de los módulos CCP)
se convierten en la declaración de PWMON utilizando. Esta declaración tiene dos
argumentos. El primer argumento es el número de módulo y debe ser una constante
en el rango de 1-3. El segundo argumento se utiliza para la selección de modo. Interior
módulo PWM se puede utilizar en tres diferentes frecuencias de salida para cada una
de las cuatro resoluciones ciclo de trabajo con el apoyo de la declaración PWMON
(10-bit, 9-bit, 8-bit y de 7-bit). Así, el módulo PWM se puede activar con PWMON
declaración de 12 modos. Esta es la lista de todos los modos de frecuencia de reloj de
4MHz (para las frecuencias de reloj, el valor debe ser ajustado proporcionalmente):

mode 1: 10-bit, 244Hz


mode 2: 10-bit, 977Hz
mode 3: 10-bit, 3906Hz
mode 4: 9-bit, 488Hz
mode 5: 9-bit, 1953Hz
mode 6: 9-bit, 7813Hz
mode 7: 8-bit, 977Hz
mode 8: 8-bit, 3906Hz
mode 9: 8-bit, 15625Hz
mode 10: 7-bit, 1953Hz
mode 11: 7-bit, 7813Hz
mode 12: 7-bit, 31250Hz

El módulo PWM es inicialmente comenzó con 0 ciclo de trabajo, por lo que la salida se
permanecer bajo hasta que el ciclo de trabajo ha cambiado. Módulo PWM se puede
desactivar con Declaració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 declaración de


PWMDUTY. Su primera es el argumento de número de módulo. El segundo
argumento es ciclo de trabajo y puede ser un constante en el rango 0-1023 o byte de
datos o variables de tipo palabra. El usuario debe tener cuidado de usar los rangos de
valores adecuados para todos los modos PWM (0-1023 de 10-bits de resolución, 0-
511 de 9-bits de resolución, 0-255 de 8-bits de resolución y 0-127 de 7-bit de
resolución). He aquí un ejemplo:

DIM duty AS BYTE


PWMON 1, 9
loop:
ADCIN 0, duty
PWMDUTY 1, duty
GOTO loop

www.myspace.com/dahauser
● Interfaz de Radio Control (R / C) servos de

Para las solicitudes por escrito a la interfaz R / C servos hay dos declaraciones
disponibles: SERVOIN y SERVOOUT. R / C servo es controlado por un tren de pulsos
(15-20 pulsos por segundo), cuya longitud definir la posición del brazo del servo. La
longitud de los pulsos es válida en el rango de 1-2ms. Estos dos estados tienen dos
argumentos. El primer argumento de las dos declaraciones es el pin del
microcontrolador donde la señal del servo se recibe o se transmiten. Para SERVOIN
declaración que el pin debe ser previamente preparada como un pin de entrada y para
la declaración de SERVOOUT El PIN debe tener la configuración para la salida. El
segundo argumento de SERVOIN declaración debe ser una variable Byte donde la
duración del pulso se guardarán. Los pulsos se miden en unidades de 10us, por lo que
es posible medir los pulsos en el rango de 0.01-2.55ms. El valor almacenado en la
variable de servos normales debe estar en el rango 100-200. El segundo argumento
de la declaración SERVOOUT debe ser una variable o constante byte que determina
la la duración del impulso generado. Para un correcto funcionamiento del servo de
destino Declaración SERVOOUT debe ser ejecutado 15-20 veces durante un segundo.
Aquí está un ejemplo de la operación inversa servo:

DIM length AS BYTE


TRISB.0 = 1
TRISB.1 = 0
loop:
SERVOIN PORTB.0, length
IF length < 100 THEN length = 100
IF length > 200 THEN length = 200
length = length - 100
length = 100 - length
length = length + 100
SERVOOUT PORTB.1, length
GOTO loop

● Interfaz de Motores paso a paso

Antes de usar el motor de pasos relacionados con las declaraciones, su conexión y


deseada el modo de unidad debe ser configurada usando directivas DEFINE. Hay
ocho disponibles parámetros para definir la conexión de A, B, C y D de bobinas:
STEP_A_REG - define el puerto en el que una bobina se conecta a
STEP_A_BIT - define el pin en una bobina se conecta a
STEP_B_REG - define el puerto en el que la bobina B está conectado a
STEP_B_BIT - define el pin en la bobina B está conectado a
STEP_C_REG - define el puerto en el que la bobina está conectado a C
STEP_C_BIT - define el pin en la bobina está conectado a C
STEP_D_REG - define el puerto donde la bobina D se conecta a
STEP_D_BIT - define el pin en una bobina se conecta a

Bobinas A y C son de hecho parte de una sola bobina con conexión común. Lo mismo
es válido para conexiones de la bobina B y D. También hay STEP_MODE parámetro
utilizado para definir el modo de unidad. Si se establece en 1 (por defecto), el motor
será impulsado por en modo de paso. El valor 2 se debe utilizar para el modo de
medio paso. La afirmación fundamental primero que se debe utilizar es STEPHOLD.
Se configurará utilizados como salidas de pines y también energizar A y B, bobinas

www.myspace.com/dahauser
para fijar el rotor en su posición inicial. Para el rotor se mueve en direcciones hacia la
derecha y la izquierda hay STEPCW y declaraciones STEPCCW disponibles. Su
primer argumento es el número de pasos del rotor que se llevará a cabo y se puede
Byte tipo de datos constante o variable. El segundo argumento se define el tiempo
transcurrido entre dos pasos consecutivos expresó en microsegundos por un byte de
datos de Word o de tipo variable o constante. Si se utiliza STEPCW resultados de la
instrucción en el movimiento del rotor en sentido contrario a continuación, la conexión
la configuración de las bobinas B y D deben ser intercambiados. He aquí dos ejemplos
(el segundo ejemplo, se utiliza retrasos adecuados para la simulación en el simulador):

AllDigital
ADCON1 = 0x0E
Define STEP_A_REG = PORTB
Define STEP_A_BIT = 7
Define STEP_B_REG = PORTB
Define STEP_B_BIT = 6
Define STEP_C_REG = PORTB
Define STEP_C_BIT = 5
Define STEP_D_REG = PORTB
Define STEP_D_BIT = 4
Define STEP_MODE = 2

WaitMs 1000
StepHold
WaitMs 1000

Dim an0 As Word

loop:
Adcin 0, an0
an0 = an0 * 60
an0 = an0 + 2000
StepCW 1, an0
Goto loop

AllDigital
Define STEP_A_REG = PORTB
Define STEP_A_BIT = 7
Define STEP_B_REG = PORTB
Define STEP_B_BIT = 6
Define STEP_C_REG = PORTB
Define STEP_C_BIT = 5
Define STEP_D_REG = PORTB
Define STEP_D_BIT = 4
Define STEP_MODE = 2

WaitUs 300
StepHold
WaitUs 1000

loop:
StepCCW 16, 300
WaitUs 1000

www.myspace.com/dahauser
StepCW 24, 300
WaitUs 1000
Goto loop

● Interfaz 1-WIRE dispositivos

Antes de utilizar 1-WIRE declaraciones relacionadas con, el usuario debe definir el PIN
cuando el dispositivo está conectado a la utilización de las directivas establecen. Los
parámetros disponibles son 1WIRE_REG y 1WIRE_BIT. Por ejemplo:

DEFINE 1WIRE_REG = PORTB


DEFINE 1WIRE_BIT = 0

Secuencia de inicialización se puede realizar por la declaración 1WIREINIT. Puede


haber un argumento opcional (datos de bits variable de tipo) que se se pone a 0 si la
presencia del dispositivo se ha detectado y puesto a 1 si no hay ningún dispositivo en
la línea. Bits individuales (ranuras de tiempo) pueden ser enviados y recibidos desde el
dispositivo utilizando 1WIRESENDBIT y declaraciones 1WIREGETBIT. Ambas
afirmaciones pueden tienen múltiples argumentos - lista separada por comas de las
variables de tipo bit de datos constantes de bits (o para la declaración
1WIRESENDBIT). 1WIRESENDBYTE y declaraciones 1WIREGETBYTE se puede
utilizar para enviar y recibir bytes desde el dispositivo. Ambas afirmaciones pueden
tienen múltiples argumentos - lista separada por comas de los datos de las variables
de tipo Byte constantes Byte (o para la declaración 1WIRESENDBYTE). He aquí un
ejemplo para medir la temperatura utilizando el dispositivo DS18S20:

DIM finish AS BIT


DIM temp AS BYTE
DIM sign AS BYTE
1WIREINIT
1WIRESENDBYTE 0xCC, 0x44
WAITMS 1
loop:
1WIREGETBIT finish
IF finish = 0 THEN GOTO loop
1WIREINIT
1WIRESENDBYTE 0xCC, 0xBE
1WIREGETBYTE temp, sign

Este ejemplo puede ser muy corto, utilizando dos DS18S20 de alto nivel específicas
los enunciados básicos. Declaración DS18S20START iniciará una sola temperatura
conversión. De acuerdo con la hoja de datos del dispositivo de conversión se
completará en en la mayoría de 750ms. Después de ese período el valor medido
puede ser leído por Declaración de DS18S20READT que requiere dos variables de
tipo Byte de datos como argumentos. El primer argumento contendrá el valor de la
temperatura en 0,5 grados centígrados unidades (por ejemplo, el valor de 100
representa la temperatura de 50 grados). El segundo argumento contendrá el valor
0x00 si la temperatura es positivo y 0xFF valor si es negativo. Por ejemplo:

DIM temp AS BYTE


DIM sign AS BYTE

www.myspace.com/dahauser
DS18S20START
WAITMS 1000
DS18S20READT temp, sign

● Las funciones avanzadas

Si la Directiva STARTFROMZERO se utiliza el compilador se iniciará el programa de


cero programa de ubicación de memoria flash (vector de reset) y utilizar el programa
disponible memoria de forma continua. De rutina de interrupción si se usan deben ser
aplicadas por el uso código ensamblador en línea. El compilador también dejará el
control de registro PCLATH para el usuario el supuesto de que todo el código se
coloca en la misma página del programa de la memoria. Esta función avanzada se
puede utilizar cuando el desarrollo de aplicaciones del gestor de arranque, para
ejemplo.

www.myspace.com/dahauser