قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

sskk77
:: مهندس متميز ::
تاريخ التسجيل: Jan 2005
المشاركات: 714
نشاط [ sskk77 ]
قوة السمعة:0
قديم 12-10-2010, 06:09 AM المشاركة 1   
افتراضي ما هي افضل طريقة لفصل الآحاد عن العشرات في PIC Twitter FaceBook Google+



السلام عليكم

في الميكروكونترولر ما هي افضل وابسط طريقة واقلها في الكود لفصل الآحاد والعشرات
يعني اقصد ان أحد السجلات في الذاكرة يحمل قيمة مثلاً 125
ما هي افضل طريقة لفصل الأرقام عن بعضها لعرضها على شاشة عرض

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

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

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

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

اعلانات

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 12-10-2010, 08:56 AM المشاركة 2   
افتراضي


اكتب الكود التالي :

كود:
int x=125; char i=0; void main(){ trisb=0; portb=0; while(x>0){ i=x%10; portb=i; x=(x-i)/10; delay_ms(1000);} }
هكذا سوف تكون كل مرتبة مخزنة في المتغير I وسيتم عرضها على المنفذ B .
و يمكنك ان تستخدم متغير متجه لتخزين البيانات فيه .

حيدر علاج حسن
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

eabueida
:: مهندس متواجد ::
تاريخ التسجيل: Apr 2007
المشاركات: 171
نشاط [ eabueida ]
قوة السمعة:0
قديم 12-10-2010, 09:35 AM المشاركة 3   
افتراضي


السلام عليكم

اخي بعض اللغات عندها اوامر جاهزة لهذا الشىء

مثل البيك بيسك والبروتون

والأمر هو DIG

وشكرا


crom
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2007
الدولة: بلدى
المشاركات: 130
نشاط [ crom ]
قوة السمعة:0
قديم 12-10-2010, 06:28 PM المشاركة 4   
افتراضي


السلام عليكم

هذا كود كامل قمت باستخدامة فى مقياس حرارة ( 7 سيقمنت ) وهو يعمل بشكل جيد بدون استخدام حلقات وهى تعمل على الامرين div و mod لفصل الارقام

كود:
' * Test configuration:
'     MCU:             P16F877
'     Oscillator:      HS, 10.000 MHz
'     Ext. Modules:    None
'     SW:              mikroBasic v7.0
' * NOTES:             By crom   ,,, /www.qariya.com

'

program temp

const NO_Segment as word[10] = (1,79,18,6,76,36, 32, 15,0,4)


 dim input_ADC0 , i as word
  dim LED1 , LED2 , LED3 , LED4 as word

  'ADCON1=0X06
  ADCON1 = $80
  TRISB = 0
  TRISC = 0
  TRISE = 0
  TRISD = 0
  PORTA = 255

  input_ADC0 = 0
  
main:


  input_ADC0 = Adc_Read(0)
  

  input_ADC0 = (input_ADC0*10)/2

   LED1  = (input_ADC0 div 1)   mod 10
     LED2  = (input_ADC0 div 10)  mod 10
       LED3  = (input_ADC0 div 100)  mod 10
        ' LED4  = (input_ADC0 div 1000)  mod 10
             
        for i =1 to 100
     PORTC = 1
         PORTE.0 = 1
         PORTB  = NO_Segment[LED1]
         gosub Delay

     PORTC = 2
          PORTE.0 = 0
         PORTB = NO_Segment[LED2]
          gosub Delay

   PORTC = 4
            PORTE.0 = 1
         PORTB = NO_Segment[LED3]
         gosub Delay
          
     PORTC = 8
            PORTE.0 = 1
        ' PORTB = NO_Segment[LED4]
        PORTB = 98
          gosub Delay
         next i
  goto main
  
 Delay:
    Delay_ms(1)
  return
end.


sskk77
:: مهندس متميز ::
تاريخ التسجيل: Jan 2005
المشاركات: 714
نشاط [ sskk77 ]
قوة السمعة:0
قديم 16-10-2010, 07:10 AM المشاركة 5   
افتراضي


الف شكر لكم جميعاً ياشباب
لكن ماذا لو كنت استخدم اسمبلي فماذا افعل

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


sskk77
:: مهندس متميز ::
تاريخ التسجيل: Jan 2005
المشاركات: 714
نشاط [ sskk77 ]
قوة السمعة:0
قديم 18-10-2010, 05:54 AM المشاركة 6   
افتراضي


وين الشباب
مافي افكار؟؟؟؟؟؟؟؟؟؟؟


زكي شاكر
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: المغرب
المشاركات: 3,062
نشاط [ زكي شاكر ]
قوة السمعة:183
قديم 18-10-2010, 05:08 PM المشاركة 7   
افتراضي


السلام عليكم
تأمل هذه الفكرة يمكن تفيدك:
لنحلل العدد 125 :
نلاحظ انه يتكون مما يلي:
125 = 100 + 20 + 5
فاذا اردنا تخزين الرقم 125 في متغير بذاكرة الرام للمتحكم .. يكفي ان نحجز 3 متغيرات:
متغير a للاحاد ونضع فيه القيمة 5
متغير b للعشرات ونضع فيه القيمة 20
متغير c للمئات ونضع فيه القيمة 100
ولتخزين الرقم كاملا نحجز متغيرا للتخزين وليكن مثلا x ونضع فيه مجموع القيم السابقة:
x=a+b+c


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 18-10-2010, 06:58 PM المشاركة 8   
افتراضي


كيف حالك استاذ زكي ؟ اعتقد اننا لم نلتقي منذ شهر رمضان .

هنا سؤال الاخ عن كيفية فصل المراتب عن بعضها . اما تخزينها فيمكن كما تفضلت به او باستخدام متغير متجه .

هو يريد الكود بالاسمبلي وانت تعرف كم انا احب الاسمبلي .

وسؤالي الى الاخ صاحب الموضوع : هل ينفع ان نعرض لك الطريقة وانت تحولها الى كود بالاسمبلي ؟

حيدر علاج حسن

التعديل الأخير تم بواسطة : حيدر علاج حسن بتاريخ 18-10-2010 الساعة 07:01 PM
إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 09:36 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025