Programación C de microcontroladores (C515C)
Nota:
El valor para el evento de comparación tiene una anchura de 16 bits. Está dividido entre los
dos registros de 8 bits CCH2 (parte alta) y CCL2 (parte baja). Ambos registros solamente se
pueden inicializar por separado con valores. Esto significa que la variable contadora de 16
bits (tipo de datos Integer) se debe dividir en dos valores de 8 bits cada uno (tipo de datos
Unsigned Character) para la parte baja y la parte alta. En el lenguaje de programación C,
para las variables existe la posibilidad de asignar tipos de datos fuente de gran ocupación a
tipos de datos de destino de pequeña ocupación. Este procedimiento se llama Casting.
Ejemplo:
El valor de una variable del tipo unsigned int a se debe asignar a una variable del tipo
unsigned char b, siendo asignada solamente la parte baja de a, de 8 bits de anchura, a la
variable b del tipo unsigned char e ignorándose la parte alta. En la programación, el tipo de
datos de destino deseado precede entre paréntesis el tipo de datos fuente.
unsigned int a = 0xfe4d;
unsigned char b = 0x00;
b = (unsigned char) a;
Este Casting puede emplearse para la inicialización de los registros de comparación
CCH2/CCL2 dentro de las rutinas de servicio de interrupción de las interrupciones externas
3 y 4:
unsigned int out =0x fe 01;
CCL2=(char)out;
out = ((out << 8) | (out >> 8));
CCH2=(char)out;
out = ((out << 8) | (out >> 8));
Ejercicios de programación:
•
¡Configure el Timer 2 como temporizador en modo de desbordamiento con autorecarga
para una frecuencia de 2kHz!
•
¡Active el modo de comparación 0 del Timer 2 y las interrupciones externas 3 y 4!
•
¡Escriba una rutina de servicio de interrupción para las interrupciones externas 3 y 4! En
la ISR de la interrupción externa3, el valor de comparación para la PWM se debe
incrementar en 20 pasos y en la ISR de la interrupción externa4 se deberá reducir en 20
pasos. ¡Preste atención a que el valor de comparación se sitúe dentro del margen de
conteo del temporizador! ¡Utilice para la configuración el manual de instrucciones del
módulo Flash PSD1 y los siguientes diagramas de flujo!
58
CMC 5
// Variable del tipo unsigned int
// Variable del tipo unsigned char
// la parte baja de a es asignada a b
//
unsigned int a es asignado a unsigned char
// Valor de ejemplo para "out"
// Parte baja de 8bits de "out" a
// Cambiar parte baja con parte alta, out => 0x01fe
// Parte alta de 8bits de "out" a
// Cambiar parte alta con parte baja, out => 0xfe01
CCL2 => 0x01
CCH2 = 0xfe
CMC 5-2 Bloque de ensayos 2