بسم الله الرحمن الرحيم
عزيزي المهندس تامر انا اعدت هذه المذكره لك مخصوص لاني ويعلم الله اشعر بانك اخ فاضل لي . وامني ان تقوم هذه المذكره بتقريب مفهوم عمل الميكرو الي ذهن حضرتك وسوف اتناول شرح الميكرو في نقاط اساسيه محدده هذه النقاط اذاذ استوعبتها جيدا سوف تكون باذن الله قادر علي انجاز 98% من مشاريع الميكرو وسوف نستخدم في شرحنا مترجم البيك بيسك pic basic compilier والذي يستخدم لغه البسك السهله والمفضله لدي معظم المبرمجين.
دعنا نحدد النقاط الاساسيه ومفهومها الهندسي …
اولا : الادخال والاخراج input and output operation
المقصود بذلك هو ان نخرج خرج معين علي بورت او بين من بورتات الميكرو او نقوم بادخال دخل الي الميكرو أي نقرأ قيمه من سنسور او أي قيمه نريد ان نعمل لها معالجه .
ولكن كيف يتم ذلك دعني عزيزي المهندس تامر ان اتي لك من اخر الكلام فهذه الاوامر البسيطه منقسمه الي قسمين القسم الاول لتوجيه البورت او البين والقسم الثاني لادخال او اخراج القيمه .
ولكن كيف يتم ذلك يا فكري دعك من سرد النظري وأتنا بالعملي؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
معك عزيزي فخذ هذا الامر
output portname يستخدم هذا الامر لتوجيه البورت لكي يكون مهيأ لعمليه الاخراج.
you can also write this instuction
output port name .pin وهذا الامر يستخدم لتوجيه بين معين من البورت لكي يكون خرجا
مثال علي توجيه الاخراج :
output portb : يعني اجعلي البروت الذي اسمه بي يكون اخراج
output potrb.0 : يعني اجعل البين رقم 0 من البورت الذي اسمه بي يكون خرج وليس كل بينات البورت بي وهذا يوضح لنا كيف يمكن اختيار بين معين من بورت ما لكي يكون اخراج.
ولاخراج قيمه معينه علي البروت بي
portb=$54
وهنا علامه الدولار للدلاله علي انا سوف نخرج قيمه مكتوبه بالنظام السداسي عشر
portb.0=1
وهنا يتم اخراج لوجيك واحد علي البين 0 من البروت بي.
ولكن ماذا عن الادخال ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
نستخدم هذا الامر لتوجيه ادخال البروت ايه مثلا
input porta يعني توجيه البورت ايه لكي يكون دخل
input porta.2 يعني توجيه البين رقم 3 من البورت ايه لكي يكون دخل .
ولتخزين القيمه المراد ادخالها نعلن عن متغير وليكن نوعه من بايت او أي نوع اخر مناسب للقيمه المدخله دعنا نري ذلك يا عزيزي
DIM fik AS BYTE
INPUT PORTA
fik=PORTA
فاصبح لدينا الان القيمه المدخله مخزنه في متغيرنوعه بايت اسمه FIK
ومن خلال هذه القيمه يمكن التعامل معها . دعنا نري مثال عملي علي الادخال والاخراج
DEVICE 16F877 كلمه device لابد ان يتبعها رقم الميكرو المستخدم
XTAL 4
قيمه الكريستاله المستخدمه لتشغيل الميكرو
OUTPUT PORTB ’ توجيه للبورت بي والبين رقم 2 من البروت سي لكي يكون اخراج
OUTPUT PORTC.2
INPUT PORTA .4 توجيه للبين رقم 5 من البورت ايه لكي يكون ادخال
main: بدايه البرنامج تبدا دائما بعنوان تتبعه :
IF PORTA.4=1 THEN
هنا جمله شرط أي انه في حاله ان تكون القيمه المدخله علي البين 5 من البروت ايه=1فانه يقوم بتنفيذ الجمل التي تلي then
PORTB=$FF
PORTC.2=0
ELSE
او اغلق if
END IF
ثم ارجع الي بدايه البرنامج
GOTO main
بفرض اننا موصلين سويتش علي البين 5 من البورت ايه وفي هذا البرنامج نقوم بقرائته فعند تنفيذ هذا البرنامج عمليا ونوصل اجزاء الدائره سوف نواجه مشكله وهي التشويش علي المفتاح او debounce of switching وذلك ناتج من عوامل عديده لا مجال الان لسردها ولكن كيف يا فكري نتغلب علي تلك المشكله ؟
الحل بسيط وسهل وهو ادراج وتنفيذ هذا الامر في البرنامج
BUTTON Pin , DownState , Delay , Rate , Workspace , TargetState , Label
pin: يقصد بها اسم البين المتصل بها السويتش مثال porta.4
downstate: يقصد الوجيك الذي سوف يكون عليه السويتش في حاله ضغطه
delay: يقصد بها الفتره الزمنيه المنقضيه بين الضغط علي السويتش وبين تنفيذ الاوامر المتعلقه بهذا السويتش وهذا بالنسبه للضغطه الاولي فقط
rate: يقصد به الفتره الزمنيه الازمه لاعاده تنفيذ الاوامر المتعلقه بهذا مع استمرار الضغط علي السويتش
workspace: وهذا لابد ان يكون متغير ويكون مضبوط بقيمه =0 مسبقا
target state:وهذا يحدد اللوجيك الذي سوف يتحدد علي اساسه الذهاب لتنفيذ الاوامر المتعلقه بهذا السويتش0او 1
ف 1 يعني عندما تضغط علي السويتش و 0 يعني عند عدم الضغط علي السويتش
label1: وهذا هو اسم العنوان الذي يحتوي علي الاوامر المتعلقه بوظيفه هذا السويتش
ومثال علي ذلك :
Example
DIM BTNVAR AS BYTE ’ Workspace for BUTTON instruction.
Loop: ’ Go to NoPress unless BTNVAR = 0.
BUTTON 0 , 0 , 255 , 250 , BTNVAR, 0 , NoPress
PRINT "* "
NoPress:
GOTO Loop
ولكن يا فكري دعنا ننفذ هذا الامر في البرنامج الذي استخدمنا فيه if
device = 16f877
xtal 4
output portb
output portc.2
input porta.4
DIM fik AS BYTE
main:
BUTTON pina.4,0,150,0,fik,0,action
GOTO main
action:
PORTB=$FF
PORTC.2=0
goto action
وهذا مثال اخر
’ BUTTON Command for the PROTON board
’ Demonstrates multiple BUTTON commands. Each of 3 buttons toggles an LED.
’ Hold a button for 1 second and the LED will flicker (auto-repeat).
SET_DEFAULTS PROTON_4 ’ Configure ports for PROTON dev board using a 4MHz crystal
Device 16F877
Dim BUF1 As Byte ’ Working buffer 1 for button command
Dim BUF2 As Byte ’ Working buffer 2 for button command
Dim BUF3 As Byte ’ Working buffer 3 for button command
Symbol SW1 = PORTB.4
Symbol SW2 = PORTB.5
Symbol SW3 = PORTB.6
Symbol LED1 = PORTD.5
Symbol LED2 = PORTD.6
Symbol LED3 = PORTD.7
DelayMS 500 ’ Wait for PICmicro to stabilise
ALL_DIGITAL = True ’ Set ports to digital mode
Clear ’ Clear buffers
Low PORTD ’ ALL LEDs off
TRISB = %11110000 ’ Set PORTB 0-3 outputs, 4-7 inputs
PORTB_PULLUPS = On
Enable PORTB pull-ups
Chk1: DelayMS 25
Button SW1,0,40,5,BUF1,0,Chk2 ’ Check Button 1 (Skip to 2 if Not Pressed)
Toggle LED1 ’ Toggle LED if pressed
Chk2: Button SW2,0,40,5,BUF2,0,Chk3 ’ Check Button 2 (Skip to 3 if Not Pressed)
Toggle LED2 ’ Toggle LED if pressed
Chk3: Button SW3,0,40,5,BUF3,0,Chk1 ’ Check Button 3 (Skip to 1 if Not Pressed)
Toggle LED3 ’ Toggle LED if pressed
GoTo Chk1 ’ Do it forever