الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[مخالف - طلب حل : ]تكفووووووون ساعدوني

مغلق
بدأه hatem03 في 6 يناير 2009 · 3 رد · 415 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

حبايبي تكفون أبي كود C++ يرسل hexadecimal عير السريال بورت عشان أرسلها لمايكروكنتروللر

الطريقة ( يقوم المستخدم بإدخال رقم 1 فيرسل البرنامج هكسادسمال نمبر للمايكروكنتروللر) جزاكم الله خيرا

تم تعديل هذه المشاركة بواسطة hatem03 في 6 يناير 2009 في 17:48

#2

بســم الله الـرحمــن الرحيــم

اخي الكريم للتعامل مع السيريل بورت استخدم الدوال المضمنة في الملف الرأسي winbase.h

الدالة CreateFile لفتح البورت والدالة WriteFile لارسال البيانات والدالة ReadFile لاستقبال البيانات

واستخدم التركيب DCB لاعداد baudrate و Parity و Stopbits وباقي الاعدادات كما يمكن

استخدام الدالة BuildCommDCB("baud=115200 parity=N data=8 stop=1", &dcb);

مباشرة لاعداد خصائص البورت كوم

وعادة يتم بدء الاتصال بهذه القيم COM1: baud=1200 parity=N data=8 stop=1

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

ولكن يحبذ وضع بروتوكول معين للاتصال بالجهاز مثلا لا يتم الاستقبال والارسال الا بعد استقبال اشارة معينة

وهذا كنوع من الحماية للمايكروكنترولر الذي تريد الاتصال به

وهذا مثال بسيط لارسال بايت واحد عبر البورت كوم 1

#include <windows.h>
//#include <winbase.h> // <windows.h> مضمن في 

#include <iostream>
using namespace std;


int main()
{
 HANDLE hnd; // التصريح عن مقبض للبورت
 DCB	dcb; // التصريح عن تركيبة خصائص البورت

 char* PortNo ="COM1"; // رقم البورت
 DWORD WrittenBytes  ; // متغيير تعود به دالة الكتابة

 char DataToSend	 ; // التصريح عن متغيير توضع فيه البيانات المطلوب كتابتها
 DataToSend = 0X01   ; // اسناد قيمة 01 هيكس للمتغيير

 // تعيين المقبض للبورت كوم 1
 hnd=CreateFile (PortNo,
	GENERIC_READ | GENERIC_WRITE ,
	0 ,
	0 ,
	OPEN_EXISTING,
	0 ,
	0 );

 // BuildCommDCB تعين بعض خصائص البورت كوم ويمكن استخدام الدالة   
	dcb.BaudRate= CBR_115200;
 dcb.fParity=NOPARITY; // or dcb.fParity=0; // 0-4=no,odd,even,mark,space 
 dcb.StopBits=1;		// or  0,1,2 = 1, 1.5, 2 
 dcb.ByteSize =8;
 dcb.StopBits=ONESTOPBIT;
 dcb.DCBlength = sizeof(DCB);

cout << "dcb.BaudRate " << (int) dcb.BaudRate << endl;
cout << "dcb.fParity  " << (int) dcb.fParity  << endl;
cout << "dcb.StopBits " << (int) dcb.StopBits << endl;
cout << "cb.ByteSize  " << (int) dcb.ByteSize << endl;


SetCommState(hnd, &dcb); // اسناد الخصائص للبورت

// ارسال القيم للبورت
WriteFile(hnd, // مقبض البورت
	&DataToSend, // البيانات المطلوب ارسالها
	sizeof DataToSend, // حجم البيانات المرسلة
	&WrittenBytes, // عدد البايتات المرسلة
	0); // التاكد من ارسال كل البيانات قبل رجوع الدالة

CloseHandle(hnd); // اغلاق البورت
 return 0;
}

راجع هذا الرابط ايظا

من هنا

واي استفسار انا جاهز

تحياتي

تم تعديل هذه المشاركة بواسطة haty في 7 يناير 2009 في 04:55

while( "اسلام" )
{
 cout >> "الموت لبني صهيون" >> endl;
}
return "فلسطين";
#3

يا هلا و غلا أخوي haty

شرحك جميل و وفيت و كفيت

لكن لو تكتبلي مثال صغير كامل لإرسال hex. no. علشان تثبت المعلومة و توضح أكثر و أكثر

أدري اني ثقلت عليك بس تحملني

#4

الأخ الكريم/الأخت الكريمة

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

مرحباً بكم في منتدى الفريق العربي للبرمجة

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

قواعد طرح المشاركات

/index.php?showtopic=29343

شاكرين لكم حُسن تعاونكم

هذا الموضوع مغلق.

مواضيع مشابهة