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

   

yac100
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2007
الدولة: فلسطين - غزة
المشاركات: 140
نشاط [ yac100 ]
قوة السمعة:
قديم 03-04-2012, 12:17 AM المشاركة 105   
افتراضي



ماشاء الله علي الشرح الرائع والمتميز
جعله في ميزان حسناتك
يا مهندسنا الغالي

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-04-2012, 01:16 AM المشاركة 106   
افتراضي


ماشاء الله علي الشرح الرائع والمتميز
جعله في ميزان حسناتك
يا مهندسنا الغالي
أخى الكريم

شكرا جزيلا لك

تقدير أعتز به

مع تمنياتى بدوام التوفيق

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-04-2012, 01:21 AM المشاركة 107   
افتراضي


تدريبات متدرجة :

التدريب الأول :

الكتابة التسلسلية



البرنامج التالى مصمم لإرسال الحرف "A" عن طريق القناة التسلسلية للميكروكونترولر PIC بسرعة (معدل) 9600 bps (bits per second) :


كود:
/ *Purpose: This program aims to send over the serial RS232 character "A" & 9600 baud, N, 8, 1 * /
void main () {
UART1_Init(9600); // Initialize UART module at 9600 bps
UART1_Write('A'); // and send "A" via UART
while (1); }


البرنامج السابق له مهمة واحدة هى إرسال الحرف "A" لمرة واحدة عن طريق RS232 بسرعة
9600 bps.
التفاصيل :
الدالة UART1_Init(9600) مهمتها تهيئة موديول UART لبدء عمل الاتصال التسلسلى وتحديد سرعة الاتصال بالقيمة 9600 bps . يمكننا تحديد أى سرعة أخرى مثل :
110, 220, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 56000, 57600
الدالة UART1_Write('A') مهمتها أرسال الحرف 'A' من خلال قناة الاتصال التسلسلى . لاستخدام هذه الدالة لدينا بعض القيود : "هذه الدالة ترسل بايت واحد فقط تسلسليا عند تنفيذها ".
أمثلة صالحة :
كود:
UART1_Write('A');// send the character 'A' is of byte type. UART1_Write (0xFF); // send the value 0xFF of byte type. UART1_Write (256); // send the value 0xFF of byte type.
أمثلة غير صالحة :

كود:
UART1_Write ("F.ABDELAZIZ"); //
الدالة لا تدعم إرسال السلسة النصية بهذا الشكل .


كود:
UART1_Write ("A"); //
لاحظ أن الحرف محاط بعلامتى تنصيص مزدوج وفى لغة السى يعامل هذا الشكل كسلسلة نصية. لإرسال الحرف بالشكل الصحيح يجب وضعه داخل علامة مفردة مثل 'A' ففى هذه الحالة يمثل حرف ببايت .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-04-2012, 01:26 AM المشاركة 108   
افتراضي


التدريب الثانى :
القراءة التسلسلية :
عن طريق استخدام الدالة UART1_Read يمكننا قراة (استقبال) بايت تسلسليا وتخزينه فى الحافز التسلسلى للميكروكونترولر , لكن قبل استخدام دالة القراءة يجب أن نستخدم دالة أخرى وهى الدالة UART1_Data_Ready للتأكد من وجود وتجهيز البايت المراد قراءته . فقبل قراءة الحافز التسلسلى باستخدام الدالة UART1_Read نحتاج لمعرفة ما إذا كان هناك أى بايت ومن أجل ذلك نقوم بإجراء اختبار شرطى بالدالة UART1_Data_Ready بعبارة if .
مثال :


كود:
char rtx; ... if (UART1_Data_Ready () == 1) {// check if there is a byte to read rtx = UART1_Read () // read the byte save in the variable rtx. }
الدالة UART1_Data_Ready عائدها بصفر عندما يكون الحافز فارغ ويكون عائدها بواحد عندما يكون بالحافز بعض البايتات .

البرنامج :
كود:
char uart_rd;
void main() { UART1_Init(9600); // Initialize UART module at 9600 bps Delay_ms(100); // Wait for UART module to stabilize while (1) { // Endless loop 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 } } }


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-04-2012, 01:28 AM المشاركة 109   
افتراضي


التدريب الثالث :
قراءة نص حتى يتم إستقبال التتابع المحدد "OK" لنهاية النص ثم إرسال ما تم استقباله عائدا . يمكنك مثلا استخدام الرمز "#" كمحدد لنهاية النص .
البرنامج :



كود:
UART1_Init(9600); // initialize UART1 module Delay_ms(100); while (1) { if (UART1_Data_Ready() == 1) { // if data is received UART1_Read_Text(output, "OK", 10); // reads text until 'OK' is found UART1_Write_Text(output); // sends back text } }


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-04-2012, 01:32 AM المشاركة 110   
افتراضي


التدريب الرابع :

الغرض :

يتيح المترجم ميكروسى برو إرسال بيانات سواء فى شكل "بايت لحرف" character أو فى شكل "سلسلة نصية" text . الحرف يمكن أن يكون أحد القيم من 0 إلى 255 ولكن النص هو سلسلة من الحروف .



الدائرة الكهربية









البرنامج :

هذا البرنامج البسيط يقوم بإرسال حرف (أو عدد أقل من 256) .



كود:
unsigned char read=0 Void main(){ uart1_init(9600); while(1){ if (uart1_data_ready()==1){ read=uart1_read(); uart1_write(read); } } }
أما البرنامج التالى فيقوم بقراءة سلسلة من الحروف ثم إعادة إرسالها بعد إنهائها بالرمز "#" :

كود:
char txt[10];
void main(){ uart1_init(9600); while(1){
if (uart1_data_ready()==1){ uart1_read_text(txt,"#" ,255); uart1_write(10); uart1_write(13); uart1_write_text(txt); } }




الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-04-2012, 01:35 AM المشاركة 111   
افتراضي


التدريب الخامس :
برنامج اتصال تسلسلى الغرض منه توصيل أو فصل ليد متصل بالطرف RD0 تبعا للبايت المستقبل تسلسليا . عندما يكون البايت المستقبل هو الحرف "a" يضىء الليد وعندما يكون البايت المستقبل هو الحرف "b" ينطفىء الليد . فى البداية يكون الليد فى حالة الفصل .

الدائرة الكهربية :

البرنامج :

كود:
/* Purpose: This program aims to ON the LED when PIC receives character 'a' through the serial and OFF the LED when it receives the byte 'b' serial. Speed: 9600, 8, 1, N Crystal: 4MHz */ void main () { unsigned short int dt; TRISB.F0 = 0; // set pin as output RD0 PORTB.F0 = 0; // led off UART1_Init (9600); // set baud rate to 9600 bps do { if (UART1_Data_Ready ()) { // check if a byte arrived at the serial buffer dt =UART1_Read (); // reads the byte buffer and saved in the variable dt UART1_Write (dt); // send the value of the serial byte received // Also known as echo, usually // reship the byte received as confirmation of // receive for the transmitter } switch (dt) { case 'a': // if the byte received is the character 'a', then .. PORTB.F0 = 1; // led ON break; // end switch condition case 'b': // if the byte received is the character 'b', then .. PORTB.F0 = 0; //LED OFF break; // end switch condition } }while (1); }

النتائج:



الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 03-04-2012, 01:42 AM المشاركة 112   
افتراضي


التدريب السادس
الغرض :
قراءة قناة تناظرية وتحويل النتيجة إلى سلسلة نصية وإرسالها إلى الكومبيوتر خلال المنفذ التسلسلى بسرعة 9600bps .
الدائرة الكهربائية :





البرنامج :
كود:
/* UART - ADC Tutorial 1-modification */
unsigned char text[4];// string array :5 position : 4 for ADC result 1023 ,and one for '\0' int temp = 0; // store ADC result , can use unsigned = 0 .. 65535 void main() { Uart1_Init(9600); while(1){ temp = Adc_Read(0); //ad0 and channel pic and save value in vari ? sible temp_res0 IntToStr(temp,text); // conversion converts the value of the string to ad0 UART1_Write_Text(text); UART1_Write(13); Carriage Return //UART1_Write(10); Form feed
//Uart1_Write('\n');





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