Download Clase #10

Document related concepts
no text concepts found
Transcript
Universidad Nacional de Ingeniería
Arquitectura de Maquinas I
Unidad III: Introduccion a los
Microcontroladores PIC MICROCHIP
CCS un lenguaje de Alto nivel para PIC.
Compilador C de CCS
Este compilador ha sido desarrollado especificamente para
Microcontroladores PIC, obteniendo la maxima optimizacion del
compilador para estos dispositivos.
Dispone de una amplia librería de funciones predefinidas, instrucciones
y drivers para dispositivos como LCDs, convertidores AD, relojes en
tiempo real, EEPROM, serie, etc.
Los programas son editados y compilados a instrucciones maquina en
el entorno grafico de una PC para despues ser cargado a un
microcontrolador mediante un programador.
Arq. de Computadora I
Ing. Carlos Ortega H.
2
Estructura de un Programa
Directivas de Preprocesado: Controlan la conversion del
Programa a codigo maquina por parte del Compilador.
Programas o Funciones: Conjunto de instrucciones. Pueden
haber uno o varios, lo que identifica al principal es la inclusion
de la llamada main()
Instrucciones: Indican como deben comportarse el PIC en todo
momento.
Comentarios: Descripcion detallada de lo que siginifica cada
linea del programa.
Arq. de Computadora I
Ing. Carlos Ortega H.
3
Tipos de Datos
Tipo
Tamaño
Rango
Descripcion
Int1 Short
1 bit
0a1
Entero de 1
bit
Decimal
123
Constantes
Int8
8 bit
0 a 255
Entero
Octal (o)
0123
Int16
16 bit
0a
65535
Entero de 16
bit
Hexadecimal
0x123
Int32
32 bit
0a
429496
7295
Entero de 32
bit
Binario
x
Caracter
x
Caracter Social
'\010'
Caracter
Hexademimal
'\f xA5'
Float
Coma
Flotante
Char
8 bit
0-255
Caracter
Void
------------
----------
Sin Valor
Signed
Intxxx
32 bit
-231 - -231
Entero con
signo
Arq. de Computadora I
Ing. Carlos Ortega H.
4
Operadores
Asignación
Arq. de Computadora I
Aritméticos
Ing. Carlos Ortega H.
5
Operadores
Relacionales
Lógicos
Incremento y Decremento
Declaraciones de Control
Las declaraciones son usadas para controlar el proceso de ejecucion del programa. Las que
admite CCS son:
Ife – Else
Sintaxis: if (expresion)
sentencia_1;
Else
Sentencia_2;
While
Do while
For
Switch Case
Return
Break, Continue y GOTO
Directivas
Las Directivas de pre-procesado comienzan con el simbolo # y con tinuan con un
comando especifico.
#INCLUDE “filename” permite incluir fichero en el programa.
#DEVICE chip, permite definir el PIC con el que se realizaara la compilacion.
# FUSES options, la cual permite definir la palabra de configuracion para
programar un PIC.
#USE DELAY (clock =)speed)
#ASM y ENDASM, permiten utilizar codigos ensamblador. Se utilizan al inicio y al
final del bloque ensamblador.
#BYTE Identificador = X
El identificador referenciará un objeto en la posición de memoria x, donde x
puede ser una constante u otro identificador.
Directivas
#USE FAST_IO (puerto)
Esta directiva afecta al código que el compilador generará para las instrucciones de entrada y
salida. Este método rápido de hacer I/O ocasiona que el compilador realice I/O sin programar el
registro de dirección. El puerto puede ser A-G.
Ejemplo:
#use fast_io(A)
#USE STANDARD_IO (puerto)
Esta directiva afecta al código que el compilador genera para las instrucciones de entrada y
salida. El método standar de hacer I/O causará que el compilador genere código para hacer que
un pin de I/O sea entrada o salida cada vez que se utiliza. En los procesadores de la serie 5X
esto necesita un byte de RAM para cada puerto establecido como I/O estandar.
Ejemplo:
#use standard_io(A)
Tipos de Archivos Generados
.PJT: Fichero de proyecto; contiene toda la informacion relacionada con el
proyecto.
.LST: Muestra un listado en el código C y el código ensamblador asociado para
cada línea de código
.SYM: Muestra las posiciones y valores de los registros y las variables del
programa.
.STA: Muestra una estadística de la utilización de la RAM, RON y la PILA.
.TRE: muestra un árbol del programa en PCW y PCWH
.HEX: Fichero Standar para la programación del PIC.
.COF: Fichero binario que incluye el código maquina y la información para la
depuracion correspondiente.
Algunas Funciones de CCS
Funciones
CCS posee una serie de funciones predefinidas para acceder y utilizar el PIC y
sus periféricos.
INPUT(pin)
Devuelve el estado '0' o '1' de la patilla indicada en pin. El método de acceso de
I/O depende de la última directiva #USE *_IO utilizada. El valor de retorno es
un entero corto.
Ejemplo:
while ( !input(PIN_B1) );
Algunas Funciones de CCS
OUTPUT_BIT(pin, value)
Esta función saca el bit dado en value(0 o 1) por la patilla de I/O especificada en pin. El
modo de establecer la dirección del registro, está determinada por la última directiva
#USE *_IO.
Ejemplo:
output_bit( PIN_B0, 0);
// es lo mismo que output_low(pin_B0);
output_bit( PIN_B0,input( PIN_B1 ) ); // pone B0 igual que B1
output_bit( PIN_B0, shift_left(&data, 1, input(PIN_B1)));
// saca por B0 el MSB de 'data' y al mismo tiempo
// desplaza el nivel en B1 al LSB de data.
OUTPUT_HIGH(pin)
Pone a 'uno' el pin indicado. El método de acceso de I/O depende de la última directiva
#USE *_IO utilizada.
Ejemplo:
output_high(PIN_A0);
Algunas Funciones de CCS
OUTPUT_LOW(pin)
Pone a 'cero' el pin indicado. El método de acceso de I/O depende de la última directiva
#USE *_IO.
Ejemplo:
output_low(PIN_A0);
PORT_B_PULLUPS(flag)
Esta función activa/desactiva las resistencias pullups en las entradas del puerto B. Flag
puede ser TRUE (activa) o FALSE (desactiva).
Ejemplo:
port_b_pullups(FALSE);
SET_TRIS_X(value)
Esto debe usarse con FAST_IO() y cuando se accede a los puertos de I/O como si
fueran memoria, igual que cuando se utiliza una directiva #BYTE. Cada bit de value
representa una patilla. Un '1' indica que la patilla es de entrada y un '0' que es de
salida.
Ejemplo:
SET_TRIS_B( 0x0F );
DELAY_CYCLES(count)
Esta función realiza retardos según el número de ciclos de instrucción
especificado en count; los valores posibles van desde 1 a 255. Un ciclo de
instrucción es igual a cuatro periodos de reloj.
Ejemplo:
delay_cycles( 3 );
DELAY_MS(time)
Esta función realiza retardos del valor especificado en time. Dicho valor de tiempo es
en milisegundos y el rango es 0-65535.
Es preciso utilizar la directiva #use delay(clock=frecuencia) antes de la llamada a esta
función, para que el compilador sepa la frecuencia de reloj.
Ejemplos:
#use delay (clock=4000000) // reloj de 4MHz
delay_ms( 2 );
// retardo de 2ms
FUNCIONES DE CONTROL DEL PROCESADOR
DISABLE_INTERRUPTS(level)
Esta función desactiva la interrupción del nivel dado en level. El nivel GLOBAL prohíbe
todas las interrupciones, aunque estén habilitadas o permitidas. Los niveles de
interrupción son:
o GLOBAL o INT_AD o INT_COMP
o INT_EXT o INT_EEPROM o INT_TIMER1
Ejemplo:
disable_interrupts(GLOBAL); /* prohíbe todas las interrupciones */
SLEEP()
Esta función pone al micro en un estado de REPOSO.
CONTADORES / TEMPORIZADORES
SETUP_TIMER_1(mode)
Esta función inicializa el timer1. Los valores de mode deben ordenarse juntos, tal como
se muestra en el ejemplo. El valor del timer puede leerse y puede escribirse utilizando
GET_TIMER1() y SET_TIMER1().
Los valores de mode son:
o T1_DISABLED o T1_EXTERNAL_SYNC o T1_DIV_BY_2 o T1_CLK_OUT o T1_DIV_BY_4
o T1_INTERNAL o T1_EXTERNAL o T1_DIV_BY_1 o T1_DIV_BY_8
Ejemplos:
setup_timer_1 ( T1_DISABLED );
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
SET_RTCC(value)
SET_TIMERX(value)
Estas funciones activan el timer o temporizador al valor especificado. RTCC y Timer0
son el mismo. Timer1 es de 16 bits y los otros son de 8 bits.
Ejemplo:
if ( get_rtcc()==25 ) set_rtcc(0);
FUNCIONES DE ENTRADA A/D
SETUP_ADC_PORTS(value)
Esta función configura los pines del ADC para que sean analógicos, digitales o alguna
combinación de ambos. Las combinaciones permitidas varían, dependiendo del chip.
Las constantes usadas también son diferentes para cada chip. Las constantes ALL_ANALOG y
NO_ANALOGS son válidas para todos los chips.
Algunos otros ejemplos de constantes son:
RA0_RA1_RA3_ANALOG
Esto hace que los pines A0, A1 y A3 sean analógicos y los restantes sean digitales.
Los +5v se usan como referencia
RA0_RA1_ANALOG_RA3_REF
Las patillas A0 y A1 son analógicas; la patilla RA3 se usa como voltaje de referencia y
todas las demás patillas son digitales.
Ejemplo:
Setup_adc_ports( ALL_ANALOG );
FUNCIONES DE ENTRADA A/D
SETUP_ADC(mode)
Esta función prepara o configura el conversor A/D. Los modos son:
o
o
o
o
o
ADC_OFF
ADC_CLOCK_DIV_2
ADC_CLOCK_DIV_8
ADC_CLOCK_DIV_32
ADC_CLOCK_INTERNAL
Ejemplo:
setup_adc(ADC_CLOCK_INTERNAL);
SET_ADC_CHANNEL(canal)
Especifica el canal a utilizar por la función READ_ADC(). El número de canal empieza
en 0. Es preciso esperar un corto espacio de tiempo después de cambiar el canal de
adquisición, antes de que se puedan obtener lecturas de datos válidos.
Ejemplo:
set_adc_channel(2);
FUNCIONES DE ENTRADA A/D
i=READ_ADC()
Esta función lee el valor digital del conversor analógico digital. Deben hacerse llamadas
a SETUP_ADC() y SET_ADC_CHANNEL() en algún momento antes de la llamada a
esta función.
Ejemplo:
setup_adc( ALL_ANALOG );
set_adc_channel( );
while ( input(PIN_B0) ) {
delay_ms( 5000 );
value = read_adc();
printf("A/D value = %2x\n",value);
}
Arq. de Computadora I
Ing. Carlos Ortega H.
20