Está en la página 1de 7

 

PROTON COMPILER

Configuración de Puerto A de PICS desde Protó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 en modo analógico. Para cambiar 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 comando especial que establece todos los pines en
el modo digital:

ALL_DIGITAL = TRUE

Se trata de fijar pines analógicos a formato digital. Sin embargo, no puede 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 Protó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 '+' Añade las variables y / o constantes.


Subtraction '-' Resta las variables y / o constantes.
Multiply '*' Multiplica las variables y / o constantes.
Multiply HIGH '**' Devuelve el alto de 16 bits de los 16-bits se multiplican resultado.
Multiply MIDDLE '*/' Devuelve la media de 16 bits de los 16-bits se multiplican resultado.
Divide '/' Divide las variables y / o constantes.
Modulus '//' Devuelve el resto de la izquierda después de dividir un valor por
Bitwise AND '&' otro.
Bitwise OR '|' Retorna el AND bit a bit de los dos valores.
Bitwise XOR '^' Retorna la OR bit a bit de dos valores.
Bitwise SHIFT LEFT '<<' Retorna el XOR bit a bit de dos valores.
Bitwise SHIFT RIGHT 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.
Complement '~' Invierte los bits en una variable.
ABS Devuelve el valor absoluto de un número.
ACOS Devuelve el arco coseno de un valor en radianes.
ASIN Devuelve el arco seno de un valor en radianes.
ATAN Devuelve el arco tangente de un valor en radianes.
COS Devuelve el coseno de un valor en radianes.
DCD 2 n-decodificador de potencia de un valor de cuatro bits.
DIG Devuelve el dígito decimal especificado de un valor positivo.
EXP Deducir de la función exponencial de un valor.
LOG Devuelve el logaritmo natural de un valor.
LOG10 Devuelve el logaritmo de un valor.
MAX Devuelve el máximo de dos números.
MIN Devuelve el mínimo de dos números.
NCD Codificador de prioridad de un valor de 16-bits.
POW Calcula una variable a la potencia de la variable o valor.
REV Invierte el orden de los más bajos bits en un valor.
SIN Devuelve el seno de un valor en radianes.
SQR Devuelve la raíz cuadrada de un valor.
TAN Devuelve la tangente de un valor en radianes.
DIV32 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:

IF VAR1 <> 100 THEN No es Igual ' Ir a No es Igual si VAR1 no es 100.


IF NOT VAR1 = 100 THEN ' 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:

DIM VAR1 AS BYTE


DIM VAR2 AS BYTE

CLS
VAR1 = 5
VAR2 = 9
IF VAR1 = 5 AND VAR2 = 10 THEN Resultado
STOP
Resultado:
PRINT "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:

IF (VAR1 + 3) = 10 THEN hacer algo. Está permitido.

PERO:

IF ((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:

IF 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 INTERRUPT GOTO Habilitar ' Habilitar interrupciones de software

Fin:
DELAYMS 1
GOTO Fin

DISABLE ' Deshabilitar las interrupciones

Habilitar:
TOGGLE LED ' Habilitar LED con la Interrupción
RESUME ' Volver al programa principal programa
ENABLE ' Habilitar las interrupciones

También podría gustarte