الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما هي افضل طريقة لفصل الآحاد عن العشرات في PIC

بدأه abudawoodd في 12 أكتوبر 2010 · 7 رد · 1,737 مشاهدة · في الميكروكنترولر (المتحكم) و الدوائر الرقمية و المنطقية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

في الميكروكونترولر ما هي افضل وابسط طريقة واقلها في الكود لفصل الآحاد والعشرات

يعني اقصد ان أحد السجلات في الذاكرة يحمل قيمة مثلاً 125

ما هي افضل طريقة لفصل الأرقام عن بعضها لعرضها على شاشة عرض

في الوقت الحالي انا استخدم الحلقات

يعني اضع ثلاث حلقات بداخل بعضها وكل حلقة تعد إلى تسعة ثم تصفر وتضيف واحد في السجل الذي يليها

ثم ابدأ بتشغيل الحلقة وفي كل دورة اطرح من المتغير 1 من السجل الذي اريد فصل خاناته حتى يصفر السجل

فتكون النتيجة في سجلات الحلقة في السجل الأول 5 والسجل الثاني 2 والسجل الثالث 1

هذه هي طريقتي واظنها ابسط طريقة لكنها تستهلك الوقت في العد خاصة ان كانت القيم المستقبلة كبيرة

فهل يوجد طريقة اكثر فاعلية من هذه الطريقة واسرع

ارجو ان اكون قد تمكنت من ايصال الفكرة ولكم الشكر والتقدير

#2

نعم الفكرة وصلت

لكنك لم تذكر ما هى لغة البرمجة التى تستخدم

ان كانت لغة عالية المستوى فالعملية بسيطة وهى بالقسمة على عشرة وأخذ باقى القسمة

ان كانت لغة التجميع فأريدك ان تنعش ذاكرتى هل يوجد تعليمة قسمة فى ذاكرة الميكرو

وارجوا ان تذكر نوع ال PIC

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#3
حريف برمجة كتب:

نعم الفكرة وصلت

لكنك لم تذكر ما هى لغة البرمجة التى تستخدم

ان كانت لغة عالية المستوى فالعملية بسيطة وهى بالقسمة على عشرة وأخذ باقى القسمة

ان كانت لغة التجميع فأريدك ان تنعش ذاكرتى هل يوجد تعليمة قسمة فى ذاكرة الميكرو

وارجوا ان تذكر نوع ال PIC

الف شكر لك أخي

بالنسبة للغة البرمجة أنا استخدم اسمبلي ولم تمر علي عملية قسمة ومع ذلك يمكن استخدام الحلقات للقسمة ايصاً

ولكن اريد التبسيط والاختصار في الكود ما أمكن من اجل السرعة

أما ال PIC فهي 16F84 أو 16F628 أو 16F630 ولا أظن انها تفرق

الف شكر لك مرة أخرى

#4

كنت اسألك عن تعليمة قسمة لانك ستستخدمها فى عملية التقسيم وتسرع الكود

وليس طريقة تنفيذها

لكن اذا كان الميكرو كذلك فلا مفر من الحلقات لكن عندى طريقة اقصر

حلقتين

الحلقة الأولى تقارن الرقم ب 100 إذا كان اصغر إذهب للحلقة الثانية

إن لم يكن اطرح منه 100 وزود العداد ب 1

ثم تكرر الحلقة حتى تحصل على عدد أقل من مئة

الحلقة الثانية

1 أخرج العداد السابق على شاشة المئات

2- صفر عداد الحلقة الأولى لإستخدامة فى الثانية

3- قارن العدد الناتج من الأولى ب 10

إذا كان اصغر من 10 أخرج من الحلقة

اذا كان اكبر اطرح منه 10 (-10)

4- زود العداد ب 1 (1++ )

5- كرر الحلقة حتى تخرج منها (عدد اقل من عشرة

بقية الكود:

1- خرج قيمة العداد على شاشة العشرات

2-خرج الرقم الباقى بعد عمليات الطرح على شاشة الآحاد

3-إنتهت العملية

اتمنى ان تكون الخوارزمية السابقة ساعدتك

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#5
حريف برمجة كتب:

كنت اسألك عن تعليمة قسمة لانك ستستخدمها فى عملية التقسيم وتسرع الكود

وليس طريقة تنفيذها

لكن اذا كان الميكرو كذلك فلا مفر من الحلقات لكن عندى طريقة اقصر

حلقتين

الحلقة الأولى تقارن الرقم ب 100 إذا كان اصغر إذهب للحلقة الثانية

إن لم يكن اطرح منه 100 وزود العداد ب 1

ثم تكرر الحلقة حتى تحصل على عدد أقل من مئة

الحلقة الثانية

1 أخرج العداد السابق على شاشة المئات

2- صفر عداد الحلقة الأولى لإستخدامة فى الثانية

3- قارن العدد الناتج من الأولى ب 10

إذا كان اصغر من 10 أخرج من الحلقة

اذا كان اكبر اطرح منه 10 (-10)

4- زود العداد ب 1 (1++ )

5- كرر الحلقة حتى تخرج منها (عدد اقل من عشرة

بقية الكود:

1- خرج قيمة العداد على شاشة العشرات

2-خرج الرقم الباقى بعد عمليات الطرح على شاشة الآحاد

3-إنتهت العملية

اتمنى ان تكون الخوارزمية السابقة ساعدتك

ياسلام عليك أخي حريف برمجة هذه فكرة تسرع من العملية بشكل كبير وكودها بسيط وهي ممتازة وقد وضعتها عندي في قائمة الأفكار

ماذا عن شركة ميكرو شيب كيف كانت ستعمل في مثل هذا الموقف هل يوجد مشاريع مشابهه عندها لنستفيد منها

حالياً فكرت في قائمة PCL فهي إلى الآن اسرع بكثير لكنها لا تكفي إلا لقيمة اقصاها 99 في القائمة الواحدة

ثم وجدت طريقة أخرى وهي وضعت ثلاث قوائم PCL فنجح الأمر بشكل رائع وسريع جداً

أحيل القيمة إلى أول قائمة فتعود بالآحاد ثم احيلها إلى الثانية فتعود بالعشرات فأحيلها إلى الثالثة فتعود بالمئات

الا انها تستهلك كم كبير من ذاكرة المعالج

لكنها أسرع ما وجدت إلى الآن فهل يوجد كود ابسط من ذلك واسرع أو مقارب في الأداء

تم تعديل هذه المشاركة بواسطة abudawoodd في 18 أكتوبر 2010 في 08:51

#6

هناك طرق أخرى

فكك كل اربعة بت وما ميثلها من أرقام hex وبعد ذلك شوف اكبر من عشرة ام اقل وقم بعمل المضاعفات وإرسم جداول وعيش

لكن قلى هل المشروع يستاهل كل هذا العناء يعنى انت محتاج السرعة بشكل حرج هكذا

لا اعتقد انه سيأخذ منك وقت تنفيذ كبير الحل الذى اعطيته لك

اعنى انه لا يجب التفكير بالوقت التنفيذ كثيرا ان لم يكن له جدوى فربما تضيع الكثير بسبب هذا فى بعض التطبيقات

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#7
حريف برمجة كتب:

هناك طرق أخرى

فكك كل اربعة بت وما ميثلها من أرقام hex وبعد ذلك شوف اكبر من عشرة ام اقل وقم بعمل المضاعفات وإرسم جداول وعيش

لكن قلى هل المشروع يستاهل كل هذا العناء يعنى انت محتاج السرعة بشكل حرج هكذا

لا اعتقد انه سيأخذ منك وقت تنفيذ كبير الحل الذى اعطيته لك

اعنى انه لا يجب التفكير بالوقت التنفيذ كثيرا ان لم يكن له جدوى فربما تضيع الكثير بسبب هذا فى بعض التطبيقات

تمام أخي حريف برمجة كلامك سليم ليست السرعة مهمة إلى هذه الدرجة وقد استطعت حل المشكلة باستخدام فكرتك في مشروعي

إلا أن الموضع الآن اصبح استزادة في العلم في حال اردت مضاعفة السرعة في المشروع

الف شكر لك مرة أخرى

#8

العفو أخى الكريم

حمد لله على انتهاء مشروعك

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

مواضيع مشابهة