Práctica: Interrupciones en C 1. Objetivos Aprender el manejo del timer0 por interrupción en lenguaje C. Aprender el uso del driver del convertidor A/D suministrado. 2. Objetivos Realizar un pseudocódigo para el programa del apartado ?? 3. Programa ejemplo Crear una nueva carpeta en el directorio de trabajo. Volcar al directorio de trabajo los ficheros la página web http:// www.iit.upco.es/˜cesar/servoi Hacer doble click sobre el icono: servoi.Uv2 Ejecutar en tarjeta. 4. Ejemplo de generación de onda El siguiente programa genera una señal periódica de periodo 2 ms y 50 % de “duty-cycle” utilizando la interrupción del timer 0. Analizar y comprobar el funcionamiento del mismo conectando un osciloscopio a la salida P7.0 (en la tarjeta lleva el nombre Borna 2: “B2”). /* Generación de onda de T=2 ms, 50% duty-cycle. usando timer 0, en lenguaje C con interrupción Departamento de Electrónica y Automática DEA-ICAI Prof. Cesáreo Fernández Martı́nez */ #include <reg167.h> #include <stdio.h> #define CUENTA -2500 void timer0(void) interrupt 0x20 { P7 = P7 ˆ 0x0001; } void main(void) { DP7 = 0x0001; P7 = 0x0000; T01CON = 0x0; T0 = CUENTA; T0REL = CUENTA; T0R = 1; // arranca timer T0IC = 0x44; IEN = 1; 1 while(1) ; } 5. Ejercicio1: Servo, posición variable Modificar el ejemplo anterior de forma que el tiempo que esté la señal en nivel alto sea un tiempo entre 500µs y 2 ms, manteniendo el periodo de 20 ms. Este nivel se podrá variar utilizando los 4 bits más significativos del resultado de la conversión A/D de la lı́nea conectada al potenciómetro 0 de la tarjeta del lab (puerto 5 lı́nea 0). La lectura del convertidor A/D se realiza en el programa principal (el driver de A/D por polling está disponible en la página WEB de la asignatura). ¿Qué resolución tenemos a la hora de definir el nivel alto?. Comprobar con osciloscopio. Una vez comprobado que el programa funciona correctamente se podrá gobernar un servo con la ayuda del potenciómetro. (Pedir el servo al profesor). 2