TIMER0 interrupt part 1


internal osc 8Mhz ကိုသံုးျပီးတြက္ထားပါတယ္။
timer ထဲကိုသြင္းတဲ့ ခုန္လွိဳင္းကို clock source ကေနယူလို႕ရသလို ျပင္ပကေနေပးလို႔လဲရပါတယ္။

TIMER 0 က 8 bit (TMR0L) နဲ႕ 16bit (TMR0L + TMR0H) ႏွစ္မ်ိဳးရွိရာမွာ 8 bit (TMR0L) ကိုပဲသံုးပါမယ္။

instruction တစ္ခုျပီးဖို႔ 4 cycle ၾကာပါတယ္. . . .
Tosc ရဲ့ ၄ ဆၾကာခ်ိန္= 4 x(1/F0sc) =4/8e6=0.5e-6 sec
Timer0 က 0.5e-6 sec (timer period) ၾကာတိုင္း ၁ တိုးသြားတယ္း. . . .
ေနာက္ဆံုး  8bit တန္ဖိုးျပည့္သြားတဲ့ အခါ ( 1111  1111 ) timer0 overflow ျဖစ္တယ္.. .
Timer0  ကို မ၀င္ခင္ ခုန္လွိဳင္းေတြကို prescaler ကိုျဖတ္ခိုင္းျပီး  အခ်ိန္္ၾကာၾကာေရႏိုင္ေအာင္လုပ္လို႔ရပါတယ္။
TMR0L ဆိုတာက TIMER0 8 bit mode မွာ ေရတြက္မွဳကိုမွတ္တဲ့ register ပါ။
TMR0L ကို ၁၀၀ ထားလိုက္ရင္ (256-100=156) timer overflow ျဖစ္ဖို႔ 156 ခ်က္ ေရရမွာေပါ့။
PRESCALER ကိုမသံုးဘူးဆိုရင္ .. . prescaler တန္ဖိုး ကို 1 လို႔ယူဆပါမယ္။

Overflow time = 4 x TOSC  x Prescaler x (256 - TMR0L)
=0.5 e -6 x 1 x 156
=78 e -6 second 
78 e -6 second   ၾကာရင္ TMR0L overflow ျဖစ္ပါတယ္။
Interrupt Control Register ( INTCON ) ေတြကို config လုပ္ထားရင္ Interrupt ျဖစ္တိုင္း  လုပ္လက္စအလုပ္ေတြရပ္ျပီး Interrupt Service Routine စီကိုေရာက္သြားျပီး အဲမွာ ေရးထားတာေတြကိုလုပ္ေဆာင္ေပးပါတယ္။ ျပီးသြားရင္ေတာ့ မူလရပ္ထားတဲ့ေနရာကေန ျပန္အလုပ္ပါတယ္။
           
prescaler က timer ကို ၾကာၾကာေရနိုင္ေအာင္လုပ္ေပးပါတယ္။ သူ႕ကိူသံုးရင္ေတာ့ ၂ ဆ ကေန၂၅၆ ဆအထိ ၾကာေအာင္လုပ္လို႔ရပါတယ္။ prescaler ၂ ဆိုတာက လွိဳင္း ၂ခု PRESCALER
ထဲကို၀င္မွ လွိဳင္း ၁ ခု ကို timer ကိုထုတ္ေပးတာပါ။ ps 4 ဆိုရင္ လွိဳင္း ၄ ခု PRESCALER ထဲ၀င္မွ
 လွိဳင္း ၁ ခု ကို timer ကိုထုတ္ေပးတာပါ။
အေပၚက တြက္ထားတာကိုပဲ ps=2 ထားလိုက္ရင္ 156e-6 second ျဖစ္ျပီး overflow ေရာက္ဖို႔ ၂ ဆ ပိုၾကာလာမွာပါ။

register ေတြနဲ႔ စမ္းတာကေတာ့ ေနာက္မ်ားမွ။
(အခုလဲ ေလ့လာေနတုန္း။)                   

Comments

Popular posts from this blog

Inductance caculator

Pointer to object array