Logo Studenta

Tarea 1 Timer con ATMEGA328p - Brigith Lojan

¡Estudia con miles de materiales!

Vista previa del material en texto

Tarea 1: Timer con ATMEGA328p 
Nombre: Brigith Lojan 
Curso: 5to “B” 
Realizar un programa en ANSI C para un microcontrolador ATmega328p (operando a 16Mhz de 
clock), que realice el siguiente trabajo: 
- Como programa principal del microcontrolador, se debe generar una señal en el pin PC0 (400ms 
en alto y 400ms en bajo, se puede usar la librería delay). 
- Usar un timer de 8 bit para generar una señal en el pin PB1 con 100ms en alto y 100ms en bajo, 
con el uso de interrupciones internar. 
- Usar un timer de 16 bit para generar una señal en el pin PB0 con 100ms en alto y 100ms en bajo, 
con el uso de interrupciones internar. 
Fórmula: 
65536 −
16000000 ∗ 0.1
1024
 
65536 − 1562.5 
63973.5 = 63974 
Código: 
#define F_CPU 16000000 
#include <avr/io.h> 
#include <avr/interrupt.h> 
#include <util/delay.h> 
unsigned char a =0; 
 
ISR(TIMER0_OVF_vect){ 
 
 if (a == 10) 
 { 
 PORTB ^= 0X02; 
 a=0; 
 } 
 a++; 
 TCNT0 = 100; //iniciar el contador en 100 
 
} 
 
ISR(TIMER1_OVF_vect){ 
 PORTB ^= 0x01; 
 TCNT1 = 63974; 
} 
 
int main(void) 
{ 
 //Configuraciones generales 
 cli(); //Deshabilitar las interrupciones globales 
 DDRC = 0x01; //PC0 salida 
 DDRB = 0x01; //PB0 salida 
 DDRB = 0x02; //PB1 salida 
 PORTC = 0x00; 
 TCCR0B = (1<<CS02)|(0<<CS01)|(1<<CS00)|(0<<WGM02); //Conf prescaler en 1024 
del timer de 8 bits 
 TCCR0A = (0<<WGM01)|(0<<WGM00); //Conf en 
modo normal 
 TIMSK0 = (1<<TOIE0); 
 TCNT0 = 100; 
 TCCR1B = (1<<CS12)|(0<<CS11)|(1<<CS10)|(1<<WGM12); //Conf prescaler en 1024 
del timer de 16 bits 
 TCCR1A = (0<<WGM01)|(0<<WGM00); //Conf en modo normal 
 TIMSK1 = (1<<TOIE1); 
 TCNT1 = 63974; 
 sei(); 
 /* Replace with your application code */ 
 while (1) 
 { 
 PORTC ^= 0x01; 
 _delay_ms(400); 
 PORTC ^= 0x01; 
 _delay_ms(400); 
 
 
 } 
} 
Simulación en Proteus:

Continuar navegando