السلام عليكم ورحمة الله وبركاته
لدي حاليا مشروع واجتاج الى عداد للزمن وبحكم انني اتعمال مع trm0 قررت ان استخدمه في المشروع
ولكن لدي بعض الاساله حول tmr0
انا اريد ان يتم العد لكل 1us
ويكون العد ختى 2000us تقريبا
نوع الكريستال المستخدم 4MHz
option_reg = %00000010
ويكون الدقه 1:8
طبعا الفكره انه سوف ياتيني 3 اشارات على 3 مخارج
عند قوم الاشاره يقوم مؤقت خاص بالعد
وعند قدوم الاشاره الثانيه يعمل مؤقت اخر بالعد وهكذا بالنسبه للثالثه
قمت بكتابة هذا الكود ولاينقص الا ضبط الموقت لكي يعد كل 1us
كود:
device = 16f877a
xtal 4
DECLARE LCD_DTPIN PORTb.4
DECLARE LCD_ENPIN PORTb.3
DECLARE LCD_INTERFACE 4
DECLARE LCD_RSPIN PORTb.2
SYMBOL T0IE = INTCON.5
SYMBOL T0IF = INTCON.2
SYMBOL GIE = INTCON.7
gie =0
t0if =0
t0ie=1
option_reg = %00000010
dim i1 as word
dim i2 as word
dim i3 as word
dim flg_1 as byte
dim flg_2 as byte
dim flg_3 as byte
dim f1 as word
dim f2 as word
dim f3 as word
tmr0=132
on_INTERRUPT GOTO count
main:
print at 1,1,dec f1
print at 1,7,dec f2
print at 2,1,dec f3
if portd.0=1 then
flg_1 =1
end if
if portd.1=1 then
flg_2 =1
end if
if portd.2=1 then
flg_3 =1
end if
gie=1
goto main
count:
if flg_1 =1 then
if i1 <1000 then
inc i1
t0if=0
end if
end if
if flg_2 =1 then
if i2 <1000 then
inc i2
t0if=0
end if
end if
if flg_3 =1 then
if i3 <1000 then
inc i3
t0if=0
end if
end if
if i1 = 1000 then
inc f1
i1 =0
t0if=0
end if
if i2 = 1000 then
inc f2
i2 =0
t0if=0
end if
if i3 = 1000 then
inc f3
i3 =0
t0if=0
end if
tmr0=132
context restore
مع العلم ان الموقت في البرنامج المكتوب سابقا يعد كل 1ms وانا اريده كل 1us
ارجو المساعده لمن يملك الخبره في هذا الامر
وخاصه اخي العزيز زكي شاكر
ودمتم سالمين