Sei sulla pagina 1di 21

Extensin por defecto para los archivos de origen bsicos es BAS.

La salida del compilador es de ensamblador de archivos fuente (con la extensin ASM) que puede ser traducido a cdigo binario usando el ensamblador integrado. Editor inteligente marca todas las palabras clave reservadas de color diferente, que simplifica el proceso de depuracin. Los resultados del compilador BASIC ensamblador tiene todas las lneas de comentarios necesarios, que lo hace muy til para fines educativos, tambin. Four data types are supported: - Bit (1-bit, 0 or 1) - Byte (1-byte integers in the range 0 to 255) - Word (2-byte integers in the range 0 to 65,535) - Long (4-byte integers in the range 0 to 4,294,967,295) - optional module Las declaraciones se pueden colocar en cualquier parte del programa. Todas las variables se consideran global. El nmero total de variables es limitado por la memoria del microcontrolador RAM disponible. Las variables se declaran usando la sentencia DIM: DIM DIM DIM DIM A B X Y AS AS AS AS BIT BYTE WORD LONG

Tambin es posible utilizar matrices unidimensionales. Por ejemplo: DIM A(10) AS BYTE Declara un array de 10 variables con ndice de matriz de bytes en el rango [0-9] Declaracin de reserva permite el uso avanzado mediante la reserva de algunos de los lugares de memoria RAM para ser utilizados por las rutinas de ensamblador en cdigo o con MPLAB Depurador en circuito. Por ejemplo: RESERVE 0x70 Byte alto y bajo de una variable de palabra puede ser abordado por. HB y. Extensiones LB. Los bits individuales pueden ser abordadas por .0, .1, ..., .14 y .15 extensiones. Es posible realizar conversiones entre Byte y los tipos de datos de Word utilizando LB y HB extensiones o directamente..: DIM A AS BYTE DIM B AS WORD A = B.HB A = B.LB 'This statement is equivalent to A = B B.HB = A B.LB = A B = A 'This statement will also clear the high byte of B variable Palabra alta (compuesta por bytes 3 y 2) y la palabra baja (compuesta por los bytes 1 y 0) de la variable tiempo puede ser abordado por. HW y extensiones. LW. Byte 0 pueden ser abordadas por. LB y 1 byte por. Extensiones de HB. Por ejemplo: DIM A AS BYTE DIM B AS WORD DIM X AS LONG

A = X.LB B = X.HW Todos los registros de funciones especiales (SFR) estn disponibles como variables Byte en los programas bsicos. Los bits individuales de una variable Byte pueden ser abordadas por las extensiones .0, .1, .2, .3, .4, .5, .6 y .7 o el uso de 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 Estndar formas cortas de acceso a los registros de puerto y los pasadores de chips individuales tambin estn disponibles (RA, RB, RC, RD, RE se puede utilizar como variables Byte; RA0, RA1, RA2,..., RE6, RE7 estn disponibles como variables de bit) RA = 0xFF RB0 = 1 Cualquier variable que se declara como una variable de Byte o Word utilizando instruccin Dim puede ser utilizado como un puntero a la memoria RAM de usuario cuando se utiliza como argumento de la funcin de puntero. El valor contenido en la variable que se utiliza como un puntero debe estar en el rango de 0-511. Aqu est 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 X = X - 1 POINTER(X) = Y Tambin es posible el uso de nombres simblicos (smbolos) en los programas: SYMBOL LED1 = PORTB.0 LED1 = 1 SYMBOL AD_ACTION = ADCON0.GO_DONE Las constantes se pueden utilizar en sistema de numeracin decimal sin marcas especiales, en sistema de numeracin hexadecimal con notacin que conduce 0x (o con H al final) y en el sistema binario con signo% que lleva (o con B al final). Palabras clave True y False tambin estn disponibles para las constantes de tipo de bit. Por ejemplo DIM A AS BIT DIM B AS BYTE

A = TRUE B = 0x55 B = %01010101 Las constantes tambin se pueden asignar a los nombres simblicos que utilizan directiva CONST: DIM A AS WORD CONST PI = 314 A = PI Hay tres estados que se utilizan para la manipulacin de bits - alto, bajo y TOGGLE. Si el argumento de estas afirmaciones es un poco en uno de los registros PORT, el mismo bit en el correspondiente registro TRIS se borra automticamente, estableciendo el pin afectado como un pin de salida. Algunos ejemplos: HIGH PORTB.0 LOW ADCON0.ADON TOGGLE OPTION_REG.INTEDG Todos los microcontroladores PIC que cuentan con capacidades analgicas (convertidores A / D y / o comparadores analgicos) estn configurados en el arranque de utilizar los pines involucrados con estos fines anlogos. Para utilizar los pines como entradas / salidas digitales, deberan ser configurado para uso digital cambiando los valores en algunos de los registros de funciones especiales como se especifica en las fichas tcnicas. Para configurar todos los pines para fines digitales, declaracin ALLDIGITAL se puede utilizar en el inicio del programa bsico. Cinco operaciones aritmticas (+, -, *, /, MOD) estn disponibles para Byte, Word y los tipos de datos largos. El compilador es capaz de compilar todas las posibles expresiones aritmticas complejas. Por ejemplo: DIM DIM DIM A = B = X = X = A AS WORD B AS WORD X AS WORD 123 A * 234 2 (12345 - B * X) / (A + B)

La raz cuadrada de un nmero (0-65535 rango) se puede calcular utilizando la funcin SQR DIM A AS WORD A = 3600 A = SQR(A) Para las variables de tipo de datos Bit siete operaciones lgicas disponibles. Se puede hacer slo una operacin lgica en una sola sentencia. Las operaciones lgicas tambin estn disponibles para las variables Byte y Word. Por 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 DIM B A = A PORTB AS WORD AS WORD OR B = PORTC AND %11110000

Hay dos parmetros de configuracin CONF_WORD y CONF_WORD_2 (no disponible para todos los dispositivos) que se puede ajustar usando DEFINE directiva para anular los valores predeterminados. La frecuencia de reloj del dispositivo de destino puede ser especificado por el parmetro CLOCK_FREQUENCY (el valor se expresa en MHz). Estos parmetros deben ser configurados al inicio del programa bsico. Por ejemplo: DEFINE CONF_WORD = 0x3F72 DEFINE CLOCK_FREQUENCY = 20 Contenido de la memoria EEPROM puede ser definido en los programas bsicos utilizando declaracin EEPROM. Su primer argumento es la direccin del primer byte en la lista de datos. Varios estados EEPROM pueden ser usados para llenar en diferentes reas de la memoria EEPROM, si es necesario. Por ejemplo: EEPROM 0, 0x55 EEPROM 253, 0x01, 0x02, 0x03 La sentencia GOTO usa el nombre de lnea de etiqueta como argumento. Etiquetas de lnea debe ir seguida de dos puntos marca ":". Aqu est un ejemplo DIM A AS WORD A = 0 loop: A = A + 1 GOTO loop Waitms y declaraciones WAITUS puede ser usado para forzar el programa a esperar a que el nmero especificado de milisegundos o microsegundos. Tambin es posible el uso de argumentos variable de tipo Byte o palabra de datos. Estas rutinas utilice el parmetro Frecuencia de reloj que se puede cambiar en el men Opciones. WAITUS rutina tiene un retraso mnimo y el paso que tambin depende del parmetro de frecuencia de reloj. DIM A AS WORD A = 100 WAITMS A WAITUS 50 NOTA: Al escribir programas para dispositivos PIC reales lo ms probables intervalos de retardo de uso que son comparables a 1 segundo 1000 milisegundos. Hay muchos ejemplos de este archivo de ayuda tambin utilizar tal 'en tiempo real' intervalos. Pero, si usted desea simular esos programas hay que ser muy paciente para ver que algo suceda, incluso en los ordenadores muy potentes disponibles en la actualidad. Por declaracin de simulacin 'Waitms 1000' en 4MHz tienes que esperar el simulador para simular 1000000 instrucciones y tomar cantidad considerable de tiempo, incluso si "extremadamente rpido" velocidad de simulacin se ha seleccionado. Por lo tanto, slo con el propsito de la simulacin debe recompilar los programas con intervalos de retardo ajustado, que no debe exceder de 1-10ms. Sin embargo, asegrese de volver a compilar el programa con retrasos originales antes de descargarlo a un dispositivo real.

Cuatro estructuras bsicas estndar 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 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


Despus de IF-THEN en la misma lnea que puede colocarse casi en cualquier otro estado posible y luego ENDIF no se utiliza. No hay lmites para el nmero de instrucciones anidadas de ningn tipo. En las expresiones de prueba de IF-THEN y WHILE es posible utilizar varias condiciones relacin AND OR y mltiples. Condiciones mltiples separados por comas se puede utilizar con las instrucciones CASE, tambin. Funcin de bsqueda puede ser usado para seleccionar uno de la lista de constantes de Byte, basado en el valor en la variable de ndice Byte, que se proporciona como el ltimo argumento separado de la funcin. La constante de primero en la lista tiene 0 ndice de valor. La constante seleccionado se carga en la variable de resultado Byte tipo de datos. Si el valor en la variable de ndice va ms all del nmero de constantes en la lista, la variable de resultado no se ver afectada por la funcin. He aqu un pequeo ejemplo de una pantalla LED de 7 segmentos: DIM DIGIT AS BYTE DIM MASK AS BYTE 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 de la lista (o parte de ellos) son los valores ASCII, entonces ms corto formulario de la lista se pueden crear mediante el uso de argumentos de cadena. Por ejemplo: MASK = LOOKUP("ABCDEFGHIJK"), INDEX SHIFTLEFT y funciones SHIFTRIGHT se puede utilizar para cambiar a nivel de bit representacin de una variable de izquierda y derecha. El primer argumento es variable de entrada y el segundo argumento es el nmero de cambios que se deben 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 goright GOTO goleft goright: WAITMS 250 PORTB = SHIFTRIGHT(PORTB, 1) IF PORTB.0 THEN goleft GOTO goright Los programas estructurados se pueden escribir con llamadas a subrutinas con instruccin GOSUB que usa el nombre de lnea de etiqueta como argumento. Retorno desde una subrutina se realiza mediante la instruccin RETURN. Usuario debe tener cuidado de que la estructura del programa es consistente. Al utilizar subrutinas, la rutina principal que se termin con la declaracin END. Instruccin END se compila 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 bsico, que se puede hacer con la declaracin de HALT Es posible insertar puntos de interrupcin para el simulador directamente en los programas bsicos mediante sentencia break. Se compila como cdigo de operacin 0x0001 reservados y el simulador interpretar este cdigo de operacin como un punto de interrupcin y cambiar la velocidad de simulacin con el Paso a Paso Es posible utilizar los comentarios en programas de cdigo bsicas. Los comentarios deben empezar con el smbolo de comilla simple (') y puede colocarse en cualquier lugar en el programa. Lneas de cdigo fuente en ensamblador se puede colocar en cualquier lugar en el programa fuente bsica y debe comenzar con ASM: prefijo. Por ejemplo: ASM: NOP ASM:LABEL1: MOVLW 0xFF Los nombres simblicos de las variables declaradas se pueden utilizar en las rutinas de ensamblador porque la direccin variable adecuada se asignar a los nombres de directiva EQU:

DIM VARNAME AS BYTE ASM: MOVLW 0xFF ASM: MOVWF VARNAME Soporte de lenguaje estructurado (procedimientos y funciones) - mdulo opcional Los procedimientos pueden ser declarados con instruccin PROC. Pueden contener hasta 5 argumentos (lista separada por comas) y todos los tipos de datos disponibles se puede utilizar para las variables de argumentos. Variables de argumentos se declaran a nivel local, por lo que no es necesario tener nombres nicos en relacin con el resto del programa de usuario bsico, lo que hace muy fcil volver a utilizar una vez que los procedimientos escritos en otros programas bsicos. Los procedimientos se puede salir con la declaracin EXIT. Se debe terminar con la instruccin END PROC y debe ser colocado despus de la instruccin END en el programa. Las llamadas a procedimientos se llevan a cabo con sentencia CALL. La lista de argumentos pasados pueden contener ambas variables y constantes numricas. 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 expuestos por los procedimientos son vlidos para las funciones, tambin. Las funciones pueden ser declaradas con FUNCTION. Pueden contener hasta 5 argumentos y variables de argumentos se declaran a nivel local. Las funciones se pueden salir con la declaracin EXIT y debe terminar con END FUNCTION. El nombre de la funcin se declara como una variable global, por lo que si la funcin es llamada con sentencia CALL, despus de su ejecucin, la variable de funcin contendr el resultado. Forma estndar de llamadas a funciones en instrucciones de asignacin se puede utilizar, tambin. 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 El uso de la memoria interna EEPROM El acceso a la memoria EEPROM de datos se puede programar mediante READ y WRITE declaraciones. El primer argumento es la direccin de un byte en la memoria EEPROM y puede ser una variable o constante Byte. El segundo argumento es que los datos son ledos o escritos (por sentencia READ debe ser una variable Byte). Se sugiere para mantener las interrupciones deshabilitadas durante la ejecucin de la instruccin WRITE.

DIM A AS BYTE DIM B AS BYTE A = 10 READ A, B WRITE 11, B El uso de A / D interno del mdulo convertidor Declaracin ADCIN est disponible como un soporte para interno del convertidor A / D. Su primer argumento es ADC nmero de canal y el segundo argumento es una variable que se utiliza para almacenar el resultado od A / D conversin. Declaracin ADCIN utiliza dos parmetros ADC_CLOCK y ADC_SAMPLEUS que tienen valores predeterminados 3 y 20. Estos valores por defecto se pueden cambiar usando DEFINE Directiva. ADC_CLOCK parmetro determina la eleccin de fuente de reloj ADC (rango permitido es de 0-3 o 0-7 dependiendo del dispositivo que se utiliza). ADC_SAMPLEUS parmetro establece el tiempo deseado ADC adquisicin en microsegundos (0-255). ADCIN afirmacin presupone que el pin correspondiente se configura como una entrada analgica (TRIS, ADCON1 y registro 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 Rutina de interrupcin debe ser colocado como todas las otras subrutinas despus de la instruccin END. Se debe comenzar con ON INTERRUPT y al final con la declaracin RESUME. Si las operaciones aritmticas, arreglos o estados de cuenta se utilizan otros complejos en la rutina de interrupcin, luego SAVE declaracin sistema debe ser colocado inmediatamente despus de instruccin ON INTERRUPT para guardar el contenido de los registros utilizados por el sistema. Activar y desactivar las declaraciones se puede utilizar en el programa principal para controlar bit GIE en INTCON registro. Resume establecer el bit GIE y habilitar las interrupciones nuevos. Por ejemplo:

DIM A AS BYTE 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
Comunicacin serie utilizando hardware interno UART El soporte para el hardware y el software de comunicacin serie est tambin disponible. HSEROPEN, HSEROUT, HSERIN y declaraciones HSERGET se puede utilizar con dispositivos PIC que tienen hardware interno UART. Declaracin HSEROPEN configura el hardware UART. Su nico argumento es velocidad de transmisin y los valores permitidos son: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400 y 57600. Si se omite el argumento UART se crear para 9600 baudios. Si ALLOW_MULTIPLE_HSEROPEN parmetro se establece en 1, usando DEFINE directiva, ser posible usar declaracin HSEROPEN ms de una vez en el programa, por ejemplo, para cambiar la velocidad de transmisin seleccionada. Si el parmetro ALLOW_ALL_BAUDRATES se pone a 1 mediante directiva DEFINE todas las velocidades de transmisin en el rango 100-57600 sern permitidos. Declaracin HSEROUT se utiliza para la transmisin en serie. Declaracin HSEROUT puede tener varios argumentos separados por ','. Usted puede utilizar cadenas, la palabra clave para el carcter LF Avance de lnea CRLF o palabra clave para el retorno de carro - avance de lnea de secuencia, constantes y variables. Si signo '#' se utiliza antes del nombre de una variable, entonces su representacin decimal es enviada al puerto serie. Declaracin HSERIN puede ser usado para cargar una lista de las variables Byte y Word con los valores recibidos en el puerto serie. Esta declaracin ser esperar hasta que el nmero necesario de bytes se recibe en el puerto serie. Declaracin HSERGET tener un argumento que debe ser una variable Byte. Si hay un personaje que esperan en el buffer de recepcin se cargar en la variable, de lo contrario el valor 0 se cargar. Aqu estn algunos ejemplos:

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 aplicacin En todos los dispositivos PIC compatibles que puede utilizar rutinas de software de comunicacin en serie con las declaraciones SEROUT y SERIN. El primer argumento de ambas declaraciones deben ser uno de los pines del microcontrolador, y el segundo argumento es velocidad de transmisin: 300, 600, 1200, 2400, 4800 o 9600. Para SEROUT declaracin luego sigue la lista de argumentos que se enva al puerto serie. Usted puede utilizar cadenas, la palabra clave para el carcter LF Avance de lnea CRLF o palabra clave para el retorno de carro - avance de lnea de secuencia, constantes y variables. Si signo '#' se utiliza antes del nombre de una variable, entonces su representacin decimal es enviada al puerto serie. Declaracin SEROUT utiliza SEROUT_DELAYUS parmetro que se puede ajustar por DEFINIR directiva y tiene un valor predeterminado de 1000 microsegundos. Esto define el intervalo de retardo antes de un carcter se enva realmente al puerto y que se utiliza para aumentar la fiabilidad de la rutina de software SEROUT. Para SERIN declaracin continuacin sigue la lista de variables de Byte y Word para ser cargado con los valores recibidos en el puerto serie. Esta declaracin ser esperar hasta que el nmero necesario de bytes se recibe en el puerto serie. Para la interfaz serial con niveles lgicos invertidos hay declaraciones disponibles SERININV y SEROUTINV. Algunos ejemplos:

DEFINE SEROUT_DELAYUS = 5000 SEROUT PORTC.6, 1200, "Hello world!", CrLf DIM I AS BYTE loop: SERIN PORTC.7, 9600, I SEROUT PORTC.6, 9600, "Number: ", #I, CrLf GOTO loop
Comunicacin I2C con dispositivos externos de I2C

Comunicacin I2C se puede implementar en programas bsicos mediante instrucciones I2CWRITE y I2CREAD. El primer argumento de ambos comandos deben ser uno de los pines del microcontrolador que se conecta a la lnea SDA del dispositivo I2C externa. El segundo argumento de ambos comandos deben ser uno de los pines del microcontrolador que est conectado a la lnea de SCL. El tercer argumento de ambas declaraciones deben ser un valor constante o variable Byte llamada "direccin de esclavo". Su formato se describe en la hoja de datos del dispositivo utilizado. Por ejemplo, para EEPROMs de 24C familia (con entradas de direcciones de dispositivos conectados a tierra) el valor 0xA0 se debe utilizar para el parmetro de direccin de esclavo. Ambas declaraciones tomar el control sobre el bit 0 de la direccin del esclavo durante la comunicacin. El cuarto argumento de ambas declaraciones deben ser un byte o palabra variable (depende del dispositivo utilizado) que contiene la direccin del lugar al que se acceder. Si un valor constante se utiliza para el parmetro de direccin debe estar en rango de valores Byte. El ltimo (quinto) El argumento de la declaracin I2CWRITE es un byte constante o variable que se escribir en la direccin especificada, y para la declaracin I2CREAD debe ser una variable Byte para almacenar el valor que se leer de la direccin especificada. Est permitido el uso de ms de un argumento 'datos'. Para los dispositivos I2C que no admiten discusin datos de direccin que es la forma corta de declaraciones I2C (I2CWRITE1 y I2CREAD1) disponible donde se sigue argumento esclavo direccin con una o ms argumentos de datos directamente. Para algunos dispositivos esclavos I2C es necesario hacer una demora para verificar que el dispositivo est listo para responder a I2CREAD comunicado. Para ello hay I2CREAD_DELAYUS parmetro que se puede ajustar por DEFINIR directiva y tiene un valor predeterminado de 0 microsegundos. Tambin, para los dispositivos ms lentos I2C, podra ser necesario usar ms pulsos de reloj. Eso se puede hacer ajustando el parmetro I2CCLOCK_STRETCH usando DEFINE Directiva. Este parmetro establecer factor de reloj estiramiento. Su valor por defecto es 1. He aqu un ejemplo combinado con el mdulo 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 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 una serie de declaraciones de bajo nivel de comunicacin disponibles I2C, si el usuario necesita para conseguir un mayor control sobre el proceso de comunicacin I2C. Declaracin I2CPREPARE tiene dos argumentos que deben ser uno de los pines del microcontrolador. El primer argumento define la lnea SDA y segundo argumento define la lnea SCL. Esta declaracin ser preparar estas lneas para la comunicacin I2C. Declaracin I2CSTART generar condicin de arranque, y la declaracin de I2CSTOP generar condicin de parada. Un byte puede ser enviada al esclavo I2C using I2CSEND. Despus de la sentencia se ejecuta bit C del registro STATUS se mantenga la copia del estado en la lnea SDA durante el ciclo de reconocer. Hay dos estados que se pueden utilizar para recibir un byte desde el esclavo I2C. I2CRECA o I2CRECEIVEACK va a generar la seal de reconocimiento durante el ciclo de acknowlegde despus del byte es recibido. I2CRECN o I2CRECEIVENACK no va a generar la seal de reconocimiento durante el ciclo acknowlegde despus del byte es recibido. 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 Interfaz LCDs de caracteres Compilador de Basic tambin cuenta con el soporte para los mdulos LCD basado en chip controlador HD44780 o compatible. Antes de utilizar las declaraciones relacionadas con el LCD, el usuario debe configurar la interfaz LCD usando DEFINE directivas. Aqu est la lista de los parmetros disponibles: LCD_BITS - define el nmero de lneas de la interfaz de datos (los valores permitidos son 4 y 8; predeterminado es 4) LCD_DREG - define el puerto en el que las lneas de datos estn conectados (por defecto es PORTB) LCD_DBIT - define la posicin de las lneas de datos para la interfaz de 4-bit (0 o 4; predeterminado es 4), ignorado para interfaz de 8-bit LCD_RSREG - define el puerto al que est conectado a la lnea RS (por defecto es PORTB)

LCD_RSBIT - define el pin donde se conecta a la lnea RS (por defecto es 3) LCD_EREG - define el puerto al que est conectado a la lnea E (por defecto es PORTB) LCD_EBIT - define el pin donde se conecta a la lnea E (por defecto es 2) LCD_RWREG - define el puerto en el que R / W est conectado a la lnea (el valor 0 si no se utiliza, 0 es el valor predeterminado) LCD_RWBIT - define el pin donde R / W est conectado a la lnea (el valor 0 si no se utiliza, 0 es el valor predeterminado) LCD_COMMANDUS - define la demora despus de la declaracin LCDCMDOUT (valor por defecto es 5000) LCD_DATAUS - define la demora despus de la declaracin LCDOUT (valor por defecto es 100) LCD_INITMS - Define la demora para la declaracin LCDINIT (valor por defecto es 100) Los tres ltimos parmetros se deben ajustar a valores bajos cuando se utiliza simulador integrado mdulo LCD. Si R / W lnea est conectada al microcontrolador y LCD_READ_BUSY_FLAG parmetro se establece en 1, usando DEFINE directiva, estos parmetros de retardo ser ignorado por el compilador y el momento correcto se llevar a cabo mediante la lectura del estado de la bandera de ocupado en la pantalla LCD.

Declaracin LCDINIT debe ser colocado en el programa antes de cualquiera de LCDOUT (utilizado para el envo de datos) y LCDCMDOUT (utilizado para el envo de comandos) estados. Su argumento se utiliza para definir el tipo de cursor: 0 = sin cursor (predeterminado), 1 parpadeo =, 2 = subrayado, parpadeo + 3 = subrayado. Declaraciones LCDOUT y LCDCMDOUT puede tener varios argumentos separados por ','. Cuerdas, constantes y variables se pueden utilizar como argumentos de declaracin LCDOUT. Si signo '#' se utiliza antes del nombre de una variable, entonces su representacin decimal es enviado al mdulo LCD. Constantes y variables pueden utilizarse como argumentos de declaracin LCDCMDOUT y las siguientes palabras clave tambin estn disponibles: LcdClear, LcdHome, LcdLine2Home, LcdLeft, LcdRight, LcdShiftLeft, LcdShiftRight, LcdLine1Clear, LcdLine2Clear, LcdLine1Pos () y LcdLine2Pos (). Argumento de LcdLine1Pos () y LcdLine2Pos () puede ser un nmero en el rango de (1-40) o variable de tipo de datos Byte. El valor contenido en esa variable debe estar en el mismo rango. Aqu estn 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 loop: 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 LCD tendr el control sobre los registros TRIS conectado con los pernos usados para LCD de interfaz, pero si usa los pins PORTA o PORTE en los dispositivos con un mdulo convertidor D / A continuacin, usted debe tomar el control de la ADCON1 registrarse para fijar pernos usados como digital I / O.

Usted puede configurar hasta ocho caracteres definidos por el usuario que se utilizar en la pantalla LCD. Esto se puede hacer fcilmente con la declaracin de LCDDEFCHAR. El primer argumento de esta afirmacin es el nmero de caracteres y debe estar en el rango de 0-7. Siguiente 8 forma los argumentos de lnea de patrn 8-char (desde la parte superior a la parte inferior) y debe estar en el rango de 0 a 31 (5 bits de ancho). Estos 8 caracteres usuario se asignan a los cdigos de carbn 0-7 y 8-15 y se pueden visualizar mediante declaracin LCDOUT. Despus de la declaracin LCDDEFCHAR el cursor se situar en la posicin HOME. 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 pantallas LCD con cuatro lneas de caracteres adicionales argumentos simblicos de la declaracin LCDCMDOUT se puede utilizar: LcdLine3Home, LcdLine4Home, LcdLine3Clear, LcdLine4Clear, LcdLine3Pos () y LcdLine4Pos (). Argumento de LcdLine3Pos () y LcdLine4Pos () puede ser un nmero en el rango de (1-40) o variable de tipo de datos Byte. El valor contenido en esa variable debe estar en el mismo rango. Antes de usar estos elementos del lenguaje, los valores correctos determinar el tipo de LCD debe ser asignado a LCD_LINES y parmetros LCD_CHARS usando DEFINE directivas. DEFINE DEFINE DEFINE DEFINE LCD_LINES = 4 LCD_CHARS = 16 LCD_BITS = 8 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 grfica LCD con matriz de puntos 128x64 Interfaz grfica LCD con matriz de puntos 128x64 resolucin controlados por KS0107 o chip compatible es compatible con la siguiente lista de elementos de lenguaje bsicas: GLCDINIT, GLCDCLEAR, GLCDPSET, GLCDPRESET, GLCDPOSITION, GLCDWRITE, GLCDCLEAN, GLCDOUT, GLCDIN, GLCDCMDOUT. Antes de utilizar grficos LCD declaraciones relacionadas, el usuario debe configurar la interfaz grfica con el mdulo LCD con DEFINE directivas. Aqu est la lista de los parmetros disponibles: GLCD_DREG - define el puerto en el que las lneas de datos estn conectados (tiene que ser un completo 8-pines del puerto) GLCD_RSREG - define el puerto al que est conectado a la lnea RS GLCD_RSBIT - define el pin donde se conecta a la lnea RS GLCD_EREG - define el puerto al que est conectado a la lnea E

GLCD_EBIT - define el pin donde se conecta a la lnea E GLCD_RWREG - define el puerto en el que R / W est conectado a la lnea GLCD_RWBIT - define el pin donde R / W est conectado a la lnea GLCD_CS1REG - define el puerto al que est conectado a la lnea CS1 GLCD_CS1BIT - define el pin donde se conecta a la lnea CS1 GLCD_CS2REG - define el puerto al que est conectado a la lnea CS2 GLCD_CS2BIT - define el pin donde se conecta a la lnea CS2 Declaracin GLCDINIT debe ser colocado en algn lugar en el inicio del programa bsico antes de cualquier stetements otros grficos relacionados se utilizan LCD. LCD grfica declaraciones relacionadas tomar el control sobre los registros TRIS conectado con los pernos usados para LCD de interfaz, pero si se utiliza pines que se configuran como entradas analgicas en la puesta en marcha de los dispositivos con un convertidor A / D y / o mdulos comparadores, usted debe tomar el control sobre el registro apropiado (s) (ADCON1, Ansel, CMCON) para establecer pasadores usados como E / S digitales Declaracin GLCDCLEAR se borrar toda la pantalla. Se puede utilizar con un argumento opcional constante en el rango de 0-255 que ser colocado en cada posicin de byte en la pantalla (128x64 pantallas grficas se internaly dividido en dos mitades 64x64; ambas mitades se dividen en ocho 64x8 pginas horizontales; cada pgina tiene su propio nmero de direccionamiento en el rango 0-15, pgina en la esquina superior izquierda tiene el nmero 0; pgina en la esquina inferior izquierda tiene el nmero 7, pgina en la esquina superior derecha tiene el nmero 8, pgina en la esquina inferior derecha tiene el nmero 15 , cada pgina tiene 64 posiciones de bytes tratados con los nmeros en el rango de 0-63, cada posicin byte tiene 8 bits, el bit ms alto es el bit LSB y MSB es ms baja). Por ejemplo: GLCDINIT loop: GLCDCLEAR 0xAA WAITMS 1000 GLCDCLEAR 0x55 WAITMS 1000 GOTO loop Declaraciones GLCDPSET y GLCDPRESET se utilizan para encender y apagar uno de los puntos en la pantalla grfica. El primer argumento es la coordenada horizontal y debe ser un tipo de datos byte variable o constante en el intervalo de 0-127. El segundo argumento es la coordenada vertical y debe ser un tipo de datos byte variable o constante en el intervalo 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 FOR I = 0 TO 127 FOR J = 0 TO 63 GLCDPSET I, J NEXT J NEXT I

Declaracin GLCDCLEAN se utiliza para borrar una seccin de la pgina en la pantalla. Tiene tres argumentos. El primer argumento es la direccin de la pgina y debe ser un tipo de datos byte variable o constante en el rango de 0-15. El segundo argumento es la posicin de byte en la primera pgina que se limpia y debe ser un tipo de datos byte variable o constante en el intervalo de 0-63. El tercer argumento es la posicin ltimo byte en la pgina que se limpiarn y debe ser un tipo de datos byte variable o constante en el rango de 0-63. Si los dos ltimos argumentos se omiten toda la pgina se borrar. Por ejemplo: DIM I AS BYTE GLCDINIT GLCDCLEAR 0xFF FOR I = 0 TO 15 GLCDCLEAN I WAITMS 500 NEXT I Declaracin GLCDPOSITION se utiliza para direccionar una posicin de byte en la pantalla. Se debe utilizar antes de cualquiera de los GLCDWRITE, GLCDIN, GLCDOUT y declaraciones GLCDCMDOUT. El primer argumento es la direccin de la pgina y debe ser un tipo de datos byte variable o constante en el rango de 0-15. El segundo argumento es la posicin del byte de destino en la pgina y debe ser un tipo de datos byte variable o constante en el intervalo de 0-63. Si el segundo argumento se omite, la posicin de byte cero se utiliza. Declaracin GLCDWRITE se utiliza para escribir un texto en la pantalla. Se va a empezar a escribir desde la posicin del byte actual en la pantalla. Debe ser utilizado con cuidado, porque cuando la posicin de byte (63) de la pgina que se alcance, la escritura continuar a partir del byte 0 posicin permanecer en la misma pgina. El ancho de cada carcter escrito es de 5 posiciones de bytes, ms un byte posicin clara. Despus de la instruccin se ejecuta la posicin del byte actual ser al final del texto escrito. Declaracin GLCDWRITE puede tener varios argumentos separados por ','. Cadenas, constantes y variables byte se puede utilizar como sus argumentos. Constantes y valores variables se interpretan como cdigos ASCII. Si signo '#' se utiliza antes del nombre de una variable (byte o palabra tipo de datos), entonces su representacin decimal se escribe. Por ejemplo: DIM I AS BYTE GLCDINIT FOR I = 0 TO 15 GLCDPOSITION I, 0 GLCDWRITE "Page: ", #I WAITMS 250 NEXT I Declaracin GLCDOUT se utiliza para escribir el valor de la variable o constante byte en la posicin de byte actual en la pantalla. La posicin del byte actual se incrementa en uno. Declaracin GLCDIN leer el valor de la posicin de byte actual en la pantalla y lo puso en la variable byte especificado como argumento. Declaracin GLCDCMDOUT se utiliza para enviar comandos de bajo nivel para la pantalla LCD grfica. Su argumento puede ser una variable de tipo de datos constante o byte. Estos tres estados se puede utilizar con varios argumentos, separados por ','. El uso de mdulos internos de PWM Internos mdulos PWM (ms precisamente: los modos PWM de mdulos CCP) estn encendidos using PWMON. Esta declaracin tiene dos argumentos. El primer argumento es el nmero de mdulo y debe ser una constante en el intervalo de 1-3. El segundo argumento se utiliza para la seleccin de modo. Interno PWM mdulo puede ser utilizado en tres frecuencias de salida diferentes para cada uno de cuatro resoluciones de ciclo de trabajo respaldado por la

declaracin PWMON (10-bit, 9-bit, 8-bit y 7 bits-). Por lo tanto, el mdulo PWM se puede activar con la declaracin PWMON en 12 modalidades. Aqu est la lista de todos los modos de frecuencia de reloj de 4 MHz (para frecuencias de reloj, los valores deben ser ajustados proporcionalmente): mode mode mode mode mode mode mode mode mode mode mode mode 1: 10-bit, 244Hz 2: 10-bit, 977Hz 3: 10-bit, 3906Hz 4: 9-bit, 488Hz 5: 9-bit, 1953Hz 6: 9-bit, 7813Hz 7: 8-bit, 977Hz 8: 8-bit, 3906Hz 9: 8-bit, 15625Hz 10: 7-bit, 1953Hz 11: 7-bit, 7813Hz 12: 7-bit, 31250Hz

El mdulo PWM est inicialmente comenz con ciclo de trabajo 0, por lo que la salida permanecer baja hasta que el ciclo de trabajo se cambia. Mdulo PWM se puede apagar con la declaracin PWMOFF. Tiene un solo argumento nmero del mdulo.

El ciclo de trabajo de la seal PWM puede ser cambiado con la declaracin de PWMDUTY. Su primer argumento es el nmero de mdulo. El segundo argumento es el ciclo de trabajo y puede ser una constante en el rango 0-1023 o byte o palabra variable de tipo de datos. El usuario debe tener cuidado de usar los rangos de valores adecuados para todos los modos PWM (0-1023 de 10-bits de resolucin, 0-511 para la resolucin de 9-bit, 0-255 para la resolucin de 8-bits y 0127 para la resolucin de 7-bit ). He aqu un ejemplo: DIM duty AS BYTE PWMON 1, 9 loop: ADCIN 0, duty PWMDUTY 1, duty GOTO loop La interconexin Radio Control (R / C) servos Para escribir aplicaciones para la interfaz R / C servos hay dos estados disponibles: SERVOIN y SERVOOUT. R / C servo es controlado por un tren de pulsos (15-20 impulsos por segundo), cuya longitud de definir la posicin del brazo de servo. La longitud vlida de impulsos est en el rango de 1-2ms. Estas dos afirmaciones tienen dos argumentos. El primer argumento de los dos estados es el pin del microcontrolador donde se recibe la seal de servo o transmitida. Por declaracin SERVOIN que pin debe ser configurado como un pin de entrada y de declaracin SERVOOUT el pasador debe estar configurado para la salida. El segundo argumento de declaracin SERVOIN debe ser una variable Byte donde la longitud del impulso guardado. Los pulsos se mide 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 debera estar en el rango de 100-200. El segundo argumento de la declaracin SERVOOUT debe ser una variable Byte o una constante que determina la longitud del impulso generado. Para un funcionamiento correcto de la definicin del objetivo SERVOOUT servo debe ser ejecutado 15-20 veces durante un segundo. Aqu est un ejemplo de la operacin 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 dispositivos 1-Wire Antes de la utilizacin de 1-Wire correspondientes estados, el usuario debe definir el pasador que est conectado el dispositivo para usar DEFINE directivas. Los parmetros disponibles son 1WIRE_REG y 1WIRE_BIT. Por ejemplo: DEFINE 1WIRE_REG = PORTB DEFINE 1WIRE_BIT = 0 Secuencia de inicializacin se puede realizar por la declaracin de 1WIREINIT. Puede tener un argumento opcional (variable bit Tipo de datos) que se establece en 0 si la presencia del dispositivo ha sido detectado y puesto a 1 si no hay ningn dispositivo en la lnea. Los bits individuales (intervalos de tiempo) pueden ser enviados y recibidos desde el dispositivo mediante declaraciones 1WIRESENDBIT y 1WIREGETBIT. Ambas afirmaciones pueden tener mltiples argumentos - lista separada por comas de variables de tipo Bit de datos (o las constantes de bits para la declaracin 1WIRESENDBIT). 1WIRESENDBYTE y estados 1WIREGETBYTE se puede utilizar para enviar y recibir bytes desde el dispositivo. Ambas afirmaciones pueden tener mltiples argumentos - lista separada por comas de variables de tipo Byte de datos (o las constantes de bytes de declaracin 1WIRESENDBYTE). He aqu un ejemplo para medir la temperatura usando DS18S20 dispositivo: 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 declaraciones especficas de nivel bsico de altura. Declaracin DS18S20START iniciar una conversin de temperatura individual. De acuerdo con la hoja de datos del dispositivo de la conversin se complet en 750 ms como mximo. Despus de este perodo, el valor medido puede ser ledo por declaracin DS18S20READT que requiere dos variables byte de tipo de datos como argumentos. El primer

argumento contendr el valor de la temperatura en grados centgrados 0,5 unidades (por ejemplo, el valor 100 representa la temperatura de 50 grados). El segundo argumento contendr el valor 0x00 si la temperatura es de valor positivo y 0xFF si es negativo. Por ejemplo: DIM temp AS BYTE DIM sign AS BYTE DS18S20START WAITMS 1000 DS18S20READT temp, sign Las funciones avanzadas Si directiva STARTFROMZERO se utiliza el compilador iniciar el programa desde cero de la memoria flash de programa (vector reset) y el uso de la memoria de programa disponible continuamente. Rutina de interrupcin si se usan deben ser implementadas con cdigo ensamblador en lnea. El compilador tambin dejar control sobre PCLATH registro para el usuario suponiendo que todo el cdigo se coloca en la pgina de la memoria del programa mismo. Esta funcin avanzada puede ser utilizada en el desarrollo de aplicaciones del gestor de arranque, por ejemplo.

Potrebbero piacerti anche