من هنگام کار با تایمر اصلا دستو ر()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);
}
}
}
میدونم که آقای محمد ایجی با یک نگاه میتونه بگه مشکلم کجاست.
من قصد داشتم ، با نوشتن در این رجیستر ها ، زمان مورد نظرم را کنترل کنم ... ولی اینطوری اصلا هیچ دسترسی به مقدار زمان ندارم . و فقط پری سکیلرش را میتونم کم و زیاد کنم ...
لطفا کمکم کنید ، و بگید اشکال کار از کجاست که برنامه ام درست کار نمیکند؟
تصور اینکه چنین اشکال ابلهانه ای یک روز وقتمو گرفته داره دیووووووووووونم میکنه!!!!







اینم کد برناممه ..... ببینید ... توی روتین وقفه میره ها ... زمانش هم درسته ... فقط مقدار اولیش تنظیم نمیشه :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);
}
}
}
میدونم که آقای محمد ایجی با یک نگاه میتونه بگه مشکلم کجاست.
دیدگاه