Práctica: Interrupciones en C

Anuncio
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
Descargar