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

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

somood
:: مهندس جيد ::
تاريخ التسجيل: Jan 2011
الدولة: نابلس
المشاركات: 222
نشاط [ somood ]
قوة السمعة:0
قديم 21-07-2012, 12:29 PM المشاركة 1   
افتراضي مساعدة في intrrupt في برنامج mikroC pro for pic32 Twitter FaceBook Google+



السلام عليكم
كنت قد انجزت مشروع تحكم عن بعد بسلكتور رافعة وذلك بأستخدام RF module و البيك 16f877a حيث يتم التحكم عن طريق نبضات pwm ولكن لأن هذه العائلة لا تدعم اكثر من قناتين PWM فقد اشتريت kit pic32 جاهزة ونزلت برنامج الميكروسي الخاص بها وجربت عليها بعض الاكواد لتشغيل واضائة الليدات بأشكال مختلفة ونجحت التجربة ولك عندما حاولت اجهز عليها المشروع المذكور اعلاه واجهتني مشكلة حيث اني كنت استخدم في مشروعي مقاطعة uart receive بحيث عندما يستقبل البيك اي بيانات فورا يقوم بمعالجتها ..... الان حاولت ان عمل هذه المقاطعة على mikroC pro for pic32 مستخدما بذلك الاداة الموجودة بالبرنامج الخاصة بالمقاطعات ورجعت للداتاشيت وعلى ما اعتقد اني نجحت في استخراج البيت الخاص بتفعيل المقاطعة الخاصة وايضا البيت الخاص بعلم المقاطعة
ولكن لم يعملمعي الكود مع العلم ان البرنامج ترجمه بدون اخطاء فلم اعرف هل المشكلة من الضبط الخاص بالميكرو من حيث ضبط الكرستالات والمقسمات والى اخره ام ان برنامجي به خطا مع العلم ان نفس البرنامج المحتوي على كود المقاطعة به كود اخر وكان يعمل

والتالي برنامج كنت اجرب عليه حيث هو من ملف المساعدة ولكن اضفت عليه المقاطعة ... الميكرو هو pic32mx460f512l
كود:
char uart_rd;
   void uart_receive() iv IVT_UART_1 ilevel 7 ics ICS_SRS {

   if (UART1_Data_Ready()) {     // If data is received
      uart_rd = UART1_Read();     // read the received data
      UART1_Write(uart_rd);       // and send data via UART
      }
      U1RXIF_bit=0;
}
void main() {

  CHECON = 30;
  AD1PCFG = 0xFFFF;

  UART1_Init(9600);              // Initialize UART module at 9600 bps
  Delay_ms(100);                  // Wait for UART module to stabilize

  UART1_Write_Text("Start");
  UART1_Write(13);
  UART1_Write(10);
  
   U1RXIE_bit=1;
   U1RXIF_bit=0;

}

اعلانات

الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:92
قديم 21-07-2012, 04:46 PM المشاركة 2   
افتراضي


بسم الله الرحمن الرحيم
اخى انا لم ارى كلمة تدل على التكرار الى ملانهاية مثل
كود:
while(1){}
او
كود:
for(;;){}
وبهذا لا يعمل البك مطلقا لانة سوف ينتهى من البرنامج فى زمن سريع جداااا
ومش هيرجع للاعادة تانى

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

وللعلم انا لم اتعامل مع هذا النوع من البكات من قبل
ولكن هذه ملاحظاتى على الكود

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

somood
:: مهندس جيد ::
تاريخ التسجيل: Jan 2011
الدولة: نابلس
المشاركات: 222
نشاط [ somood ]
قوة السمعة:0
قديم 22-07-2012, 06:11 AM المشاركة 3   
افتراضي


شكرا لأهتمامك

كود:
 void uart_receive()
هذه دالة مقاطعة ويجب ان تنفذ الاوامر عند كل مقاطعة وبالتالي لا تحتاج الى جمل تكرار ...
عندما يكون برنامجك طويل او اذا كان فيه اي جملة انتظار ... فماذا سيحصل للبيانات المستقبلة اذا كان على البرنامج ان ينفذ جمل التاخير الزمني ثم يعود لمعالجة هذه البيانات من خلال سير البرنامج الطبيعي علما ان هذه البيانات تكون بالالاف في الثانية


somood
:: مهندس جيد ::
تاريخ التسجيل: Jan 2011
الدولة: نابلس
المشاركات: 222
نشاط [ somood ]
قوة السمعة:0
قديم 22-07-2012, 08:54 AM المشاركة 4   
افتراضي


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

كود:
 char uart_rd;
  void uart() iv IVT_UART_1 ilevel 7 ics ICS_SRS {

   if (UART1_Data_Ready()) {     // If data is received
      uart_rd = UART1_Read();     // read the received data
      UART1_Write(uart_rd);       // and send data via UART
    }
      LATE=~LATE;
      U1RXIF_bit=0;
       }
       bit a;
void main() {

  CHECON = 30;
  AD1PCFG = 0xFFFF;
  TRISE=0;
  UART1_Init(19200);              // Initialize UART module at 9600 bps
  Delay_ms(100);                  // Wait for UART module to stabilize

  UART1_Write_Text("Start");
  UART1_Write(13);
  UART1_Write(10);
  
    EnableInterrupts();
    U1RXIE_bit=1;
    U1RXIF_bit=0;

    U1IP0_bit=1;     // ضبط برويتي
    U1IP1_bit=1;
    U1IP2_bit=1;

}

إضافة رد

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

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

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


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

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