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

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

استخدام الموديول 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 :



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

الكود:


#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

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

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

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

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


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