PROTON COMPI COMPI LER
Configuración Conf iguración de Puerto A de P ICS desde desde P rotón Antes de realizar cualquier proyecto, siempre lea la hoja de datos para el dispositivo específico que se utiliza. Dado que algunos dispositivos tienen características que pueden interferir con las operaciones de los pines. El PIC16C62X y los dispositivos 16F62x son ejemplos de ello. Estos PIC tienen comparadores analógicos en PORTA, los cuales estas configurados configurados en modo analógico. Para cambiar los los pines a digital, basta con añadir la siguiente línea cerca de la parte frontal de su programa BASIC, antes de acceder a cualquier pin del puerto A: CMCON = 7 Cualquier PIC con entradas analógicas, como la PIC16C7xx, PIC16F87x y dispositivos de la serie PIC12C67x, están habilitados en modo analógico. Si tiene la intención de utilizarlos como tipos digitales debe establecer los pines en modo digital mediante la siguiente línea de código: ADCON1 = 7 Para los dispositivos de 18Fxx20, o cualquier PIC que contiene más de 8 canales de ADC, el registro ADCON1 tendrá que ser fijado a 15: ADCON1 = 15 Alternativamente, puede utilizar un un comando especial que que establece todos los pines en el modo digital: ALL_DIGITAL = TRUE Se trata de fijar fijar pines analógicos a formato digital. Sin Sin embargo, no puede funcionar funcionar en algunos dispositivos, y la hoja de datos debe estar referenciada con el fin de configurar los puertos. Otro ejemplo de los problemas potenciales es que pin -4 de PORTA (PORTA.4) muestra un comportamiento inusual cuando se utiliza como una salida. Esto es porque el pin tiene una salida de drenaje abierto en lugar de la etapa bipolar como de costumbre en el resto de los pines de salida, lo significa que puede establecerse en 0 lógico , cuando es configurado en un 1 lógico. Para poner a funcionar este pin como es de esperar, agregue una resistencia pull-up entre el pin y 5 voltios. Una resistencia de valor típico puede ser de entre 1K y 33K, dependiendo del dispositivo que está excitando. Si el pin se utiliza como salida, se comporta igual que cualquier otro.
Algunos PIC, de la gama PIC16F87x, permite programación de bajo voltaje. Esta función se hace habilitando uno de los pines del PORTB (PORTB.3) el cual puede actuar de forma errática, si no se conecta a tierra. En un uso normal, es mejor asegurarse de que la programación de bajo voltaje está desactivada en el momento en que el PIC se está programado. Por defecto, el fusible de programación de bajo voltaje está desactivado, sin embargo, si se utiliza la directiva CONFIG, entonces sin darse cuenta puede ser omitido. Si usted necesita un PIN para habilitarlo como una salida antes de usarlo, o usar un comando en BASIC que lo hace por usted, siempre lea las hojas de datos del PIC a utilizar para familiarizarse con esta parte en particular. El nombre de los pines del puerto en los dispositivos de 8 pines como el PIC12C50X, PIC12C67x, 12CE67x y 12F675 es GPIO. El nombre para el registro TRIS es TRISIO: GPIO.0 = 1
' Seleccione GPIO.0 como entrada
TRISIO = %101010
' Habilitar entradas y salidas
Sin embargo, estos también son mapeados como PORTB, por tanto, cualquier referencia a PORTB en estos dispositivos permitirá acceder al pin correspondiente. Algunos dispositivos tienen resistencias internas en pull up PORTB, o GPIO. Estas pueden ser activadas o desactivadas mediante la emisión de la orden PORTB_PULLUPS: PORTB_PULLUPS = ON ' Habilitar resistores pull up del PORTB o PORTB_PULLUPS = OFF ' deshabilitar resistores pull up del PORTB
Operadores Matemáticos En P rotón
Protón Compiler realiza todas las operaciones matemáticas en orden jerárquico. Lo que significa que no hay prioridad en los operadores. Por ejemplo, multiplicación y división se realizan antes de suma y resta. Para asegurar que las operaciones se llevan a cabo se usan paréntesis para agrupar las operaciones:
A = ((B - C) * (D + E)) / F
Todas las operaciones matemáticas son con o sin signo en función del tipo de variable utilizada, y se realiza con 8, 16, o enteros de 32 bits o 32-bit de punto flotante de precisión, de nuevo, en función de los tipos de variables y valores constantes en la expresión. Los operadores soportados son:
Addition '+' Subtraction '-' Multiply '*' Multiply HIGH '**' Multiply MIDDLE '*/' Divide '/' Modulus '//' Bitwise AND '&' Bitwise OR '|' Bitwise XOR '^' Bitwise SHIFT LEFT '<<' Bitwise SHIFT RIGHT '>>' Complement '~' ABS ACOS ASIN ATAN COS DCD DIG EXP LOG LOG10 MAX MIN NCD POW REV SIN SQR TAN DIV32
Añade las variables y / o constantes. Resta las variables y / o constantes. Multiplica las variables y / o constantes. Devuelve el alto de 16 bits de los 16-bits se multiplican resultado. Devuelve la media de 16 bits de los 16-bits se multiplican resultado. Divide las variables y / o constantes. Devuelve el resto de la izquierda después de dividir un valor por otro. Retorna el AND bit a bit de los dos valores. Retorna la OR bit a bit de dos valores. Retorna el XOR bit a bit de dos valores. Cambio de bits de un valor a la izquierda de un número determinado. Cambios de los bits de un valor correcto de un número determinado de plazas. Invierte los bits en una variable. Devuelve el valor absoluto de un número. Devuelve el arco coseno de un valor en radianes. Devuelve el arco seno de un valor en radianes. Devuelve el arco tangente de un valor en radianes. Devuelve el coseno de un valor en radianes. 2 n-decodificador de potencia de un valor de cuatro bits. Devuelve el dígito decimal especificado de un valor positivo. Deducir de la función exponencial de un valor. Devuelve el logaritmo natural de un valor. Devuelve el logaritmo de un valor. Devuelve el máximo de dos números. Devuelve el mínimo de dos números. Codificador de prioridad de un valor de 16-bits. Calcula una variable a la potencia de la variable o valor. Invierte el orden de los más bajos bits en un valor. Devuelve el seno de un valor en radianes. Devuelve la raíz cuadrada de un valor. Devuelve la tangente de un valor en radianes. 15-bits x 31 bits brecha. (Por compatibilidad Melabs solamente)
Operadores de Lógica Booleana El if...then...else...endif, while...wend, y repeat...until son compatibles con los operadores lógicos NOT, AND, OR y XOR. El operador NOT invierte el resultado de una condición, Los siguientes dos condiciones IF-THEN son equivalentes: I F VAR1 <> 100 THEN No es Igual IF NOT VAR1 = 100 THEN
' Ir a No es Igual si VAR1 no es 100. ' Ir a No es Igual si VAR1 no es 100.Goto
Los operadores AND, OR, XOR pueden utilizarse para producir un resultado falso o verdadero. AND y OR funcionan de la misma forma como lo hacen en el habla
cotidiana. El siguiente ejemplo muestre la función AND se puede sustituir por las funciones OR Y XOR:
DI M VAR1 AS BYTE DI M VAR2 AS BYTE CL S VAR1 = 5 VAR2 = 9 I F VAR1 = 5 AND VAR2 = 10 THEN Resultado STOP Resultado: P R I N T "RESULTADO VERDADERO" STOP La condición de "VAR1 = 5 y VAR2 = 10" no es cierta. Aunque VAR1 es de 5, VAR2 no es 10. AND funciona cuando ambas condiciones de la declaración sean verdaderas. OR también trabaja en una manera similar, si una, la otra o ambas condiciones se cumplen, entonces la afirmación es verdadera. XOR (abreviatura de o-exclusivo): Si una condición o la otra (pero no ambos) es verdadera, entonces la afirmación es verdadera. Cada compilador tiene sus reglas peculiares, y PROTON no es una excepción. Una de sus peculiaridades significativa es que los paréntesis no se admite en una condición booleana, o incluso con ninguno de los IF-THEN-ELSE-ENDIF, WHILE-WEND, y REPEAT-UNTIL. El Paréntesis en una expresión de una condición se permite sin embargo. Así, por ejemplo, la expresión: I F (VAR1 + 3) = 10 THEN hacer algo.
Está permitido.
PERO: I F ((VAR1 + 3) = 10) THEN hacer algo. No está permitido. Los operadores booleanos tienen una preferencia, en una condición. El operando AND tiene la mayor prioridad, que la OR y, la XOR. Esto significa que una condición, tal como: I F VAR1 = 2 AND VAR2 = 3 OR VAR3 = 4 THEN resultado Comparará VAR1 y VAR2 para ver si la condición AND es cierta. A continuación, veremos si la condición OR es verdadera, basada en el resultado de la condición AND. PROTON se basa principalmente en la parte THEN. Por lo tanto, si la parte THEN de un estado se queda fuera de la lista de código, un error de sintaxis se producirá.
Interrupciones de software en BASIC Aunque el método más eficiente de utilizar una interrupción es en ensamblador, las interrupciones de hardware y BASIC son viables. La manera más sencilla de escribir en BASIC un manejador de interrupciones es con la declaración ON INTERRUPT. Esta no es la misma que la declaración ON_INTERRUPT original del compilador, que inicia una interrupción de hardware. ON INTERRUPT (dos palabras separadas en la interrupción...). Cuando se utiliza ON INTERRUPT, el compilador simplemente habilita la interrupción que ha ocurrido y de inmediato se remonta a lo que estaba haciendo antes de la interrupción. A diferencia de una interrupción de hardware, el código no salta inmediatamente al controlador de interrupciones. Y puesto que los comandos del compilador no son re-entrante, podría haber un retraso considerable antes de la interrupción que se maneja. Por ejemplo, si el programa ha comenzado a ejecutar un comando DelayMS en 2000 se produce una interrupción, el compilador de abanderamiento de la interrupción continua con la demora. Podría ser de hasta 2 segundos después antes de que el controlador de interrupción se ejecute. Si la interrupción ocurre regularmente se arruinará la ejecución del programa. Por ejemplo, el multiplexado de siete segmentos. Para minimizar el problema anterior, utilice sólo las declaraciones que no tienen tiempo para ejecutar. Por ejemplo, en lugar de DelayMS 2000, el uso DelayMS 1 en un for...next, o repeat...until... hasta el bucle, permitirá al compilador completar cada comando más rápidamente y manejar cualquier interrupción en espera: FOR VAR1 = 0 TO 199: DELAYMS 1: NEXT ' Retardo para 200ms Si el procesamiento de interrupciones debe producirse con más regularidad, entonces no hay más remedio que utilizar una interrupción de hardware, con todas sus peculiaridades. Exactamente lo que sucede cuando se utiliza ON INTERRUPT es lo siguiente: Una breve interrupción de controlador se coloca en la posición 4 del PIC. Este controlador de interrupciones es simplemente un retorno. Lo que hace es enviar que el programa se devuelta a lo que estaba haciendo antes de que se produjo la interrupción. No requiere ningún ahorro contexto del procesador. Lo que no hace es volver a habilitar las interrupciones como sucede cuando se utiliza una instrucción RETFIEV. Una llamada a una subrutina corta se coloca antes de cada comando en el programa BASIC, una vez que se encuentre una declaración en ON INTERRUPT. Esto comprueba el estado de los bits de interrupción (GIE). Si está desactivado, está en espera de una interrupción.
Si todavía está configurado, el programa continúa con el siguiente enunciado BASIC , después de lo cual, el bit GIE se vuelve a comprobar, y así sucesivamente.
Retorno de interrupción Cuando la instrucción RESUME se encuentra al final del controlador de interrupciones, se establece el bit GIE para volver a habilitar las interrupciones y regresa a donde antes se produjo la interrupción. DISABLE detiene el compilador de la inserción de la llamada a la interrupción corrector antes de cada comando. Esto permite que las secciones de código a ejecutar sin la posibilidad de ser interrumpido. ENABLE permite la inserción para continuar. Un DISABLE debe ser colocado antes del controlador de interrupciones para que no se reinicie cada vez que el bit GIE está Habilitado. Si se desea desactivar ON INTERRUPT por alguna razón, después de que se encuentre en la interrupción, no se debe apagar el bit GIE. La desactivación de este bit informa al compilador de una interrupción que ha pasado y se ejecutará el controlador de interrupciones para siempre. Utilizar en su lugar: INTCON = $80 Esto desactiva todas las interrupciones individuales, sino que deja el conjunto de interrupción Global deshabilitado. Una nota final sobre las interrupciones en BASIC es si el programa utiliza la estructura de mando: Fin: GOTO Fin Usted debe recordar que el indicador de interrupción se comprueba antes de cada instrucción. Inmediatamente salta a la etiqueta Fin sin interrupción de verificación. Otros comandos deben ser colocados en el circuito de la interrupción de verificación a suceder: Fin: DELAYMS 1 GOTO Fin
Activación y desactivación de una interrupción Permitir el procesamiento de interrupciones que fue desactivado previamente siguiendo estas instrucciones. Desactivar y activar las banderas que el compilador utiliza internamente. DEVICE 16F877A OPTION_REG = %00000111
INTCON = %00100000 SYMBOL LED = PORTD.0 ON I NTERRUPT GOTO Habilitar
' Habilitar interrupciones de software
Fin: DELAYMS 1 GOTO Fin DISABLE Habilitar: TOGGLE LED RESUME ENABLE
' Deshabilitar las interrupciones
' Habilitar LED con la Interrupción ' Volver al programa principal programa ' Habilitar las interrupciones