Atmega8 и прерывания компаратора
Добавлено: Вт сен 15, 2009 19:47:13
Подскажите,пожалуйста,никак не могу разобраться, вывожу значение TimeImp на LCD и при первом и иногда 2-м импульсе выводятся разные значения,а с 3-го уже постоянна TimeImp, как можно сделать вывод точного значения при первом импульсе
Код: Выделить всё
Chip type : ATmega8
Program type : Application
Clock frequency : 4,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/
unsigned int clock,EdgeF,STimeImp[5],TimeImp,EdgeR;
char k;
#include <mega8>
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd>
#include<stdio>
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
TCNT1H=0xff;
TCNT1L=0xce;
clock++; //прерывания каждые 100 микросекунд
}
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
TCNT1H=0xff;
TCNT1L=0xce;
if (k==0){
// Place your code here
EdgeR=ICR1;
k=1;
TCCR1B=0b00000010; //прерывания по низкому уровню
}else{
EdgeF=ICR1;
k=0;
TimeImp=EdgeF-EdgeR;
TCCR1B=0b01000010; //прерывания по высокому уровню
}
}
void main(void)
{
TCCR1A=0x00;
TCCR1B=0b01000010; //прерывание по Rising Pulse
TCNT1H=0xff;
TCNT1L=0xce;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x24;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
lcd_init(16);
#asm("sei")
while (1)
{
sprintf(STimeImp,"%u",TimeImp);
lcd_gotoxy(0,1);
lcd_puts(STimeImp);
};
}