من هنگام کار با تایمر اصلا دستو ر()set_timer0را نمی نویسم ... ولی تایمرم قشنگ به وقفه میرود و هیچ مشکلی پیدا نمیکند . در واقع دستور ()set_timer0 برای دادن مقدار اولیه به رجیستر تایمر است ، که تایمر از آنجا شروع به شمارش میکند و وقتیکه سر ریز شد (یعنی به ffff رسید ) باید یک وقفه بدهد ... اما من وقتی از این دستور استفاده میکنم و یک عدد بزرگ (مثلا68000 ) به آن میدهم ، یا اینکه آن عدد بزرگ را مستقیما در رجیستر های TMR0L , TMR0H میریزم ، اصلا برنامه حساسیتی به این موضوع نشان نمیدهد ... و کار خودش را انجام میدهد ... اصلا بریزم ، نریزم ، بزرگ بریزم ، کوچک بریزم ، ... هیچکدومش برای میکرو فرقی نداره !!!
من قصد داشتم ، با نوشتن در این رجیستر ها ، زمان مورد نظرم را کنترل کنم ... ولی اینطوری اصلا هیچ دسترسی به مقدار زمان ندارم . و فقط پری سکیلرش را میتونم کم و زیاد کنم ...
لطفا کمکم کنید ، و بگید اشکال کار از کجاست که برنامه ام درست کار نمیکند؟
تصور اینکه چنین اشکال ابلهانه ای یک روز وقتمو گرفته داره دیووووووووووونم میکنه!!!! :cry: :cry: :angry: :angry:
اینم کد برناممه ..... ببینید ... توی روتین وقفه میره ها ... زمانش هم درسته ... فقط مقدار اولیش تنظیم نمیشه :angry:
#INT_TIMER0
void Timer0_isr()
{
output_toggle(PIN_d3);
if(pulse==1)
{
pulse=0;
output_low(PIN_D2);
}
else if(pulse==0)
{
pulse=1;
output_high(PIN_D2);
}
}
#byte T0CON =0xfd5
#byte INTCON=0xff2
main()
{
set_tris_d (0x0);
T0CON=0x81;
INTCON=0xA0;
set_timer0(65536);
while (true)
{
if (get_timer0()==0)
{
if (pulse==0)
{
set_timer0(68000);
}
if ( pulse==1)
{
set_timer0(38000);
}
}
}
میدونم که آقای محمد ایجی با یک نگاه میتونه بگه مشکلم کجاست.
من قصد داشتم ، با نوشتن در این رجیستر ها ، زمان مورد نظرم را کنترل کنم ... ولی اینطوری اصلا هیچ دسترسی به مقدار زمان ندارم . و فقط پری سکیلرش را میتونم کم و زیاد کنم ...
لطفا کمکم کنید ، و بگید اشکال کار از کجاست که برنامه ام درست کار نمیکند؟
تصور اینکه چنین اشکال ابلهانه ای یک روز وقتمو گرفته داره دیووووووووووونم میکنه!!!! :cry: :cry: :angry: :angry:
اینم کد برناممه ..... ببینید ... توی روتین وقفه میره ها ... زمانش هم درسته ... فقط مقدار اولیش تنظیم نمیشه :angry:
#INT_TIMER0
void Timer0_isr()
{
output_toggle(PIN_d3);
if(pulse==1)
{
pulse=0;
output_low(PIN_D2);
}
else if(pulse==0)
{
pulse=1;
output_high(PIN_D2);
}
}
#byte T0CON =0xfd5
#byte INTCON=0xff2
main()
{
set_tris_d (0x0);
T0CON=0x81;
INTCON=0xA0;
set_timer0(65536);
while (true)
{
if (get_timer0()==0)
{
if (pulse==0)
{
set_timer0(68000);
}
if ( pulse==1)
{
set_timer0(38000);
}
}
}
میدونم که آقای محمد ایجی با یک نگاه میتونه بگه مشکلم کجاست.
دیدگاه