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

   

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 14-06-2014, 06:56 AM المشاركة 9   
افتراضي



السلام عليكم
أخي كريم طريقه القراءه من كمبيوتر عبر uart فأفضل طريقه هي قراءه حرف حرف وعن طريق انتربت وبالطبع لايمكنك او لاتحصل على نتائج صحيحه عند أستخدام طرق أخرى
فقد جربت طريقه ارفقتلك اياها في مشاركه سابقه وهي بسيطه جدا صحيح طويله ولكن بسيطه
وانا سحاول كتابه لك الكود اي تستفاد منه في قراءه النص ولكن كم هو طول النص
مطلوب عرضه لانك بحاجه الى مصفوفه لخزن البيانات مستقبله
تحياتي
السلام عليكم
تفضل أخي هذا أبسط كود
كود:
void interrupt()
{
               {
                if(RCIF_bit==1)
                              { 
                                RCIF_bit=0;
                               read_data=UART1_Read();
                               if(read_data=='"' )
                                                 {
                                                   recieve=0xFF;
                                                 }
                               else if(recieve ==0 && read_data >=32 && read_data <='z'  )
                                                  {
                                                   flag=0;
                                                   buffer1[kk]=read_data;
                                                   if(kk< max_length)kk++;// must be limited kk value
                                                  }
                              }

               }

}

هذا هو مشروع
http://up.top4top.net/downloadf-top4...bf911-rar.html

شرح الكود
=======

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

لذا عليك بتعريف اقصى طول اي تكتب في برنامج
كود:
char const max_length=200;
فعندما يتم ارسال البيانات فسيتم مقاطعه لان RCIF_bit سوف يصبح =1 وبتالي تتم قراءه حرف عن طريق ()read_data=UART1_Read
ويتم خزن البيانات في مصفوفه buffer1
حيث يتم تعريف هذه مصفوفه في بدايه البرنامج كنالي
كود:
unsigned char buffer1[max_length];
ولكن كيف يتم ارسال البيانات ترسل هكذا
" iam from Iraq
وبتالي سوف يقرا الحرف الاول وهو i وعندما يصل الى علامه " فانه سوف ينهي عمليه الاستقبال recieve=0xFF و هذا متغير نستفاد منه بأنه flag للبيانات اي تم استلام بيانات جديده

سؤال // ماذا يعني هذا الشرط
كود:
if(recieve ==0 && read_data >=32 && read_data <='z'  )
الجواب //
اذا كان recieve لايساوي 0xFF يعني لم نتهي من استقبال البيانات أذن شوف البيانات المقروءه هل هي ضمن اسكي الكود بين 0x32 وبين 'z'
http://cdn.top4top.net/i_6e8ae028f21.png

================================================


طبعا واذا تريد خزن البيانات في ايبروم تكتب التالي
كود:
if(recieve==0xFF )
                        {
                         delay_ms(100);
                          recieve=0;
                          flag=1;
                          for(x=0;x<kk;x++)
                                          {
                                           EEPROM_Write(x+1,buffer1[x]);
                                          }
                          EEPROM_Write(0,kk);
                          for(x=0;x<kk;x++)
                                          {
                                           buffer1[x]=0;
                                          }
                          delay_ms(100);
                          kk=0;
                         }
كود:
if(flag==1 )
                        {
                         text_print(1);
                        }

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 14-06-2014, 07:01 AM المشاركة 10   
افتراضي


وهذا فيديو لتوضيح الارسال البيانات عبر كمبيوتر
http://arabsh.com/videos/0c34434960/...D8%B3-wmv.html

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

الصورة الرمزية ناصراحمد2
ناصراحمد2
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: EGYPT
المشاركات: 1,315
نشاط [ ناصراحمد2 ]
قوة السمعة:
قديم 17-06-2014, 01:53 AM المشاركة 11   
افتراضي


السلام عليكم ورحمة الله وبركاتة

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


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 17-06-2014, 05:27 AM المشاركة 12   
sun


السلام عليكم ورحمة الله وبركاتة

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


the lion
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2009
الدولة: egypt
المشاركات: 117
نشاط [ the lion ]
قوة السمعة:
قديم 17-06-2014, 10:45 PM المشاركة 13   
Talking عودا حميدا


حمد الله بالسلامه ياهندسه . 😃


الصورة الرمزية ناصراحمد2
ناصراحمد2
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: EGYPT
المشاركات: 1,315
نشاط [ ناصراحمد2 ]
قوة السمعة:
قديم 18-06-2014, 12:20 AM المشاركة 14   
افتراضي


حمد الله بالسلامه ياهندسه . 😃
السلام عليكم ورحمة الله وبركاتة
والله انا بفتح الصفحة هنا علشان ابعتلك الرابط لقيتك منورها
اهلا ومرحبا باستاذى الغالى مهندس /احمد الطباخ
(((اسد البرمجة )))
======================
استغل الموقف طبعا ههههههههههه
ياريت تقولى رايك فى الموضوع
ويوجد هنا حل المقاطعة تستخدم حرف من حروف الاسكى كشرط لانتهاء الارسال ((")) .
المشكلة هنا ان الحرف دة اكيد حيكون مستخدم من ضمن ماسوف يتم ارسالة للميكرو ؟؟؟


the lion
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2009
الدولة: egypt
المشاركات: 117
نشاط [ the lion ]
قوة السمعة:
قديم 18-06-2014, 06:54 AM المشاركة 15   
x9


اعتقد انك ممكن تستخدم combination
من الحروف في اول الاراي
كمثال
0x01 0x08 0x12 0x70
وده هيقلل احتماليه
انك تستقبل مره تانيه جوه الاراي
ويفضل انك تستخدم crc بعد النهايه
مع الانتربت الدنيا هتزبط
ويستحتب انك تخلي ال baud rate
115200 او اعلي عشان انت هتبعت فريمات كتير ورا بعض
وحاول تستقبل في buffer غير اللي بتعرضه .. يعني يبقي فيه عندك
two buffers show one and receive data in the other
use Pointers To switch between them
with My Best Regards


الصورة الرمزية ناصراحمد2
ناصراحمد2
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: EGYPT
المشاركات: 1,315
نشاط [ ناصراحمد2 ]
قوة السمعة:
قديم 19-06-2014, 12:39 AM المشاركة 16   
افتراضي


اعتقد انك ممكن تستخدم combination
من الحروف في اول الاراي
كمثال
0x01 0x08 0x12 0x70
وده هيقلل احتماليه
انك تستقبل مره تانيه جوه الاراي
ويفضل انك تستخدم crc بعد النهايه
مع الانتربت الدنيا هتزبط
ويستحتب انك تخلي ال baud rate
115200 او اعلي عشان انت هتبعت فريمات كتير ورا بعض
وحاول تستقبل في buffer غير اللي بتعرضه .. يعني يبقي فيه عندك
two buffers show one and receive data in the other
use Pointers To switch between them
with My Best Regards
السلام عليكم ورحمة الله وبركاتة
اكيد طبعا الدنيا حتظبط وتبقى وردى
طالما ان (اسد البرمجة the lion ) انضم الى ( نمر البرمجة _ حسن هادى محمود)
======================

الافكار جميلة وممتازة
لكن المشكلة انى فى البرمجة لا امتلك غير ال 9 دروس لمهندس احمد سمير
يعنى بالظبط معرفتى بالبرمجة تعتبر زى معرفتكم بالهيروغليفى بالظبط .
((((بس بنحاول هههههههه ))))
بالنسبة لتعدد ال buffers فكرة ممتازة وهى بالفعل تم استخدامها فى موضوع المهندس عبد السلام عندما استخدم برنامجك السابق وتم ربطة بالكومبيوتر .
=================
اما بخصوص ال baud rate
لم يتم ذكر الفرق بينهم وهل لهم تاثير على سرعات نقل البيانات ام لا واكيد جاخ بنصيحتك
وانا بالفعل ححتاج سرعة عالية جدا فى النقل لان الداتا اكيد حتكون كبيرة جدا
بحجم الفريم (( اعتقد ان 255 لن تكفينا ربنا يستر ههههههه ))
===============
جارى الان عمل انترفيس بسيط بالفجول بيسك
يتم استخدامة مع المشروع كما هو الان
لعلة يستفيد منة من يحتاجة
===============
طبعا هذا بعد اذن مهندس /حسن هادى


التعديل الأخير تم بواسطة : ناصراحمد2 بتاريخ 19-06-2014 الساعة 12:42 AM


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