سلام دوستان
من دارم زمان یک پالس رو با تایمر 1 اندازه میگیرم . کلاک تایمرم هم روی 1 مگ تنظیم شده . برنامم به این شکل که با پالس مورد نظر را به وقفه دادم و تو لبه بالا رونده ریجستر های TCNT1L=0x00 TCNT1H=0x00 برابر صفر قرار میدهم و توی لبه پایین رونده اطلاعات ریجستر هارو برداشت می کنم. ریجستر پایین درست کار می کنه اما ریجستر باللایی همیشه صفر هستش . مثلا اگه پالسم 600 میکرو ثانیه باشه رجیستر پایینی 0b01011000 را که عدد88 هستش رو نشون میده اما ریجستر بالایی که باید عدد 2 را نشون بده ، صفر هستش .
لطفا کمکم کنید چون کارم گیره
interrupt [EXT_INT0] void ext_int0_isr(void)
{
TCNT1H=0x00;
TCNT1L=0x00;
}
// External Interrupt 1 service routine (falling edge)
interrupt [EXT_INT1] void ext_int1_isr(void)
{
p1=TCNT1H;
p2=TCNT1L;
}
من دارم زمان یک پالس رو با تایمر 1 اندازه میگیرم . کلاک تایمرم هم روی 1 مگ تنظیم شده . برنامم به این شکل که با پالس مورد نظر را به وقفه دادم و تو لبه بالا رونده ریجستر های TCNT1L=0x00 TCNT1H=0x00 برابر صفر قرار میدهم و توی لبه پایین رونده اطلاعات ریجستر هارو برداشت می کنم. ریجستر پایین درست کار می کنه اما ریجستر باللایی همیشه صفر هستش . مثلا اگه پالسم 600 میکرو ثانیه باشه رجیستر پایینی 0b01011000 را که عدد88 هستش رو نشون میده اما ریجستر بالایی که باید عدد 2 را نشون بده ، صفر هستش .
لطفا کمکم کنید چون کارم گیره
interrupt [EXT_INT0] void ext_int0_isr(void)
{
TCNT1H=0x00;
TCNT1L=0x00;
}
// External Interrupt 1 service routine (falling edge)
interrupt [EXT_INT1] void ext_int1_isr(void)
{
p1=TCNT1H;
p2=TCNT1L;
}
دیدگاه