|
Измерение ширины импульсов
Программные примеры для микроконтроллеров AVR - AVRStudio
(Измерение ширины импульсов)
На вывод ICP (Input Capture Pint — вывод захвата на входе) микроконтроллера
подаются импульсы, ширина которых измеряется и ее значение в миллисекундах
отображается с помощью светодиодов, подключенных к выводам порта С.
Пример для микроконтроллера AT90S8535 представлен ниже.
Примечание: при компиляции проекта требуется добавить в проект следующие библиотеки: "avr/io.h","avr/interrupt.h","avr/signal.h".
unsigned char OverflowC;
unsigned int EdgeR, EdgeF;
unsigned long PulseClocks;
INTERRUPT(SIG_OVERFLOW1)
{
OverflowC++;
}
INTERRUPT(SIG_INPUT_CAPTURE1 )
{
if ((PIND & 0x40) != 0)
{
EdgeR = ICR1;
TCCR1B = TCCR1B & 0xBF;
OverflowC = 0;
}
else
{
EdgeF = ICR1;
TCCR1B = TCCR1B | 0x40;
PulseClocks = (unsigned long)EdgeF -
(unsigned long)EdgeR +
(unsigned long)OverflowC * 0x10000;
PORTC = PulseClocks / 500;
}
}
int main (void)
{
DDRC = 0xFF;
TCCR1B = 0xC2;
TIMSK = 0x24;
sei();
while(1) ;
}
|
Файлы проекта можно скачать здесь:
|
|
|