تعلم برمجة البيك بيسك


(eabueida) #1

بسم الله الرحمن الرحيم
الحمد لله والصلاة والسلام على رسول الله وعلى اله وصحبه وسلم
أما بعد
فبعد موافقة اخي عبادة على تحويل موضوع تعلم البيك بيسك الى موضوع عام لتعم الفائدة
فسأبدأ الكتابه به وهو موضوع مكمل لموضع أخي
ahmedeldeep بحيث أنه يتناول الجانب الهاردوير وسأتناول جانب السوفت وير

والله من وراء القصد سائلين المولى عز وجل قبول هذا العمل وان يجعلة خالصا لوجهه الكريم


(eabueida) #2

متطلبات التعلم

برنامج البيك بيسك
http://www.4shared.com/file/13076889/84e578ae/PicBasic_Pro_246__MicroCode_Studio_2106_.html
برنامج البروتيس
http://www.4shared.com/file/13077325/c355548b/Labcenter_Proteus_69_SP3_Full.html
كتاب تعليمي
http://www.4shared.com/file/13077554/ff9e8e68/Basic_for_PIC_Microcontrollers.html

وبالطبع المبرمجة

ملاحظة: هذا ما كتبته في رد سابق
ولا تنسونا من دعائك لصالح


(eabueida) #3

بسم الله الرحمن الرحيم
اخوني في الله

بالنسبة للبرمجة
فالبداية هي بتعلم قواعدها من حيث المتغيرات وادوات الشرط و loops والبرامج الفرعية
ففي البداية نبدأ بتعريف المتغيرات

هنالك عدة انواع من المتغيرات
byte, word , bit
وصيغة التعريف هي التالي
name_of_variable var type
مثال:
result var byte
فالمتغير result من نوع byte

2- الإستناد وهو ان تقوم بوضع رقم داخل متغير
الأرقام ممكن ان تكون إما بالثائي أو العشري أو الست عشري
result= 15 العشري
result =%00001111 الثنائي

result= $0f الست عشري

اذا قمنا بتعريف متغير result مثلا على انه word واردنا أن نكتب اي رقم في ال byte العلوي
يكون الأمر كالتالي
result.byte1= 10

3-المصفوفات
age var byte[10]

4- تعريف الثوابت
name_of_constant con number
مثال
age con 10

5- الأمر symbol
هذا الأمر يستخدم لإعادة تسمية المنافذ ونحوها لتسهيل فهم البرنامج
مثال

symbol alarm = porta.1
فبدلا من اكتب porta.1 يمكن كتابة alarm

وأظن انك تعلم أن trisa و trisb هما السجلان اللذان يتحكمان بنوع المنفذ

إن شاء الله المرة القادمة سأتناول labels ,if ,for
وسيكون التحدث على طريقة كتابة البرنامج بعد الإتنهاء من الأوامر إن شاء الله

ملاحظة: هذا ما كتبته في رد سابق


(eabueida) #4

بالنسبة الى ال label فيتم تعريفة كتالي :
name_of_the _label:

قاعدة if
وهي كالتالي :
if result =10 then
result=0
endif

وهنالك صيغة اخرى وهي عند تحقق شرط الذهاب الى label معين
أو كتابة الأمر الذي تريد
if result = 10 then output
.
.
.
output:

وفي حالة وجود اكثر من شرط يمكن استخدام swich case التي سوف تنتكلم عنها

select case variable

case 1 ; هنا نقوم بوصع احد الشروط وكذلك بالنسبة للبقية
portb=1

case 2
portb=2

case 3
portb=3

case 4
portb=4

case 5
portb=5

case 6
portb=6

case 7
portb=7

case else وهنا اذا المتغير غير الإحتمالات السابقة
portb=15

end select

الأمر for
والمثال سيوضح ماهو
for i=1 to 10
. .



next i
والمثال السابق سيقوم بتكرار الجمل الموجودة على هيئة نقاط بالمثال 10مرات

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

ملاحظة : هذا ما كتبته في رد سابق


(عباده) #5

بارك الله فيك اخي الحبيب ورزقك من خيري الدنيا والأخرة
نحن مستعدون للبدء معك في طاعة الله ورسوله ( اطلبوا العلم من المهد الي اللحد )


(eabueida) #6

السلام عليكم
سأتكلم اليوم عن الأوامر التالية
gosub و call و on interrup

الأمر GOSUB
وصيغته التالية

gosub label
ويستخدم لإستدعاء برامج فرعية

الأمر call
وصيغته

call label
و يستخدم لإستدعاء برنامج مكتوب بالأسمبلى , وسأفرد مقالة كاملة إن شاء الله عن كيفية الدمج بين البيك بيسك مع الأسمبلي

الأمر On interrupt
وصيغته التالية
On interrupt goto label
وهو يستخدم للذهاب الى label في حالة حدوث مقاطعة (interrupt)
مثال:

On iterrupt goto ISR

disable لأيقاف اي مقاطعة أخرى
ISR: عنوان برنامج المقاطعة
. .
.
.
.
.
resume الرجوع الى حيث كان البرانمج الرئيسي قبل المقاطعة
enable اعادة تفعيل المقاطعات

والشرح:
في حالة حدوث مقاطعة (interrup) يذهب البرنامج تلقائيا الى البرنامج ISR
ويتم عدم تفعيل المقاطعات الأخرى الى ان يتم المقاطعة الحالية
وبعد الإنتهاء من المقاطعة يتم تفعيل المقاطعات

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


(عباده) #7

بارك الله فيك …وننتظر المزيد من فضل الله علينا


(eabueida) #8

السلام عليكم

اليوم سوف اتحدث عن الدمج بين البيك بيسك والأسمبلي ويتم هذا عن طريق الأمر التالي

asm
. . .
.
.
.
.
end asm

سأتحدث إن شاء الله عن كيفية كتابة يرنامج فرعي بالأسمبلي وإستدعائة من قبل البيك بيسك
وكيفية اسناد قيم الي متغيرات معرفة بالبيك بيسك عن طريق الأسمبلي

و أهمية هذا ألأمر تكمن في ان مساحة المايكرو صغيرة و يمكن كتلبة كود صغير بالأسمبلي يغني عن أخر بالبيك بيسك ويحفط لنا الذاكرة

في البداية كيفية اسناد قيمة الى متغير معرف بالبيك بيسك عن طريق الأسملي والمثال التالي سيوضح هذا الأمر

result var byte

asm

movlw 5
movwf _result

endasm

ملاحظة يجب ترك مسافة قبل كتابة أوامر الأسمبلي

و كتابة بعض الدوال بالبيك بيسك تعتبر احد اساليب التطوير بالنسبة للبيك بيسك (البرنامج ذاتة)
ويجب التنويه انه عند كتابة label أو عنوان لبرنامج فرعي يجب ان بيدأ من الخانه الأولة اي بدون ترك مسافة وان تضع _ قبل كتابة العنوان مثال _smsm

وفي المثال التالي سأوضح كيفية كتابة دالة والليبل بالأسمبلي وكيفية أتدعائها بالبيك بيسك
المثال ال

trisa=0

loop:
call led_on في هذا السطر يتم استدعاء الدالة المكنوبر بالأسمبلي
pause 1000 انتظار مدة ثانية
call led_off أستدعاء الرنامج الفرعي الثاني
pause 1000
goto loop

asm
_led_on
movlw 1
movwf porta

return
goto loop1

endm

_led_off
clrf porta
return

endasm

وهذا البرنامج يعمل مثل فلاشر اي ضوء وماض

وبحمد الله وبفضلة تم موضوع اساسيات البرمجة وسأنضم لأخي عبادة في موضوعة تعلم البيك بيسك بأسلوب عملي


(fadeonlin) #9

لقد أعجبني البرنامج كثيرا واريد أن اسال كيف يمكنني تشغيل 8 ليدات ضوئية يقابلها 8 ضاغطة كل ضاغطة تقوم بعمل تشغيل واطفاء ليد مقابل لها ( انا استعمل pic16f877 ( وانا اشكرك جدا على اثارة هذا الموضوع واتمنى الرد سريعا
والسلام عليكم ورحمة الله وبركاته


(eabueida) #10

السلام عليكم

هذا الكود هو لعمل ما طلبت

trisd=255
trisb=0
porta=0
portb=0
main:
portb=portd
goto main

end

اول سطران لتعريف المدخلات والمخرجات
الثالث والرابع لوضع قيمة ابتدائية

اخر ثلاث سطور هي البرنامج

المنفذ d هو للمدخلات والمنفذ b للمخرجات
وفي المرفق صورة للدائرة وشكرا


(fadeonlin) #11

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


(ماجد سلطان) #12

جزاك الله خيرا


(engq77) #13

الف شكر اخي الكريم وذا امكن الروابط من جديد لانها مغلقه حاليا


(system) #14

أرجو المثابرة والتوفيق من الله


(therarocky) #15

شكرا جزيلا
و زادكم الله من فضله وعلمه

(system) #16

انا عضو جديد
ممكن شرح عداد من 0000الى 9999 على 7seg وزمن بين كل رقم 5 ثانيه ( مالتى بليكسر)

وجزاكم الله خيرا


(system) #17

السلام عليكم

اسأل لماذا عدم اكمال الموضوع

انتظر والأجر على الله وشكرا


(eabueida) #18

السلام عليكم

تحديث الروابط

بالنسبة لبرنامج اللبيك بيسك هذا هو اللنك

http://www.4shared.com/file/esG9loEF/PIC_basic.html

وهذه بعص الكتب

http://www.4shared.com/document/j7B4…icrocontro.htm

http://www.4shared.com/document/utRw…project-bo.htm

http://www.4shared.com/document/0_JP…30_Project.htm

http://www.4shared.com/document/mdXM…he_Picbasi.htm

لكن بالنسبة الى برنامج البروتيوس سأضع اللتك ان شاء الله في المشاركة القادمة

ولا تنسونا من دعائك الصالح

والسلام عليكم


(eabueida) #19

وبرنامج البروتيس على اللنك التالي
http://www.4shared.com/file/DC7gJ3g0/Potable_Pro74sp3.html


(مُحمَّد) #20

تسلم