Delay loops for pic


(medo433) #1

السلام عليكم…
أريدأن أطرح سؤالا

هذا الكود المكتوب على mplab هو لفترات التأخير (DELAY LOOPS)
loop
movlw 0xff
movwf 0x22
decfsz 0x22,1
goto loop

فالسؤال هو؟ هل من الممكن معرفةالوقت الذي سوف يقوم ال pic بتأخيره؟؟
أي اذا أردنا تأخير لمدة ثانية, فكم loop سوف نحتاج لهذه العملية؟؟
مع جزيل الشكر


(eabueida) #2

السلام عليكم
اعتقد يا أخي وجود خطأ في هذا لكود
وذلك لأنة يدخل في open loop لا حد له
لأنك تنقص واحد وترجع تعيد ونس القيمة الأصلية له في الدورة الثانية
والكود الصحيح
movlw 0xff
movwf 0x22
loop
decfsz 0x22,1
goto loop

وطريقة الحساي التالى أما عن طريق الmplab او يدويا
وطريقة الحساب اليدوية التالي
في البدايةيجب ا، نعرف ما هو زمن اتمام امر واحد وهو يحقق بالمعادلة التالية
مقلوب (Focs/4)
فمثلا المهتز سرعته 4Mhz إذا يكون سرعة كل أمر حوالي 1 ميكروثانية
لكن يحب ان نضع بالحسبان التالي أن معظم الأوامر تأخذ 1 ميكروثانية بإستثناء الأوامر التي بها jump مثل goto ,call وبعضها الذي يحمل الشرط مثل decfzc يستهلك 1 ميكروثانية في كل أمر ماعدى عند القفز فإنة يتسهلك 2 ميكروثاية.
إذا يكون الحساب لبرنامجك كالتالي
movlw 0xff =1us

movwf 0x22 =1 us
ثم ندخل ال loop
ويكون التالي 245*3

  • 2 وذلك لأن الdecfsz اشتغلت
    وبالتالي المجموع
    1+1+ 3*245+2= 766 ميكروثانية
    هذا والله اعلم

(medo433) #3

السلام عليكم…
شكرا يا أخي الكريم على هذه المعلىمات القيمة…
نعم انت عمى صواب… شكلي كنت متعجل وأنا بكتب الكود…

ولكن…

ان المجموع الذي تكلمت عنه في هذه الحالة سوف يصبح:
1+1+245*3+2 = 739 وليس 766 اذا انا قد فهمت المعلومة بشكل صحيح

والملاحظه الأخرى هي لماذا 245؟؟ أليس Ff تساوي 255 ؟؟؟

شكرا مرة أخرى


(eabueida) #4

السلام عليكم
متأسف للخطأ
كنت اقصد 254


(metwally.mustafa) #5

شكرا لك اخى الكريم