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

   

TIME0
:: مهندس جيد ::
تاريخ التسجيل: Mar 2012
المشاركات: 277
نشاط [ TIME0 ]
قوة السمعة:
قديم 27-08-2018, 02:57 AM المشاركة 9   
افتراضي



كود:
char output[4]={65,66,67};
void main(){
TRISB.F0 = 0 ;
UART1_Init(9600);
Delay_ms(100);

while (1) {
  if (UART1_Data_Ready() == 1) {
    UART1_Read_Text(output, "ABC", 10);

 }
 if(output[0] == 'A' && output[1] == 'B' && output[2]== 'C') PORTB.F0 = 1 ;
 else PORTB.F0 = 0 ;
}
}
حاولت ان اجرب ان استلم ABC ولكن ما اشتغل ما الخطا بالكود

وبالنسبه للمصفوفه كيف اضع هذا الارقام
161 000 021 127 074 129 127 129 000
A1 00 15 7F 4A 81 7F 81 00

وكيف استلمها
حاولت اضع في المصفوفه بعض الارقام واحولها هكس ديسمل ولكن الميكرو لم يقبل بعضها
مثال 079 اعطاني خطا

هل من مثال حتى نتعلم جميعا


التعديل الأخير تم بواسطة : ماجد عباس محمد بتاريخ 27-08-2018 الساعة 08:36 AM
اعلانات

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 27-08-2018, 11:20 AM المشاركة 10   
افتراضي


كود:
char output[4]={65,66,67};
void main(){
TRISB.F0 = 0 ;
UART1_Init(9600);
Delay_ms(100);

while (1) {
  if (UART1_Data_Ready() == 1) {
    UART1_Read_Text(output, "ABC", 10);

 }
 if(output[0] == 'A' && output[1] == 'B' && output[2]== 'C') PORTB.F0 = 1 ;
 else PORTB.F0 = 0 ;
}
}
حاولت ان اجرب ان استلم ABC ولكن ما اشتغل ما الخطا بالكود
أولا انت تستلم من أين؟؟
هذا يجب أن يكون كود ارسال على ميكرو و كود استقبال على ميكرو آخر و تربط مخرج المرسل بمدخل المستقبل أو تستخدم أحد برامج الحاسب لكى يستخدم كمرسل أو كمستقبل
الكود الذى كتبته يرسل فى سطر للخارج و يستقبل من مكان غير متصل بالميكرو
فكيف يقرأ؟؟
وبالنسبه للمصفوفه كيف اضع هذا الارقام
161 000 021 127 074 129 127 129 000
A1 00 15 7F 4A 81 7F 81 00
هكذا الارقام العشريه
كود:
const char msg1[] = {161, 0, 21, 127,74,129,127,129 '\0'};
وهكذا بالهكسا
const char msg1[] = {0xA1, 0, 0x15, 0x7F,0x4A,0x81,0x7F,0x81, '\0'};
لاحظ أن الرقم الأخير '/0' يمكنك استبداله بصفر فقط
وكيف استلمها
إما بالطريقة السابقة التى شرحتها فى رد سابق أو
فى ملف المساعدة ستجد وظيفة
void UART_Read_Text(char *Output, char *Delimiter, char Attempts);

قد تساعدك
حاولت اضع في المصفوفه بعض الارقام واحولها هكس ديسمل ولكن الميكرو لم يقبل بعضها
مثال 079 اعطاني خطا
هل من مثال حتى نتعلم جميعا
لهذا كررت لك كثيرا حاول أن تتعلم من كورس لتعلم كيف تدخل الأرقام
انت لا تحول لهكس ولا شيء
فى الكود السابق وضعت لك نفس التعريف مرة باستخدام ارقام عشرية و مرة هكسا و سبق أن قلت لك انت تستخدم النظام الأسهل لك فى الفهم فحين تتعامل مع منفذ قد يكون الأسهل الثنائى حتى تربط كل بت بالطرف المناظر و حين تتعامل مع قيم فالعشرى أكثر فهما و قبولا أما فى التحكمات فقد يكون أيها بما فى ذلك الهكسا اقرب للفهم كأن تقول FF تعنى الكل آحاد خلاف 255 قد تشك هل البت صفر = 1 أم صفر وهكذا
أما مثال 079 الذى أعطى خطأ فمرة أخرى إقرا لتعلم كيف تدخل الأرقام
بعض المترجمات ستعتبر هذا الرقم عشرى و يساوى 79 و البعض مثل ميكرو سى يجد صفر فى الأول فيعتبر أنه نظام آخر غير العشرى ولا يجد حرف بعد الصفر الأول ليحدد له أى نظام فيعطى لك رسالة خطأ ولو أعدت كتابته 79 سيقبله على أنه عشري = 79 ولو أضفت x بعد الصفر 0x79 سيعتبره هكسا أى = 121 عشرى
كيفية ادخال الارقام فى ملف المساعدة لو لا تريد كورس


التعديل الأخير تم بواسطة : ماجد عباس محمد بتاريخ 27-08-2018 الساعة 12:43 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

TIME0
:: مهندس جيد ::
تاريخ التسجيل: Mar 2012
المشاركات: 277
نشاط [ TIME0 ]
قوة السمعة:
قديم 27-08-2018, 01:03 PM المشاركة 11   
افتراضي


const char msg1[] = {161, 0, 21, 127,74,129,127,129 '\0'};

هل استلم هذه الارقام بنفس الطريقه
if(output[0] == '161' && output[1] == '0' && output[2]== '21') PORTB.F0 = 1 ;
else PORTB.F0 = 0 ;
هل يوجد كود اسهل


129 '\0'};
وماذا يعني هذا الرقم بالاخير "0 "

(output, "ABC", 10);
ورقم عشره ماذا يعني


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 28-08-2018, 10:41 AM المشاركة 12   
افتراضي


هل استلم هذه الارقام بنفس الطريقه
كود:
 if(output[0] == 'A' && output[1] == 'B' && output[2]== 'C') PORTB.F0 = 1 ;
 else PORTB.F0 = 0 ;
هل يوجد كود اسهل
أجل هذا أحد الحلول و إن كان غير احترافى و بطيء
المشكلة أن هذه الأرقام ليست كلها أحرف و لست خبيرا فى ميكرو سى لمقارنة هذه المصفوفات بسهولة
لكن فى باسكوم بيزك يمكنك أن تسمى ذات الأماكن من الذاكرة بتعريفين أحدهما اسم مع مصفوفة و الآخر كنص و بذلك تستقبل على مصفوفة ثم تقارن كنص بسهولة
أرجو ممن لديه الخبرة التكرم بحل هذا الأمر
وماذا يعني هذا الرقم بالاخير "0/"
توجد فى ميكرو سى علامتان تنصيص واحدة مفردة وهى ’ و تحيط خانة واحدة تعرف على أنها بايت و الأخرى المزدوجة " وهى تحيط نص قد يكون عدد حتى 255 حرف
هذه علامتان مفردتان تحيطان بالشرطة المائلة ثم صفر فكأنك تقول للمترجم ضع فى هذه البايب القيمة صفر
ورقم عشره ماذا يعني
معذرة لا اعلم من اين هذا الأمر
(output, "ABC", 10);



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