Столкнулся с проблемой. Сразу говорю в гугле не забанили. Читал, но так и не понял.
Разбираюсь с прерываниями. Суть программы в следующем:
С помощью прерывания реализован шим, далее после того как светодиод полностью зажгеться, нужно запретить это прерывание(подождать не много времени), и вызвать другое, в котором будет реализация мигания этого же светодиода.
схема к 14 ноге аттини 2313 подключен светодиод.
Не могу понять как запретить одно прерывание и вызвать другое. в даташипе есть регистры TIFR с определенными флагами с помощью которых можно отследить выполнилось ли прерывание или нет.
код программы
#include <avr/io.h>
#include <math.h>
#include <util/delay.h>
#include <avr/interrupt.h>
ISR(TIMER0_COMPA_vect)
{
OCR0A++;
_delay_ms(5);
}
void f(void)
{
while (TCNT0<700)
{
TCNT0++;
}
}
int main(void)
{
PORTB=0x00;
DDRB=0xC5;
TCCR0A =(1<<WGM02)|(1<<WGM01)|(1<<WGM00)|(1<<COM0A1)|(1<<COM0A0);
TCCR0B =(1<<CS00);
TCNT0 = 0x00;
OCR0A = 0x01;
TIMSK=(TOIE0);
sei();
while(1)
{
if (1<<TOV0)
{
f();
cli();
f();
}
}
}
Раздел: AVR
Разбираюсь с прерываниями. Суть программы в следующем:
С помощью прерывания реализован шим, далее после того как светодиод полностью зажгеться, нужно запретить это прерывание(подождать не много времени), и вызвать другое, в котором будет реализация мигания этого же светодиода.
схема к 14 ноге аттини 2313 подключен светодиод.
Не могу понять как запретить одно прерывание и вызвать другое. в даташипе есть регистры TIFR с определенными флагами с помощью которых можно отследить выполнилось ли прерывание или нет.
код программы
#include <avr/io.h>
#include <math.h>
#include <util/delay.h>
#include <avr/interrupt.h>
ISR(TIMER0_COMPA_vect)
{
OCR0A++;
_delay_ms(5);
}
void f(void)
{
while (TCNT0<700)
{
TCNT0++;
}
}
int main(void)
{
PORTB=0x00;
DDRB=0xC5;
TCCR0A =(1<<WGM02)|(1<<WGM01)|(1<<WGM00)|(1<<COM0A1)|(1<<COM0A0);
TCCR0B =(1<<CS00);
TCNT0 = 0x00;
OCR0A = 0x01;
TIMSK=(TOIE0);
sei();
while(1)
{
if (1<<TOV0)
{
f();
cli();
f();
}
}
}
Раздел: AVR