منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

استخدام الموديول USART لتحقيق الاتصال التسلسلى بين PIC و PIC :

اذهب الى الأسفل

استخدام الموديول USART لتحقيق الاتصال التسلسلى بين PIC و PIC :  Empty استخدام الموديول USART لتحقيق الاتصال التسلسلى بين PIC و PIC :

مُساهمة من طرف Admin في الإثنين مايو 04, 2015 12:59 am

استخدام الموديول USART لتحقيق الاتصال التسلسلى بين PIC و PIC :
يتم إعداد هذا الموديول باستخدام التوجيه #use RS232(options) . هذا التوجيه يسمح بإعداد البارامترات (options) المختلفة للموديول USART مثل : سرعة الإرسال ، الأطراف المستخدمة ، وغيرها . يجب استخدام التوجيه #use delay لأنه يدخل فى حسابات الدوال الأخرى مثل getch , putchar , printf .

تدريب : تحقيق الاتصال بين ميكروكونترولر PIC وميكروكونترولر PIC آخر باستخدام الموديول USART :

استخدام الموديول USART لتحقيق الاتصال التسلسلى بين PIC و PIC :  126

برنامج الميكروكونترولر المرسل :

الكود:


#include <16F876.h>
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7) // Define speed and pins
#include <LCD.C>
#define use_portb_lcd TRUE

void main() {

  int value;

  lcd_init();
 
while(1){
  for (value=0;value<10;value++) {
    PUTC(value);
    printf(lcd_putc,"\fSend=%1D",value);
    delay_ms(500);
      }
    }
}

فى هذا الجزء من البرنامج والذى يتم تحميله على الميكروكونترولر المرسل :
يتم استخدام التوجيه #use rs232 ويجب تحديد معدل البود (سرعة تبادل البيانات) ، بالصيغة baud=9600 ، وتحديد طرف الإرسال ، بالصيغة وهو هنا xmit=pin_c6 ، وطرف الاستقبال بالصيغة rcv=pin_c7 ، وجميعها وسائط للتوجيه السابق وبهذا نخبر المترجم حتى يقوم إعداد الاتصال التسلسلى . هذا التوجيه يجب أن يكون مسبوقا بالتوجيه #use delay ، والذى يحدد معدل الساعة فى النظام المستخدم .
يقوم البرنامج بإرسال قيمة المتغير value عبر المنفذ التسلسلى (المعد مسبقا بالتوجيهات) باستخدام الدالة PUTC(value) حيث يرسل تباعا القيم 0,1,2…..9 . كما يتم عرض هذه القيم على وحدة LCD متصلة بنفس الميكروكونترولر باستخدام الدالة printf() .

برنامج الميكروكونترولر المستقبل :

الكود:


#include <16F876.h>
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)
#define use_portb_lcd TRUE
#include <LCD.C>

int value;

#int_RDA
RDA_isr()
{
 value=GETC();
}

void main() {

  lcd_init();
 
  enable_interrupts(INT_RDA);
  enable_interrupts(GLOBAL);

for (;;) {
    lcd_gotoxy(1,1);
    printf(lcd_putc,"Receive=%1D",value);
  }
}


فى هذا الجزء من البرنامج والذى يتم تحميله على الميكروكونترولر المستقبل :
• يتم إعداد المنفذ التسلسلى كما فى الجزء السابق .
• يستخدم البرنامج المقاطعة بالاتصال التسلسلى ( عند توافر بيانات مستقبلة) ، ويعلن عن ذلك بالتوجيه #int_RDA والدالة التى تأتى بعده مباشرة هى روتين خدمة هذه المقاطعة RDA_isr() ، وفيها نحصل على الحرف المتواجد على المنفذ التسلسلى باستخدام الدالة value=GETC() .
• فى الدالة الرئيسية يتم تمكين هذه المقاطعة وكذلك تمكين المقاطعات عامة .
• تستخدم الدالة printf() لعرض البيانات المستقبلة على وحدة LCD المتصلة بالميكروكونترولر المستقبل .

Admin
Admin

عدد المساهمات : 1187
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى