Professional Documents
Culture Documents
Introduction………………………………………………………….. (4)
Programming…………………………………………………………. (78)
Input & output devices ……………….…………………………. (618)
باختصار انك تستطٌع التحكم فى اى شئ فى هذا العالم باستخدام هذه القطعه التى التتجاوز العده
سنتٌمترات
الخالصة :
ٌستحب استعمال ال microprocessorفى اجهزة الحاسب المكانٌة التؽٌٌر فٌها
بمواصفات احسن وٌستحب استخدام المٌكروكنترولر فى باقى التطبٌقات تقرٌبا النها ذو برنامج
ثابت مثل التكٌٌؾ ال ٌحتاج الى تحدٌث .
ق
ب
ل
م
ا
ن
ت
ك
ل
م
انواع MEMORY
volatile memory-1
non volatile memory-2
انواع ذاكرة الوصول العشوائً ٌمكن تصنٌؾ ذاكرة الرام الى نوعٌن اساسٌٌن وهما :
ذاكرة الوصول العشوائً االستاتٌكٌة Static RAM: SRAM
الذاكرة االستاتٌكٌةSRAM
ٌتم تخزٌن البٌانات فً الذاكرة االستاتٌكٌة فً دوائر منطقٌة تسمى flip-flopحٌث ان كل بت
تخزن فً دائرة flip-flopتتمٌز بسرعتها وعدم حاجتها النعاش كهربائً بٌن الفٌنة واالخرى
لضمان استمرار البٌانات فٌها لكنها مرتفعة الكلفة لذلك فانها ؼٌر مستخدمة كذاكرة اساسٌة
بالحاسوب ومن اشهر استخادمات هذا النوع تسمى الذاكرة المخبئٌة )ذاكرة الكاش ) .
فً هذا النوع من الذاكرة فان كل بت ٌتكون من مكثؾ وترانزستور حٌث انها تحتاج النعاش
كهربائً بٌن الفٌنة واالخرى فان فرؼت طاقة المكثؾ فانه الترانزستور ٌقفد القٌمة المخزنة فٌه ،
ٌكون هذا النوع من الذاكرة ابطئ من الذاكرة االستاتٌكٌة لكنها اقل تكلفة واكثر استخداما وانواعا ً
حتى انه اصبح المصطلح ٌ RAMدل على ذاكرة الوصول العشوائً الدٌنامٌكة.
و pic microcontroller
بتسخدم نظام الharvard
وهً الذاكرة بالرام أو ذاكرة الوصول العشوائى والتً تحفظ فٌها التؽٌرات التً تتم فً السجالت
)(Registersأثناء تشؽٌل البرنامج ،وٌمكن القول بأنها خاصة ببٌانات المٌكروكنترولر والتى
ٌقوم باستخدامها أثناء تنفٌذ البرنامج مع األجهزة المتصلة به والذاكرة المؤقتة سمٌت بذلك ألنها
تفقد وتمحً كل بٌاناتها عند انقطاع التؽذٌة الكهربٌة عنها .
وتبلػ سعتها 368 bytes
هى الخصائص الكهربٌة التى بتعامل بها مع المٌكرو بمعنى الجهد اللى بدخلة للمٌكرو وكذلك
التٌار الداخل والخارج من المٌكرو .
VDD (positive voltage)>>>>>>>>>>>>-0.3_7.5
الجهد الداخل البد أن ٌكون فى هذا ال rangeواال سٌحرق المٌكرو .
VSS (negative voltage)>>>>>>>>>>>>>zero
التٌار سواء ٌ sunkعنى داخل أو ٌ sourcedعنى خارج ال ٌزٌد عن . 25mA
PDIP
األرجل تكون فى صفٌن ٌ 20مٌن و20
ٌسار
Through hole mount
بٌكون فٌه holeبتدخل رجل ال ICمنها
وتتلحم من الناحٌة االخرى
TQFP
Thin quad flat package
تكون مثبته على السطح
Surface mount
مش بتنفع فى الشؽل العادى النها محتاجه PCB
ٌوجد فى هذا النوع 4رجول مش مستخدمه مكتوب
علٌها NCالن ال standardلهذة ال packageفى التصنٌع انها . pin 44
2_Oscillator 20MHZ
ٌ _2وجد فى التركٌب الداخلى للمٌكرو counters & registersومن المعروؾ انها تعمل
ب clockوهذة ال clockعبارة عن digital signalلها تردد معٌن أقصى قٌمة تردد
بداخل المٌكرو pic16f877aهو 20MHZولهذا عند شراء كرٌستاله لكى تولد clock
pulsesنشترٌها 20MHZأو أقل والشائع
استخدامه هو ال . 4MHZ & 8MHZ
3_Currents 25mA
_3أقصى تٌار داخل ٌتحمله المٌكرو وأقصى تٌار خارج منه هو 25mAوهذا مهم جدا معرفته
وخاصة فى دوائر ال relay interfaceوسٌتم ذكرها الحقا .
PORTA -1
بالمنفذ )PORTA
BللمٌكروكونترولرPIC16F877A .
األطراف ٌ RB0-RB7مكن أن تستخدم كمداخل رقمٌة.
CللمٌكروكونترولرPIC16F877A .
األطراف ٌ RC0-RC7مكن أن تستخدم كمداخل رقمٌة.
إمكانٌة نظام التعدٌل فى عرض النبضات على باألطراف RC1وRC2 .
ٌحتوى المنفذ PORT Cأٌضا على إمكانٌة لالتصال التسلسلىUSART .
CللمٌكروكونترولرPIC16F877A .
األطراف ٌ RD0-RD7مكن أن تستخدم كمداخل رقمٌة.
بالمنفذ(PORT E
o Peripheral Features:
1. timers:
Timer0: 8-bit timer/counter with 8-bit prescaler
Timer1: 16-bit timer/counter with prescaler, can be
incremented during Sleep via external crystal/clock
Timer2: 8-bit timer/counter with 8-bit period register,
prescaler and postscaler
2. Two Capture, Compare, PWM modules
Capture is 16-bit, max. resolution is 12.5 ns
Pin1 :
مكتوب علٌها MCLRفهى تشٌر إلى MASTER
CLEARبمعنى انه بٌعمل ٌ resetعنى لو ال
PICبٌقوم بتنفٌذ برنامج معٌن وعملت reset
هٌقوم بتنفٌذ البرنامج من االول وهذة ال pin
active lowبمعنى أنها لكى تعمل اضعها على
low voltageاى ) (0vلكن لكى ال تعمل اضع
علٌها ٌ VCCعنى 5vطب دلوقت انا عاوز ال
pin1لما احب اعمل resetتوصل باالرضى
وبعد كده تكون موصله بال VCCعلطول لذا ٌتم
توصٌلها بهذا الشكل
لما اضؽط على ال ٌ push buttonعمل resetالن ال pin1هٌكون واصل
ارضى لما اشٌل اٌدى من على ال buttonهتكون ال float pinبمعنى اى noise
ممكن تخلٌها highاو lowبس انا عاوز لما اشٌل اٌدى تكون موصله بال VCCلذا اضع
مقاومة مع ال VCCالتٌار المار فى المقاومة قلٌل جداً الن مقاومة الدخل لل pinكبٌرة جداً
PIN32/PIN 11
توصل بال VDDاى +POWER SUPPLYوبٌكون 5V
PIN12 /PIN31
توصل بال ٌ VSSعنى االرضى
المفروض اقل فولت ٌ VDDدخل من ٌ -0.3:7.5عنى لو عكست البوالرتى
لل POWERودخلت السالب على ال VDDفانه المٌكرو ٌبوظ
المفروض ال SUPPLYمش ٌقل عن 4وال ٌزٌد عن 5.5طب لو وضعت
3Vعلى VDDفان ال ICمش ٌبوظ لكن مش ٌشتؽل.
المفروض اضع بٌن الرجل 11و POWER SUPPLY 12ثابت بهذا الشكل
ٌوصل بٌن الرجل 11و 12مكثؾ سٌرامٌكى ٌ 0.1ufشٌل ال noiseاللى جاٌه من اسالك
التوصٌل لل supplyوكذلك بٌن 31و.. 32
ممكن بدل ال adaptorبطارٌة . 9v
ممكن شاحن موبٌل ٌقطع طرفة وٌوصل طرفٌة بروزته لسهولة تركٌبة فى الدائرة .
ممكن power supply of computerوهو االفضل النة ٌعطى تٌار عالى ألن فٌه
componentفى الدائرة بتسحب تٌار عالى زى الرٌالى والمواتٌر فالزم اتاكد ان التٌار اللى
بٌدٌه الباور اللى شؽال بٌه كافى لتشؽٌل الكومبونانت اللى موجودة فى الداٌرة وٌتم حساب ذلك
من العالقة
P=V* I
بقسم جهد تشؽٌل الرٌالى على الباور بتاعته احصل على التٌار اللى بٌشؽله.
عشان كدا التردد الفعلى الى شؽالٌن بٌه بٌبقى هو التردد الكلى بس مقسوم على اربعه
الجزء الهارد وٌر اول حاجه فٌه هو اختٌار نوع المٌكروكنتولر نفسه ودا حسب المتطلبات الى انتا
محتاجها زى ما ذكرنا قبل كدا
تانى حاجه الكومبونانت الى هتوصلها على الماٌكرو والى هتحتاجها فى مشروعك زى الموتور
والسٌنسور وؼٌرهم
وممكن تلخٌص جزء الهارد وٌر الى هتاحتاجها فى اى مشروع كالتالى :
HARDWARE REQUIREMENTS:
1_COMPUTER
2_PROGRAMMER
3_COMPONENTS
ودٌه الكومبونانت االساسٌه الى هنستخدمها فى اى مشروع
Such as :
pic16f877a
C , C++ ,
PASCAL ,
Assembly
BASIC
structure program
مثل
{)(-Void main
}
وهى الدالة الرئٌسٌة التى ٌتم تنفٌذ جمٌع االوامر من
خاللها.
-#define
بٌتم فٌها تخزٌن قٌم لثوابت مثل pi =3.14واٌضا
دوال المٌكرو.
أمثلة :
;k = 50
;i = k+5
2-VARIBALES
وهى اول حاجه بتتحط فى البرنامج بتاعك
ٌعنى مثال لو عندك رقمٌن وعاٌز تجمعهم
هتستخدم 3متؽٌرات )(X,Y,Z
المتؽٌر االول هتدخل فٌه اول رقم
المتؽٌر التانى هتدخل فٌه تانى رقم
المتؽٌر التالت هتدخل فً مجموع الرقمٌن
كل متؽٌر من دول لٌه نوع محدد
فعند تعرٌؾ الدالة ٌجب معرفة نوع نوع البٌانات الراجعة من الدالة سواء أكانت' int , float ,
'char.....etcوعند عدم ارجاع شئ تاخذ الدالة القٌمة' 'voidوٌكتب نوع البٌانات الراجعة قبل
اسم الدالة.وٌجب أن ٌكون اسم وٌفضل ان ٌكون هذا االسم ٌعبر عن وظٌفة الدالة فمثال عند عمل
دالة لتعٌن مكعب رقم ٌكون االسم مثال ' Cubeأو 'get_cubeوالقواعد التى تنظم اختٌار
اسماء الدوال هى نفسها المستخدمة فى اختٌار اسماء المتؽٌرات.
فالدالة السابقة مثال الؽرض منها اضاءة لٌد لمدة ثانٌة واطفاءه ثانٌة أخرى فهى بالتالى ال تحتاج
الى أرجاع قٌمة وال الى معامالت.
-2دالة ال تأخذ معامالت وترجع قٌمة وتكون على الصٌؽة {})( Type nameمثل:
الدالة السابقة مثال الؽرض منها حساب الزمن الذى استمر فٌه الشخص فى الضؽط على الزر فٌتم
ارجاع هذا الزمن الى تم حفظة فى متؽٌر' 'xونوعه' 'intدون استخدام أٌة بارامترات.
الدالة السابقة هى دائرة فالشر كما فى الدالة األولى ولكنها تختلؾ عنها فى انها تعمل لعدد معٌن
ٌحدده المستخدم عند استدعائها بوضع هذا الرقم داخل االقواس)(.
(or)|| -2
)EX: if (x==5 || y==4
}{do that
اى التاكد من ان المتؽٌر االول ٌٌساوى خمسه او المتؽٌر الثانى ٌساوى اربعه
(not)!-3
Y=00000010
q=00000001
&
00000010
_______________
=q
00000000
Y=00000010
q=00000001
|
00000010
_______________
=q
00000011
XOR-3
اذا كان الرقمٌن متشابهٌن ٌكون الناتج 0
X=00110001
Y=10000010
q=00110001
^
10000010
_______________
=q
10110011
Complement-4
)ْْ~(
shift left-5
وتستخدم الزاحه الرقم باتجاه الٌسار
;x=00000100
;Y=x<<2
بٌزٌح خانتٌن من ال 8باتجاه الٌسار وٌضع مكانهم اصفار
;y=00010000
shift right-6
وتستخدم الزاحه الرقم باتجاه الٌمٌن
;x=00000100
;Y=x>>2
بٌزٌح خانتٌن من ال 8باتجاه الٌمٌن وٌضع مكانهم اصفار
{ )If (expression
………………………….
…………………………..
}
لو كان الناتج لل ٌ expressionساوى ٌ 1نفذ الجملة بٌن ال curl bracketsاما لو zero
ٌعدى ال }{ وٌكمل عادى.
{ )If (expression
………………………….
…………………………..
}
{ Else
…………………………….
………………………………
}
لو ٌ trueنفذ اللى بٌن ال curl bracketsالخاص ب ifلو ٌ falseنفذ اللى بٌن ال
curl bracketsالخاص ب else
)(SWITCH
وتسخدم لفعل نفس ما تفعله
IF
) (main
{
; Int i = 2
) switch ( i
{
case 1 :
;do that
; break
case 2 :
;do that
; break
case 3 :
;do that
; break
default :
االمر
;break
ٌستخدم بعد كل حاله
حتى ٌقوم البرنامج بالخروج بعد تنفٌذ الحاله ولٌس تنفٌذ بقٌه الحاالت
التالٌه لها
Initialization
وهو الرقم الى بتبدء بٌه اللوب
مثل
i=0
وٌستخدم كعداد لعدد المرات الى ترٌد تنفٌذ ما بداخل اللوب
-2 condition
وهو الشرط الى على اساسه بٌتم اختبار اللوب
مثل
;i<5
اذا كان الشرط متحقق بٌتم الدخول الى اللوب
وتنفٌذ ما بداخله
ex:
i=0
while(i<5)
{
do this;
i++;
}
مش ٌعمل حاجة ٌمكنfalse ٌفضل ٌنفذ البرنامج لوcondition is true طول ما ال
for بwhile استبدال
ال نهائٌةloop بمعنى انهاfor (;;) تكافئWhile (1)
Ex:
دلوقتى انا عرفت هل الPORT :INPIUT OR OUTPUT
مفروض اعرؾ نوع الخرج الى هٌخرج علٌه
هل هٌكون
لو عاٌز اخلى PORTA:INPUT
هكتب ;TRISA=0b11111111
ٌ 0bعنى انا بكتب بالbinary
لو عاٌز اكتب hex
هكتب 0X
;TRISA=0X1111 1111
لو عاٌز اكتب بالDECIMAL
هكتب ;TRISA=255
)(255=11111111
:EX
لو انا عاٌز ال PINالتالت فى الٌ PORTAكون OUTPUT
هكتب ;TRISA.F3=0
طٌب لو انا عاٌز مجموعه ٌ PINبقو OUTPUTوالباقى INPUT
هكتب TRISA=0B11001100
ال PINSالى علٌها )(0هتبقى OUTPUT
والى علٌها ) (1هبقى INPUT
EX:
TRISA=0B00000000
PORTA=11111111
OUTPUT هٌكونPORTA انا كدا حددت انى
الى فٌهPINS فولت على كل ال1 وهٌخرج
)A
)2
ممكن اختبر الخرج ب ledحٌث ان ال pinبٌخرج منها تٌار تقرٌبا 20mAفلو الخرج
high led is on/ low led is offتقرٌبا لو قرٌنا ال data sheetلل ledهاجد ان ال
ledبٌقع علٌها تقرٌبا voltage dropقٌمته 1.2vلذا ٌوضع مقاومة مع اللٌد تشٌل فرق
الجهد بٌن ال 5فولت وال 1.2قٌمة هذة المقاومة ،أقصى تٌار خارج من ال 25 pinملى
امبٌر هى :
R= (5-1.2)/25mA=152Ω
إذن فإن أقل مقاومة ٌمكن استخدامها بحٌث ال تؤثر على ال pinهً Ω152وٌفضل أن تكون
قٌمة المقاومة أكبر من ذلك لكً ال ٌتم استهالك أقصى قٌمة للتٌار من ال pin
لذا الموجود فى السوق المقاومة 220اوم لذا اضعها قبل اللٌد
ٌخرج من ال pinتٌار صؽٌر عندما ٌمر تٌار فى الملؾ ٌتولد ٌ magnetic waveجذب ال
contactالخاص بال swit chالموجود بال relayوبذلك ٌكون ال switch
closedفٌؽلق الدائرة فٌمر v220طب ال relayمحتاج 30ملى امبٌر واٌضا
12فولت او 6او 34او 22فولت عشان ٌشتؽل حسب نوعه لكن انا هنا بشتؽل ب 12
فولت relayلكن المٌكرو ٌعطى اقصى تٌار 20ملى امبٌر لذا اوصل على ال pinللمٌكرو
مقاومة وترانزستور NPNممكن bc547حٌث ٌدخل من ال baseتٌار صؽٌر اقدراخده
من المٌكرو وٌمر فى ال collectorتٌار أكبر ٌالئم تشؽٌل ال relay
لما تكون ال ٌ pin highمر تٌار فى الترانزستورهٌصل الترانزستور الى حالة ال
saturationوهٌكون بٌن ال emitterوال collectorعبارة عن short circuit
فهٌوصل ارضى للدائرة فٌمر تٌار فى ملؾ ال ٌ relayجذب ال contactوبالتالى ٌصل
http://www.youtube.com/watch?v=srwVRkGes2c
http://www.youtube.com/watch?v=KzxVZgO-iOA
بس قبل ما نبدء فى المشارٌع محتاجٌن نعرؾ ازاى اربط البرمجه الى انا بعملها على الكومبٌوتر
بال PIC
عن طرٌق ال PROGRAMMER
طرٌقة حرق البرنامج على ال : PIC
سنضع ال PICفى جهاز البرمجة كما بالشكل :
من
قائمة fileاختار openثم اختار المشروع اللى عاوزة احرقه ع ال picبامتداد .hex
من settingاختار من oscاختار منها XTوتاكد ان االختٌاران WDTENو LVP
مش علٌهم صح UNCHECKED
المشروع االول
ملحوظات
ملحوظة :
من الممكن أن نضم االوامر الى بعضها دون الحاجة الى أن نضؽط Enter
لكن ال ٌستحب ذلك حتى ٌكون شكل البرنامج منظم وٌسهل مراجعته وفهمه .
ابتدائا كانت اللٌدات مطفٌة ثم جاء االمر بعكس حالة اللٌدات فتضىء ثم تعكس حالتها فتطفى
وهكذا
Push Button
ده برنامج لما اضؽط علً Buttonاالول اللٌد االول ٌنور فقط و لما اضؽط علً ال Button
التانً اللٌد التانً بنور فقط و لما اضؽط علً ال Buttonالثالث ٌنور اللٌد االول و الثانً معا ً .
البرنامج :
نقوم بانشاء مشروع جدٌد وكتابة فٌه هذا الكود .
البرنامج :
وانا بفكر فى البرنامج اوال هخلى PORTBهو الدخل و PORTCهو الخرج و الحالة
االبتدائٌة للٌد مطفً و لما اضؽط علً ال ٌ Bush buttonؽٌر حالة اللٌد لو شؽال ٌطفً و
العكس .
بس فى مشكله دلوقت ان المٌكرو بٌنفذ االمر فى ٌ u secعنى المٌكرو هٌنفذ االمر قبل ما
الشخص ٌشٌل اٌده من ع ال push buttonفمحتاج ان المٌكرو ٌتاخر شوٌة طب الحل ممكن
ٌكون انى اعمل delayبس الفكرة دى مش كوٌسة النى معرفش ال userهٌشٌل اٌده امتى
الحل التانى انى اعمل loopتعمل checkال userشال اٌده وال ال اضٌؾ ع الكود
}{)ٌ While (RB0==0عنى طول ما المستخدم ضاؼط ع ال push buttonافضل ادور
فى loopمن ؼٌر ما تعمل حاجه اول ما ٌشٌل اٌده اعكس حالة اللٌد .
سٌصبح الكود هكذا :
البرنامج :
عاوز انا ٌ registerحتفظ بأخر حالة لٌه لذا هنعرفة على انه unsigned char x=0
اى حالتة االبتدائٌة صفر
عندى 2دخل ال PIR sensorوال switchوعندى خرج واحد وهو اللمبة .
فبالتالى البٌك سٌختبر هل ضؽط على المفتاح أم ال فاذا ضؽط هٌضئ الٌد B0ثم ٌنتظر ثانٌة
وٌختبر هل تم الضؽط على ال SWITCHمرة تانٌة أم ال فاذا تم الضؽط علٌه مرة ثانٌة ٌضئ
اضع شرط ال loopفى اول البرنامج بحٌث ٌفضل ٌلؾ فى لوب لحد ما اضؽط ع المفتاح وٌبدأ
ٌنور ال ledاالولى .
لٌصبح الكود النهائى
الحادي عشر
سنقوم بعمل برنامج ٌقوم بنفس وظٌفة البرنامج السابق لكن بطرٌقة اخرى .
الثانً عشر
فنرى ان ال bitرقم 1سٌحل مكانه ال bitرقم زٌرو وٌحل مكان ال bitرقم زٌرو صفر من
الخارج وهكذا لٌصبح الخرج مع كل shiftكاالتى :
الثالث عشر
الحل :
عندما ٌكون ; portb=00000001ندخلة فى شرط اذا كان ; portb=00000001افضل
لؾ فى لوب لحد ما اى مفتاح ٌتم الضؽط علٌة وذلك عن طرٌق االمر
) {};while (portc.f0==1 && portc.f1==1وقولة اذا ضؽط على ال c1خلى
; portb=0b10000000اذا ضؽطت على c0خلى ;portb=0b00000010
وكذلك عندما ٌكون ; portb=10000000ندخلة فى شرط اذا كان ;portb=0b00000001
افضل لؾ فى لوب لحد ما اى مفتاح ٌتم الضؽط علٌه وقولة اذا ضؽط على المفتاح c0خلى
; portb=0b00000001واذا ضؽطت على c1خلى ; portb=0b01000000وبكده
تكون المشكلة اتحلت .
الكود بعد التعدٌل
الرابع عشر
Binary Counter with Flag
المشروع االول
فكرة المشروع:
عمل جرس لباب عند الضؽط على المفتاح نسمع صوت صفٌر ولما نشٌل اٌدنا ٌقؾ الصوت
طرٌقة التفكٌر فى المشروع :
ٌتم اصدار الصوت بواسطة القطعة االلكترونٌة والمعروفة باسم ال buzzer
على بروتس وٌصدر صوت ٌتم الضؽط علٌه مرتٌن وتعدٌل الbuzzer لكى ٌعمل ال
operating voltage=5v
Load resistance=120
ٌحتاج ال buzzerالى تٌار اكتر من 25ملى امبٌر لكى ٌعمل ولكن ٌخرج من ال pinتٌار
صؽٌر حوالى 15ملى أمبٌر ولكى اشؽل 9 buzzerفولت او 12فال ٌمكننى توصٌل ال
buzzerعلى رجل المٌكرو مباشرة لذا اوصل على ال pinللمٌكرو مقاومة وترانزستور
NPNممكن bc547حٌث ٌدخل من ال baseتٌار صؽٌر اقدراخده من المٌكرو وٌمر فى
ال collectorتٌار أكبر ٌالئم تشؽٌل ال buzzer
لما تكون ال ٌ pin highمر تٌار فى الترانزستورهٌصل الترانزستور الى حالة ال
saturationوهٌكون بٌن ال emitterوال collectorعبارة عن short circuit
فهٌوصل ارضى للدائرة فٌمر تٌار فى ال buzzerفٌصدر صوت صفٌر ,عندما ٌكون
الخرج lowفان الترانزستورسٌصل الى مرحلة ال cutoffوهٌكون بٌن ال emitterوال
collectorعبارة عن open circuitفال ٌصل ارضى للدائرة فال ٌمر تٌار فى ال buzzer
فال ٌصدر صوت .
المشروع الثانى
فكرة المشروع :
نفس فكرة المشروع السابق لكن باستخدام عناصر الكترونٌة )(speaker/buzzer/piezo
تعتمد على التردد وٌتم تشؽٌلها بواسطة موجه مربعه .
كل لٌد من السبعه تسمى سٌجمنت اى شرٌحه النه عندما تضاء تمثل جزء من الرقم ) decimal
(or Hexلٌتم عرضها وهناك لٌد تامن ٌستخدم احٌانا للسماح لالشاره العشرٌه DP
) (decimal pointعند استخدام اتنٌن او اكتر من ال 7 segmentلعرض ارقام اكبر من 9
.
وده شكل بٌوضح كل لٌد ٌعبر عنها حرؾ
---
ممكن استخدم الطرٌقة دى اكتب كل رقم واعمل delayبعدة واعرض اللى بعدٌة
*** لكن هذة الطرٌقة ؼٌر عملٌة وخصوصا لو بعمل مشروع ساعة أو counter
الطرٌقة االحسن باستخدام االمر ……… switch
)(case
هنعمل functionننادى علٌها ندٌها inputوترجعلنا ب outputهنسمٌها count
وهنعرؾ متؽٌر اسمه upله قٌمة ابتدائٌة ب zeroوكل ثانٌة ٌزٌد بمقدار 1مع كل عدة ٌروح
ففى السطر االول من للكود تم إنشاء مصفوفة مكونة من عشر عناصر تمثل ما ٌقابل االرقام من
0الى 9على السٌفن سٌجمنت .وداخل الدالة الرئٌسٌة تم إنشاء حلقة تكرار لعشر مرات بحٌث
فى اول مرة تعرض الرقم 0والمرة التالٌة الرقم 1وهكذا.
ٌمكن التؽلب على مشكلة مساحة الـ' 'RAMمع المصفوفات عن طرٌق استخدام مصفوفة عبارة
عن ثوابت عن طرق اضافة كلة ' 'constقبل نوع المصفوفة فٌتم تخزٌنها داخل الـ'.'ROM
ٌمكنك مالحظة المساحة المستهلكة فى الـ' 'RAMعند استخدام المصفوفة العادٌة وعند استخدام
مضفوفة الثوابت.
-1المصفوفة العادٌة
-2مصفوفة
البرنامج :
حٌث نالحظ ان لها 4مداخل فقط من المٌكرو ..و 8مخارج لل7 segment
لتصنٌع شاشة عرض من البلورات السائلة نستخدم لوحٌن من الزجاج المستقطب للضوء ..وهو
عبارة عن مواد من البولٌمر تحتوي على شرائح مٌكروسكوبٌة )ال ترى بالعٌن المجردة( تؽطً
احد سطحً لوح الزجاج الذي ال ٌحتوي على شرٌحة االستقطابٌ .تم ضبط الشرائح
المٌكروسكوبٌة لتكون فً نفس اتجاه استقطاب الشرٌحة المثبتة على السطح المقابل .تتم بعد ذلك
إضافة طبقة رقٌقة من البلورات السائلة ذات الطور الدوار .تعمل طبقة الشرائح المٌكروسكوبٌة
على توجٌه البلورات السائلة لتصطؾ فً اتجاه تلك الشرائحٌ .تم وضع الطبقة األخرى من
الزجاج ولكن مع التأكد ان شرٌحة االستقطاب عمودٌة على اتجاه استقطاب الشرٌحة األولً.
تترتب الطبقات المتعاقبة من البلورات السائلة ذات الطور الدوار الملتوي بعضها فوق بعض من
بدوران تدرٌجً ٌصل إلى 90درجة بالنسبة لترتٌب الطبقة األولى
عندما ٌسقط الضوء على الشرٌحة الزجاجٌة األولً فإنها تعمل على استقطاب الضوء ،ومن ثم
تعمل جزٌئات البلورات السائلة فً كل طبقة على توجٌه الضوء إلى الطبقة التً تلٌها مع تؽٌر
مستوى استقطاب الضوء .وعندما ٌصل الضوء للطبقة األخٌرة من طبقات البلورات السائلة فإنه
ٌكون مستقطب فً نفس اتجاء جزٌئات تلك الطبقة وبالتالً ٌنفذ الضوء منها
وعند تطبٌق مجال كهربً على جزٌئات البلورات السائلة فإنها ال تلتوي وبالتالً فإن الضوء ال
ٌمكن ان ٌنفذ من الجهة األخرى
.
CHARACTER
LCD
GRAPHICAL
LCD
فى الشاشات االلفا نومٌرٌكال )زى بتاعتنا ٌعنى( نقوم بتوصٌل 4رجول
للداتا فقط اما فى شاشات الكلر والجرافٌك ال بد من توصٌل ال 8ارجل.
Configuration
s
فً بعض االوامر اللً الزم اكتبها فً بداٌة الكود و دي هً البروتوكوالت اللً ال LCD
بٌتبعها مع المٌكرو و االوامر دي بقدر اجٌبها من ال libraryبتاعة ال LCDفً المٌكرو
سً .
االوامر دي مش بتحفظها دي بتجٌبها من المٌكرو سً عن طرٌق الخطوات التالٌة :
– 1هتفتح المٌكرو سً و تضغط F1هتظهرلك الشاشة دي
هتضؽط علً
Index
لو ركزت كده فً االوامر اللً فاتت هتالقً ان دي ال default connectionمعنً كده ان
انا ممكن اغٌر فً ال pinsاللً انا عاٌز اوصل علٌها ال LCDو ده بٌكون علً اساس
المبرمج هو عاٌز اٌه ....طٌب السؤال لٌه ال defaultهو portB؟
)(Lcd_Init
;
٘ٚزا االِش ػثاسج ػٓ داٌٗ اٌرؼش٠ف ا ٜاالِش اٌز٠ ٜخثش اٌّ١ىشٚؤٛرشٌٚش تاْ
ٕ٘ان شاشح عٛف ذشوة ػٍ١ح ٚاْ ٕ٘ان تشٚذٛوٛي ٠جة اذثاػٗ ِغ ٘زٖ
اٌشاشح ف ٝاٌؼًّ .
Lcd_Out
٘زا االِش ٠خشج اٌث١أاخ ػٍ ٝاٌشاشح تّىاْ أد ذذذدج ٠ؼٕ ٌٛ ٝػا٠ض
ذخشج وٍّح ا ٚػذد فِ ٝىاْ ِذذد ِثال اٌصف اٌثأٚ ٝتذا٠ح اظٙاس ٘زٖ
اٌىٍّح ذى ْٛف ٝاٌّشتغ اٌخاِظ ٘زا االِش ِ٘ ٛا ٠فؼً رٌه ٌه .
ٚذٛضغ اٌىٍّح داخً ٘زا اٌشِض "ٕ٘ا ذضغ اٌىٍّح"()double quotations
ِّٙا واْ دجُ اٌىٍّح ٌٚىٓ ارا صادخ ػٓ ػذد ِشتؼاخ اٌشاشح فٍٓ
٠ظٙش اٌثم١ح ّ٠ٚىٕه ا٠ضا وراتح وٍّح داخً ِرغ١ش ثُ وراتح اعُ اٌّرغ١ش
داخً ٘زا االِش ٛ٘ٚعٛف ٠ؼشض اٌىٍّح اٌر ٝداخً ٘زا اٌّرغ١ش
ِثال ارا اسدٔا اظٙاس وٍّح Helloف ٝاٌصف االٚي اٌؼّٛد اٌغاتغ ذىْٛ
٘ىزا :
;(”Lcd_Out)1, 7, “Hello
Lcd_Chr
دٖ ِثً االِش ) (Lcd_Outتاٌضثظ ٌىٓ اٌفشق أٗ ت١ظٙش دشف ٚادذ تظ ٚ
ترىرثٗ تٓ١
‟ ٚ „Single quotationترذ ٍٗ٠سلُ اٌصف ٚاٌّشتغ اٌٍ١٘ ٟثذا ِٕٗ .
Lcd_Chr_Cp
دٖ ِثً االِش ) (Lcd_Out_Cpتاٌضثظ ٌىٓ اٌفشق أٗ ت١ظٙش دشف ٚادذ
تظ ٚترىرثٗ تٓ١
‟ ٚ „Single quotationت١ظٙش فة اٌّىاْ اٌٍ ٟاٌّؤشش ٚالف ػٕذٖ .
٘زا االِش ٌ٘ ٛىراتح اشىاي ٚاػطاء اٚاِش ٌٍشاشح تّؼٕ ٝأٗ ارا اسدخ ِغخ اٌشاشح اٚ
ذذش٠ه اٌّؤشش ا ٚذذشن اٌىٍّاخ ػٍ ٝاٌشاشح ا ٚا ٚا ٚا ٚاٌ ٝاخش االٚاِش..
والحظ ان الرجل رقم 1على أقصى الٌسار والرجل رقم 16على اقصى الٌمٌن
8بينات 3بينات
5بينات نم power
نمdata نمcontrol
ثانٌا :
االرجل 7,8,9,10ؼٌر موصلٌن النى بشتؽل على 4 bit modeبنقل الداتا 4 bitب 4
bitوحٌث أن ال charبٌكون 4 bitفبٌتم ارسال الداتا على مرتٌن دون الشعور بالفرق الن
سرعة المٌكرو كبٌرة أما لو بشتؽل على ال 8 bit modeباستخدم ال data busكلها لذا
فانه فى ال 4 bit modeفان pin 7,8,9,10بتكون leave openوال pin
11,12,13,14بتكون . in use
فى الشاشات االلفا نومٌرٌكال )زى بتاعتنا ٌعنى( نقوم بتوصٌل 4رجول يهحٌظة
للداتا فقط اما فى شاشات الكلر والجرافٌك ال بد من توصٌل ال 8ارجل.
يهحٌظة :
ان هذه االوامر ثابتة وما ٌتؽٌر فٌها هو االرجل التى سوؾ تربط بها البك بالشاشة وهى
هنا ستجد ان كل طرؾ من الشاشة مكتوب بجواره اسم الرجل التى سوؾ ٌربط معها من المٌكرو
مثال
LCD_RS at RB4_bit
هنا طرؾ الشاشة وهو LCD_RSسوؾ ٌربط مع الطرؾ RB4اى الطرؾ رقم 4فى
البورت Bفى المٌكرو وهكذا واذا اردت مثال تؽٌر مكان تركٌب االطراؾ فؽٌر فى الجزء
الخاص بالبورت مثال مكان ٌRB4كون RA4وهكذا وهذه االوامر ٌجب كتابتها فى بداٌة الكود
اى قبل ال
)(void main
وداخله.
اسم ال lcdعلى البروتس هو LM016L display
الفكرة انى بعرؾ متؽٌر iبدخلة فى for loopالن عرض السطر 16حرؾ فى الشاشة بجعل
هذا المتؽٌر هو رقم المربع اللى المفروض الكلمة ت
بدأ تتعرض من عنده وكل ما ٌزٌد المتؽٌر ده الكلمة تنتقل من المربع للمربع الذى ٌلٌه وبكده
تظهر الكلمة كأنها تتحرك على الشاشة .
الحظ بعرض الكلمة لمدة نصؾ ثانٌة لكن لماذا وضعنا أمر مسح الشاشة بعد كل عدة وذلك النها
سٌعرض كلمة computerحرؾ ال cهٌكون فى المربع االول من الشاشة ثم تزداد iبمقدار
1فسٌعرض كلمة computerولكن من اول المربع الثانى فٌظهر من كلمة computer
االولى والتى كانت عند i=1حرؾ ال cوتعرض كلمة computerالثانٌة والتى كانت عند
i=2وال ٌظهر منها اٌضا ؼٌر حرؾ ال cعند عرض كلمة computerوالتى تكون عند i=3
وهكذا فٌظهر ع الشاشة ccccccccomputerلهذا نضع أمر مسح الشاشة .
هل ٌممكنا كتابه او رسم اى شئ على شاشه ال LCDبخالف االرقام والحروف المعروفه لنا
نعم نستطٌع فعل ذلك عبرCustom Character
وهى خاصٌه موجوده داخل المٌكرو سى تسطٌع من خاللها كتابه او رسم اى شئ على شاشه
الLCD
قمت بتعرٌؾ متؽٌر kpلكى أحفظ فٌه قٌمة الزر الذى ٌتم الضؽط علٌه ثم ٌبدأ البرنامج فنقوم
داخل mainبعمل االتى :
نقوم بعمل initializationللكٌباد ولل lcdثم نعرض على الشاشة كلمة pressedوهنا نبدأ
فى البرنامج الرئٌسى .
كود :
{)while(1
;kp=0
};)(while(!kp){kp = Keypad_Key_Click
بقراءة قٌمة الزر الذى تم الضؽط علٌه باالسكى كود فاذا تم الضؽط على الزر 1فان قٌمة
kp=49الن ٌ 1كافئ باالسكى كود 49وفى هذة الحالة ٌذهب ل case1الن ال kpفٌها
قٌمتها ب 49ثم ٌعمل breakوٌخرج بره ال loopوٌعرض قٌمة ال kpعلى ال lcdعن
والذى من خاللة ٌتم تحدٌد قٌمة المتؽٌر kpوالذى ٌكافئ قٌمة السوتش الذى قمت بالضؽط علٌه .
الكود :
اذا تم الضؽط على زر رقم 1فان قٌمة kp=49فهحتاج متؽٌر اسمه old stateلتخزٌن القٌمة
القدٌمة لل kpفاذا كانت أول مرة اضؽطت على الزر 1فان الشرط
ٌتحقق الن kp ≠0ووقتها هٌجعل cnt=1النى لم اضؽط على الزر واحد سوى مرة وسٌتم
عرض قٌمة cntعلى الشاشة من خالل االمر
فاذا تم الضؽط مرة أخرى على الزر 1فان قٌمة kp=old stateووقتها ال ٌتحقق الشرط االول
وٌتحقق شرط else
نجد أن رقم ٌ 1كافئ 7و 7تكافئ 1الن الترتٌب معكوس عن الكٌباد السابقة .
لذا فان هذة هى ال casesالخاصة بها .
الحظ اذا قمنا بعدم توصٌل 4 lineو line Dفان عند الضؽط على ) (+/_/÷/×/=/0/onال
ٌظهر على الشاشة شئ ).راجع الكود الموجود فى المشارٌع المرفقة مع ملؾ الشرح (
-2ان بعض انواع الرٌالى ال تعمل على 5فولت بل تعمل على )(...24,12
وهكذا تصبح ؼٌر مناسبه للماٌكرو
ٌتم اضافه داٌود فى وضع عكسى مع الملؾ لتجنب التٌارات المستحثه العكسٌه المتولده من
الملؾ
النه فى حاله انقطاع الجهد الذى ٌؽذى الملؾ وبالتالى انقطاع التٌار فان الملؾ ٌحاول ان ٌقاوم
هذا التؽٌر بتٌار مستحث فى االتجاه المعاكس هذا التٌار اذا مر فى الترانسٌستور فانه سٌحرقه لذا
ٌتم وضع داٌود فى وضع عكسى لمنع مرور هذا التٌار
ما هى كمٌه التٌار االن المسحوبه من المٌكروكنتولر وكٌؾ اتاكد انها اقل من 25مٌللى امبٌر
حتى ال ٌتم حرق الماٌكروكنتولر
عندما ٌكون الترانسٌستور short circuit
ما عملها
ال l293dهو ٌ icعمل على تدوٌر الموتور من الٌمٌن الى الٌسار و من الٌسار الى الٌمٌن عن
طرٌق inputو ذلك بما ان الماٌكرو ال ٌعطً الى hi 5voltو low0volt
و هً توضع هكذا
انتبه هذه الصورة هً فقط للتوضٌح
- 2طب لو وصلت بطارٌه 12فولت للموتور لمده ثانٌه وفصلتها لمده ثانٌه وكررت هذه العملٌه؟
هٌحصل ان الموتور هٌتحرك ثانٌه باقصى سرعته و بعدٌن ٌقؾ ثانٌه وهكذا االجابه :
-3طب لو وصلت بطارٌه 12فولت للموتور لمده نصؾ ثانٌه وفصلتها لمده نصؾ ثانٌه
الخالصه ٌ:عنى انا لو عاٌز ادور موتور ب %50من سرعته مش هدٌله 12فولت متواصلٌن
انما هدٌله 12فولت فى نص الوقت وصفر فولت فى النص التانى
وبالتالى المحصله هتكون 6فولت والموتور ٌدور بنص سرعته
ٌوجد
على الpins
)(16,17 )(ccp1,ccp2
لكل واحده فٌهم رٌجستر 8بت
وهذا الرٌجستر متصل عمله بtimer2
ٌمكن تفعٌل االثنٌن معا
ولكن الٌمكن تشؽٌل اكثر من 2 pwmفى وقت واحد
______________________________________________
فً بداٌة البرنامج نقوم بكتابة األمر الذي من خالله نهٌئ البك لهذه العملٌة
ومن خالل هذا األمر ٌمكننا ضبط التردد ....أنظر للمثال التالً
;)pwm_init(5000
األمر السابق قام بتهٌئة البك وجعل التردد الخاص بالموجة هو 5كٌلو هٌرتز
) 5000هٌرتز ( ..وٌمكنك تؽٌٌر هذا الرقم ) هذا التردد ( على حسب
وذلك عن طرٌق
لفعل نفس ما ٌفعله الرٌالى وهو التحكم فى اتجاه الموتور بدون التجكم فى سرعته
ولكن فى هذه الحاله لن استخدم خاصٌه ال pwm
اما ال : digital signalفهى اشارات تعطى قٌم ثابته للفولت اما ) 1او (0
فلنفترض اننا قومنا بتعرٌؾ PINعلى المٌكروكنترولر على انها INPUTووضعنا علٌها فولت
مقداره 2V
ماذا ستكون االستجابه من المٌكروكنترولر ؟
ماذا اذا وضعنا فولت مقداره 3Vاو 4V؟؟
فى الحقٌقه ان المٌكروكنترولر ال ٌستطٌع قراءه جهد مقداره اقل من 2.5 V
فاى شئ اقل من 2.5 Vفان المٌكروكنترولر ٌعتبره 0Vواى شئ بٌن 2.5Vو 5Vفان
المٌكروكنترولر ٌعتبره 5V
لذا فان القٌم التالٌه )(2.5 , 3 ,4 ,4.5تعتبر كلها 5V
وكل هذا ) ٌ (1 , 1.5 , 2 ,2.4عتبر 0V
ولكن ما المشكله فى هذا ؟
ٌ-1قوم فً البداٌة بأخذ عٌنات من اإلشارة األصلٌة وٌثبتها خالل فترات زمنٌة ثابتة..
ٌ-2تم تقسٌم المسافة على مجال اإلشارة المطلوبة إلى مستوٌات ثابتة..
ٌ-3تم تحدٌد المستوى الذي تنتمً إلٌه اإلشارة عند العٌنة المطلوبة.
ٌ-4تم إخراج قٌمة المستوى المطلوب على مخارج ال.ADC
كما نالحظ فان عمل الٌ ADCتلخص فً مجموعة خطوات بسٌطة اآلن سنبدأ شرح كل خطوة
بالتفصٌل:
االن ٌتم اخذ العٌنة وتثبٌت القٌمة لهذه العٌنة خالل فترة عملٌة التحوٌل كما فً الشكل التالً:
- 2تقسٌم المسافة على كامل مجال االشارة الى مستوٌات ) : (Quantizationاالن بعد ان تم
تثبٌت قٌمة العٌنة خالل فترة التحوٌل فانه ٌتم تقسٌم المجال العمودي الى مستوٌات ثابتةكما فً
الشكل التالً:
-3نالحظ ان الشكل السابق مقسم الى 16مستوى عمودي ) من ( 15 – 0حٌث ٌتم تحدٌد العٌنة
ورقم المستوى المقابل لها ..فكما نرى مثال ان العٌنة ) (Aلها قٌمة مستوى مساوٌة لـ ، 13
والعٌنة ) (Bلها قٌمة مساوٌة لـ ، 9والعٌنة ) ( Cلها قٌمة مساوٌة لـ ، 2والعٌنة ) (Dلها قٌمة
مساوٌة لـ .6
حٌث ان Xما تم ملئه من الرٌجستر وهو ٌعتمد على القٌمه الداخله من السٌنسور او من اى شئ
اخر
وبعد معرفه قٌمه Xمن المٌكرو كنترولر نقوم بكتابه المعادله السابقه لمعرفه قٌمه الفولت
فكر؟؟؟؟
فى الماضى كنا نستخدم ال DC MOTORفى جمٌع التطبٌقات الخاصه بالحركه و التى تحتاج
الى MOTORولكن ال DC MOTORاثبت انه الٌمكن استخدامه فى جمٌع التطبٌقات
ببساطه الن ال ٌ DC MOTORمتلك مشكله انه ال ٌمكن تحرٌكه بزاوٌا دقٌقه ومحسوبه
افترض انك ترٌد وضع كامٌرا على DC MOTORوترٌد تحركٌها 60درجه باتجاه الٌمٌن
و 60درجه باتجاه الٌسار
كٌؾ ٌمكنك ان تفعل ذلك ؟
ستبدء فى حساب الوقت الى ٌستؽرقه الموتور حتى ٌدور الى زاوٌه 60درجه ولٌكن ٌستؽرق
ثانٌه
ولكن هذا الحل لٌس هو الحل االفضل على االطالق النه ٌتعمد على عده عوامل منها البطارٌه
ونوع الموتور نفسه وؼٌرها من العوامل
وبالتالى لن ٌستؽرق الوقت نفسه فى كل مره وبالتالى لن ٌعطى نفس قٌمه الزاوٌه فى كل مره
االن عندما نوصل coil Aللبطارٌه فانه سوؾ ٌمر به تٌار ٌؤدى الى تولد مجال مؽناطٌسى
هذا المجال سٌقوم بجذب القطب الشمالى للمؽناطٌس
ولو قمت بفصل coil Aوتوصٌل coil Bفان القطب الشمالى سوؾ ٌتحرك الى coil B
وهكذا هو الحال مع ‟ coil Bو ‟coil A
لذلك لكى ٌدور دوره كامله نحن فى حاجه الى توصٌل واطفاء ال coilSتلو بعضهم البعض
ملحوظة :
فإذا كان الخرج من البٌك 1تجعله اآلي سً Not gateكعاكس للجهد IC ULN2803تعمل
والعكس صحٌح ،فعملٌا ٌكون الموتور متصل بمصدر التؽذٌة ولكن الطرؾ اآلخر من الملؾ 0
أو األرضً عن طرٌق اآلي سً ) 1فً كود 0ؼٌر متصل باألرضً وعندما ٌتصل ب
البرمجة ( ٌمر التٌار فً الملؾ فٌمؽنطه مما ٌسبب دوران الموتور خطوة واحدة وهكذا مع بقٌة
اذا اردنا اان ٌتحرك الموتور 60درجه للٌمٌن و 60درجه للٌسار فانه ٌعتمد على خطوه الموتور
ولنعتبر انها 5 degrees.
نستٌطع ان نحدد خطوه الموتور عبر ان نضؽط ضؽطتٌن متتالٌتٌن على الموتور فى protues
n
ٌعنى لو عاٌز ادوس على سوٌتش موصل بمٌكرو كنترولر ٌضى لٌد موصل بمٌكرو كنترولر
تانى
اذا قمنا ببرمجه اول مٌكرو كنترولر )المُرسل( انه عندما اؼضط على السوٌتش االول
‘A’ مثلchar قم بارسال اى حرؾ
‘A’ واقوم ببرمجه المٌكرو كنترولر االخر )المستقبل ( انه عندما تستقبل حرؾ
قم باضائه اللٌد
PIN25 كل ما نحتاجه انه نقوم بتوصٌل طرؾ التوصٌل بٌن المٌكروكنترولر المرسل على ال
(TX)
PISN26(RX) والطرؾ االخر فى المٌكروكنترولر المستقبل على
وبرمجته فى المٌكروكنترولرUARTواستخدام ال
٘ ٛػثاسج ػٓ ِؼذي ٔمً اٌثراخ ف ٟاٌثأ١ح bpsعٛاءاً وأد أصفاس أ ٚآداد.
ػذد اٌشِٛص ف ٟاٌثأ١ح ٚلذ ذى ْٛأوثش ِٓ تد ف ٟاٌثأ١ح ٠ ٚماط تاٌرشدد .
;)(UARTx _Data_Ready
هذا األمر ٌختبر ما إذا كان هناك بٌانات مرسلة من الجهاز للمٌكرونترولرهل الداتا الموجودة فى
ال wireاتبعتت وال ال وبٌعرؾ انها اتبعتت من ال start bitأو بمعنى آخر هذا األمر ٌحتمل
قٌمتٌن إما واحد فً حال تم استقبال بٌانات أو صفر فى حالة عدم استقبال بٌانات .
{)While (1
;)(UARTx_Read
هذا األمر ٌستقبل باٌت واحد فقط أي وظٌفته استقبال باٌت قادم من الجهاز للمٌكرونترولر فً
حٌن األمر السابق UARTX _ Data_ Readyكان ٌختبر فقط وجود بٌانات أم ال .
كلمة receiveاو اى متؽٌر اخر مثل Xعبارة عن متؽٌر فقط و ٌجب أن ٌكون هذا المتؽٌر
من نوع charو من خالل هذا المتؽٌر اخزن الباٌت القادم من الجهاز عن طرٌق األمر
;)( uartx_readفى المتؽٌر . receive
)_UARTx_Write(char data
هذا االمر ٌرسل بٌت واحدة فقط من المٌكرو للكومبٌوتر اذا تم ارسال اكتر من بٌت فانه ٌحدث
errorكما فى هذا الكود :
)"UART1_ Write("aaa
Serial Port
صحٌحة
ٌوجد ICبتعمل الكالم ده اسمها MAX232
احنا بنشتؽل asynchronousالداتا هٌكون لٌها formatمعٌن هتتبعت بٌه هتتبعت الداتا
ومعاها other bitsوهى :
1_Start bit
2_data bits
3_parity bit
4_ Stop bits
أول حاجة هتتبعت من الداتا هو ال start bitوهو الذى ٌحدد بداٌة عملٌة االرسال لو ال start
ٌ bitساوى zeroفا المٌكرو هٌستقبل الداتا اللى بعده طبعا بعد ال start bitهٌكون ال data
bitsوهى البٌانات المرسلة بال ASCII Codeوعددها 8بٌت بعد ال .data bits
هٌكون ال parity bitوهو الذى ٌتأكد من اذا كانت البٌانات المرسلة صحٌحة أم خطأ نتٌجة
تأثٌر noiseاثناء ارسلها وتحدثنا عنه فى الدرس االول فارجع الٌه وبعدٌن ال stop bitوهى
التى تحدد نهاٌة االرسال وبتخلى pinالمٌكرو بواحد عشان تتهٌئ الستقبال بٌانات جدٌدة .
ولكن لٌه ببعت الداتا باالسكى كود ؟؟؟؟
عندما تكون ال pin idleبمعنى أن مفٌش داتا بتتنقل بٌكون علٌها logic highاول ما الداتا
تتبعت بتصبح lowبسبب ال start bitوبعد ما ٌتم ارسال الداتا تصبح highبسبب ال stop
. bit
ستجد انه عند كتابتك كلمة azex 2013فى الكومبٌوتر فانه ٌتم كتابتها فى الكومبٌوتر والذى
ٌمثل الشاشه السمراء وٌتم عرضها ع الشاشة
لكن كٌؾ أتاكد أن الكلمة azex 2013اللى أرسلتها من الكومبٌوتر للمٌكرو فعال اتكتبت على
الكومبٌوتر مش أنا اللى كتبتها ؟؟؟؟
هنجد أنى بكتب ع الكومبٌوتر لو شلنا االمر السابق من الكود
بٌظهر ع الشاشة كلمة azex 2013ومش بٌظهر ع الكومبٌوتر كما هو موضح بالصورة
وهذة االداة تحتاج الى منفذٌن COM1 & COM2واحد للمٌكروسى والتانى لل RS232ع
البروتس
البرنامج الذى ٌقوم بانشاء المنفذٌن هو
بعد ذلك نذهب للمٌكروسً لضبط اإلعدادات ونختار لٌه portمعٌن ولٌكن com1
الحظ pin RC0خرج هنضع علٌها اللٌد و PIN RC7دخل النها تستقبل من الكومبٌوتر لذا
ٌجب تعرفها فى TRISبانها ٌ 1عنى دخل .
البرنامج الرابع
فكرة البرنامج :
ٌقوم ال userبادخال كلمة سر az_exالى الكومبٌوتر فاذا ادخلها ٌقوم الكومبٌوتر باظهار
رسالة لل userمكتوب فٌها yes welcome azex orgnizerواذا لم ٌدخل االسم
الصحٌح ٌظهر الكومبٌوتر رساله مكتوب فٌها . wrong enter right name
الكود :
AZEX’15
Technical Support Committee
Contact Us:
technicalcommitteeazex2015@gmail.com
01222262200