View
32
Download
0
Category
Preview:
DESCRIPTION
به نام خداوند جان و خرد. موضوع مقاله: برنامه نويسي در pic تهيه كنندگان: فهيمه عرفاني پور نسرين ماهوش. برنامه نويسي در pic. گام هاي كلي در پروژه انتخاب يك pic : - PowerPoint PPT Presentation
Citation preview
1
خرد و جان خداوند نام به
: مقاله موضوعدر نويسي picبرنامه
: كنندگان تهيهپور عرفاني فهيمه
ماهوش نسرين
2
در نويسي picبرنامهپروژه • در كلي هاي گاميك • :picانتخابانواع • از كه شناختي و انتظار مورد هاي نياز به توجه تر picبا مفيد كه را آن ، است
. كنيم مي انتخاب ، استمحيط • يك در كد نمودن :وارد• ، يافته توسعه هاي محيط از يكي اسمبلي زبان مورد اين MPLABدر در را كد كه دارد نام
. كنيم مي وارد محيطنظر • مورد كد نمودن :اسمبلاسمبلر MPLABمحيط • . MPASM(microchip pic assembler)داراي اين كه است
تحت . dos , windowsاسمبلر باشد مي موجودنظر • مورد كد سازي :شبيه
. است خط به خط صورت به ثبات يا و پورت مقدار مشاهده براي سازي شبيهساز mplabمحيط شبيه يك باشد . mpasimبنام freeداراي مي
در • كه است اسمبلر زبان در برنامه ترجمه نتيجه زير فايل .picسه شود مي بار• Executing file (Program_Name.HEX)
براي فايل .programmerاين نيست توجه قابل و ندارد بر در را اطالعاتي• Program errors file (Program_Name.ERR)
شامل فايل .errorاين دارد اهميت اسمبلر مترجم براي كه است برنامه در پذير امكان هاي• List file (Program_Name.LST)
براي فايل شده .. programmerاين واقع آن در و ها موقعيت مثل مهمي اطالعات و مهماست.
•
3
در نويسي picبرنامهدر • آن كردن لود يا نظر picتست و pic بار مورد مدار :در
حالت programmerبوسيله در و دارد اتصال كامپيوتر پارالل پورت به كهon. كيم مي بار را برنامه ، گرفته قرار
Coding & Assembling in MPLAB 5.70
Building Circuit & testing, editing
Downloading to programmer using PICALLW
4
pic16f8x
•RA0-RA4به • كه باشد مي جهته دو پورت يك
استفاده مورد خروجي و ورودي عنوانپورت يك و گيرد مي مي 5قرار بيتي
باشد.•RB0-RB7كه • باشد مي ديگري دوجهته پورت
و ورودي عنوان به و دوجهته نيز اينو گيرد مي قرار استفاده مورد خروجي
قبلي پورت با آن بيتي 8تفاوت. است بودن،آن
•VDD بين • منبع .6-2اين كند مي تغيير ولت•Vss به • باشدو مي ولت صفر منبع اين
. كند مي عمل زمين عنوان
5
pic16f8x(count)•OSC1/CLK IN And OSC2/CLKOUT:
. بنابراين دهيم مي اتصال را خارجي كالك يك كه گردد مي استفاده جايي دراز مختلفي انواع .timingميكروكنترلر دارد را
•MCLR:درون • حافظه موقعيت كردن پاك .PICبراي رود مي كار به
•TOCK1:كالك يك عنوان به و گيرد مي قرار استفاده مورد دروني تايمر يك عنوان به
براي ، است نظر مورد مي ISOLATEورودي قرار استفاده مورد اصلي كالكگيرد.
•INT:• ، دارد را شدن مونيتور قابليت كه ورودي پين يك عنوان به تواند مي پين اين
. حالت در اگر گيرد قرار استفاده توقف HIGHمورد يا و كردن رست براي باشدمورد است برنامه در نظرمان مورد كه ديگري تابع انتخاب براي يا و نمودن
. گيرد مي قرار استفاده
6
در برنامه حافظه و داده حافظهpic1684
Data Memory (8-bits)
INDF TMR0 PCL
STATUS FSR
PORTA PORTB
EEDATA EEADR PCLATH INTCON
RAM
General Use – 68
Bytes
Not Available
INDF OPTION
PCL STATUS
FSR TRISA TRISB
EECON1 EECON2 PCLATH INTCON
RAM
Mem Mirror Bank 0
Not Available
000h 001h 002h 003h 004h 005h 006h 007h 008h 009h 00Ah 00Bh 00Ch
04Fh
050h
07Fh
080h 081h 082h 083h 084h 085h 086h 087h 088h 089h 08Ah 08Bh 08Ch
0CFh
0D0h
0FFh
Bank 0 Bank 1
Reset Vector
Interrupt Vector
General Use
000h
004h
3FFh
Program Memory (1Kx14-bits) Flash/ROM
7
برنامه كد نگارش :طريقه• ، اسمبلر به كه ، كنيم مي استفاده توابع از ليستي از برنامه كد ابتداي در
. ( device)وسيله ، ذيل نمونه در دهد مي آگاهي در را اشيا شكل و فورمت ويك فايل pic1684وسيله در كد خروج intel.hexو ، دارد طول بيت هشت كه
. كند مي
• list p=16c84, f=inhx8m
دستور • براي includeسپس اضافه header fileكردن includeرا استاندارد . نماييم مشخص Header fileمي اسكي نام با را داخلي هاي ثبات از خيلي
. اين نمايد مي . header fileتعريف گيرد قرار اسمبلر افزار نرم با بايد
• include "e:\pic\asmicro\p16cxx.inc" ;Register definitionsCOUNTER equ 10h ;value of count to be outputLOOPCOUNT equ 11h ;Delay loop counterLOOPCOUNT2 equ 12h;Bit definitons org 0000h ;Reset Vectorgoto start
8
• start
• bsf STATUS,RP0 ;Select register page 1movlw 0movwf 6movlw 0movwf 5bcf STATUS,RP0 ;Select register page 0clrf COUNTER ;Reset data out to all 0count incf COUNTER,F ;Inc the countermovf COUNTER,Wmovwf PORTB ;Send the value of counter to ;portbdelay decfsz LOOPCOUNT,F ;Decrement delay counter and ;skip if 0goto delay ;Repeat until zerodecfsz LOOPCOUNT2,Fgoto delaygoto countend
9
در اسمبلی نویسی برنامه picنکات
نوش�ته باش�يم ” include “p16f84.incاگ�ر در ابت�دای برنام�ه ، از برخی تعاريف اسمبلر می توانيم استفاده کنيم.
و • دس�يمال ص�ورت ب�ه را اع�داد ت�وان می اس�مبلی در هگزاديمال و باينری استفاده کرد
در اس�مبلی می ت�وان پس از ن�ام برچس�ب دو نقط�ه گذاش�ت و •يا از آن صرفنظر کرد.
از س�تون اول آغ�از ب�ه برنام�ه نويس�ی نکني�د ، زي�را س�تون اول • است.( lable)محل نوشتن برچسب
از برنامه جدا می شوند.;توضيحات با قرار دادن عالمت •خوان�دن و نوش�تن را ب�ا برنام�ه نويس�ی می ت�وان مش�خص نم�ود. •
ب�رنل�م�ه ب�ا ا�س�ت ي�ا خ�روج�ی و ورودی اين �پين ک�ه اين� يع�نی نويسی مشخص می کرد.
نوشتن با حروف کوچک ويا بزرگ با هم تفاوت دارد.•
10
در picساختارها
11
Delay loop
اصل تاخير شمارش به صورت نزولي ، يعنی رسيدن به صفر است. يعني مقدار صفر پايان تاخير را نشان مي دهد.
گام هاي مورد نياز براي ايجاد تاخير: باشد) .ffh انتخاب مقداری براي تاخير( بيشترين مقدار آن می تواند **
نکته:اين امکان وجود دارد که مقداری که برای ثابت در نظر می گيريم ، محتوای يک ثبات باشد. برای مثال:
Count equ 85 است.porta موقعيت ثبات 85اين حالت قبول نيست ، زيرا
در اينجا ما ابتدا به يک ثبات همه منظوره اشاره می کنيم و سپس مقدار مورد نظرمان را در آن می ريزيم .
گام بعدی عمل کاهش است.** DECFSZ COUNT,1
**تعريف برچسب COUNT equ 08hLABEL decfsz COUNT,1
goto LABEL
movlw 85h ;First put the value of 85h in the W registermovwf 08h ;Now move it to our 08h register.
12
زیربرنامهزيربرنامه قسمتی از کد يا برنامه است که در صورت نياز فراخوانی می شود. •
هنگامي مورد استفاده قرار مي گيرد كه از بخشي از برنامه بيش از يكبار استفاده گردد.
مزايا:•قرار می گيرد.pic كاهش ميزان فضای حافظه برنامه ای که درون • آسان کردن تغيير و اصالح مقادير•مراحل نوشتن يک زيربرنامه:• انتخاب يک نام • نوشتن محتوای زيربرنامه• retfie يا return استفاده از •نكته:••pic .بين برنامه اصلی و زيربرنامه ، هچ تفاوتی قائل نمی شود با • اصلي برنامه در زيربرنامه .callفراخواني گيرد مي انجام
• ROUTINE COUNT equ 255LABEL decfsz COUNT,1 Goto LABEL RETURN
13
14
پورت از I/oخواندن را ب�ه عن�وان ورودی و ي�ا خ�روجي بخ�واهيم انتخ�اب portb ي�ا portaبرای آنک�ه بيت ه�اي •
را ي�ك (ب�راي� ورو�دي) و ص�فر (ب�راي trisb ي�ا trisaك�نيم� ، ب�اي�د بيت ه�اي متن�ا�ظر را �در خروجي) مقدار دهيم.
برق�راري مطلب ف�وق چ�ون • ب�ه خ�اطر دارن�د و trisa,trisbنکت�ه: ق�رار ي�ك بان�ك در porta,portb.در بانك �صفر� هستن�د ، لذا� يك �سوي�يچ بين اين دو بانك �انجام� مي گيرد
نكت�ه : هنگ�امي ك�ه مق�دار را ب�ه ص�ورت ورودي تعري�ف نم�وديم ، ب�راي فهم اينك�ه مق�دار •ورودي صفر و يا يك لست مي توان از دو ساختار زير استفاده نمود.
•Btfss,Btfsc انتخ�اب اين دو بس�تگی ب�ه آن دارد ک�ه م�ا می خ�واهيم برنام�ه در مقاب�ل خوان�دن ورودی •
چگونه عمل کند.• BTFSS PortA,0
ي�ك باش�د ب�ه دوخ�ط بع�دي پ�رش مي كند.PORTA در ص�ورتي ك�ه بيت ص�فرم از •
STATUS equ 03h ;Address of the STATUS registerTRISA equ 85h ;Address of the tristate register for port APORTA equ 05h ;Address of Port Absf STATUS,5 ;Switch to Bank 1 movlw 01h ;Set the Port A pinsmovwf TRISA ;to input.bcf STATUS,5 ;Switch back to Bank 0
15
یک: شدن خاموش و روشن ledمثال
• ;*****Set up the Constants**** • STATUS equ 03h ;Address of the STATUS register
TRISA equ 85h ;Address of the tristate register for port APORTA equ 05h ;Address of Port ACOUNT1 equ 08h ;First counter for our delay loopsCOUNT2 equ 09h ;Second counter for our delay loops
• ;****Set up the port****• bsf STATUS,5 ;Switch to Bank 1
movlw 01h ;Set the Port A pins:movwf TRISA ;bit 1to output, bit 0 to input.bcf STATUS,5 ;Switch back to Bank 0
• ;****Turn the LED on**** • Start movlw 02h ;Turn the LED on by first putting it
movwf PORTA ;into the w register and then on the port
• ;****Check if the switch is closed• BTFSC PORTA,0 ;Get the value from PORT A
;BIT 0. If it is a zero
16
مثال ادامه
• call Delay ;a zero, carry on as normal. ;If is is a 1, then add an ;extra delay routine
• ;****Add a delay • call Delay
• ;****Delay finished, now turn the LED off****• movlw 00h ;Turn the LED off by first putting it
movwf PORTA ;into the w register and then on the port
• ;****Check if the switch is still closed
BTFSC PORTA,0 ;Get the value from PORT A ;BIT 0. If it is a zero, call Delay ;carry on as normal. ;If is a 1, then add an ;extra delay routine
• ;****Add another delay**** • call Delay
17
مثال :ادامه
• ;****Now go back to the start of the program• goto Start ;go back to Start and turn LED on again
• ;****Here is our Subroutine• Delay• Loop1 decfsz COUNT1,1 ;This second loop keeps goto
Loop1 ;turned off long enough for us todecfsz COUNT2,1 ;see it turned offgoto Loop1 ;return
• ;****End of the program****• end ;Needed by some compilers, and also
;just in case we miss the goto instruction.
18
حافظه مصرف کاهش برای ای نکته
در خيلی از م�وارد راهک�ار ه�ای مختلفی جهت ک�اهش مص�رف حافظ�ه ب�رای برنام�ه ای ک�ه •می ن�ويس�يم ، و�ج�ود دار�د. يکی از م�وارد ک�ه می ت�وان از� آن اس�تفاده �ک�رد ، ا�س�تفاده از
XORWF.می باشد عمل و تاثير آن را با مثال زير نشان می دهيم. •
استفاده می کنيم.XORWFحال در اين جا از ••MOVLW 02h
XORWF PORTA,1
•Program Change Size (Bytes) •Flashing LED Original 120
Flashing LED Subroutine Added 103Flashing LED XOR Function Used 91
.
movlw 02hmovwf PORTAmovlw 00hmovlw PORTA
19
داده :جدول• : مي انتخاب نظر مورد معيار بر بسته كه است داده مقادير از ليستي داده جدول
گردد.•. است نسبي دهي آدرس ، عمل در داده جدول از استفاده هاي نمونه از يكيمثال:•
Movlw 0x04 ; Load W with 4call Table ; Call the table subroutineMovwf Result ; Store the result from the tableTable addwf PCL, W ; Jump to (current PCL) + W• retlw 0x00 ; Return with 0x00 in W• retlw 0x23 ; Return with 0x23 in W• retlw 0x33 ; etc.• retlw 0x88
در: • ، picنكته program counter در ارزش كم بيت هشت و باشد مي بيتي سيزدهبه pclثبات تر ارزش با بيت پنج و است نوشتن و خواندن قابل مستقيم صورت به
ثبات در و نيست استفاده قابل مستقيم در pclathصورت و است شده داري نگهمانند هنگام عملي به goto,call يك .pcمقدار يابد مي انتقال
20
از استفاده FSR, INDFمثال•FSR استفاده آن از غيرمستقيم دهي آدرس در نمايدو مي عمل گر اشاره يك مانند
. همراه به گردد ، FSRمي INDF و نيست برخوردار فيزيكي حالت از كه آيد ميكه FSRبواسطه خانهاي محتواي و گردد مي را FSRتعريف دارد اشاره آن به
. نويسد مي خانه آن در نوشتن عمل صورت در و نمايد مي مشخصخواهيم: • مي .68مثال كنيم دهي مقدار ثابتي مقدار با را عمومي ثبات
oxFF: movlw 0xc oxFF: movlw 0xc ; oxc => w; oxc => w movwf FSR movwf FSR ; 0xc => FSR; 0xc => FSRloop:loop: movlw 0x50 movlw 0x50 ; 0x50 => W (last GPR number + 1); 0x50 => W (last GPR number + 1) clrf INDF clrf INDF ;clear memory at address (FSR);clear memory at address (FSR) decf INDF,1decf INDF,1 ; set memory at addr (FSR) to FF; set memory at addr (FSR) to FF incf FSR, 1 incf FSR, 1 ; FSR points to next file register; FSR points to next file register subwf FSR, w subwf FSR, w ; (FSR) - 50h => W; (FSR) - 50h => W bnz loopbnz loop ; if result # 0 goto loop; if result # 0 goto loop
21
محاسبه: سري 12مثال در اول عددفيبوناتچي
movlw fib ; table address => wmovwf FSR ; table address => FSRmovl d'12', w ; compute 12 Fibonacci numbersmov w, count ; count them,clrf f0 ; 1st Fibonacci number is 0clrf f1incf f1 ; 2nd Fibonacci number is 1
loop:mov f0, w ; f0 =>wadd f1, w ; f0+f1 =>wmovwf INDF ; store f0 + f1 in current table entryxchg f1, w ; f1=> w, f0+f1 =>f1mov w, f0 ; move previous f1 value to f0incf FSR ; FSR points no next table entrydecbnz count,loop ;count-1 => count, if # 0 goto loop
22
Interrupt
از • را ميكروپروسسور يا و ميكروكنترلر كه است اي پروسه يا و سيگنال ، وقفهتواند مي ديگري اقدام بنابراين و نمايد مي متوقف دهد مي انجام دارد كه كاري . اصلي برنامه ، دهد رخ اي وقفه وقتي اصلي برنامه اجراي هنگام در گيرد انجام
. گردد نمي آغاز آن ، نشود تمام وقفه روتين كه موقعي تا و شده متوقف•Pic . باشد مي داخلي تا دو و خارجي آنها از دوتا كه هستند وقفه چهار ي دارا هاخارجي :• هاي قفه و• rbo/int•Portb(4-7pin) داخلي :• هاي وقفه• timeroدر • نوشتن شدن eepromكاملقرار: • توجه مورد بايد را مسئله دو خارجي هاي وقفه در كار آغاز از قبل نكته
به. بايد ما آنكه اول دوم picدهيم و كنيم استفاده وقفه از خواهيم مي كه بگوييمعنوان به و هستند وقفه براي ها پين كدام كه كنيم بيان كه .i/oآن نيستند
ثبات • دو از استفاده به نياز فوق نكته انجام .intcon , optionبراي باشد مي
23
INTCON,OPTION_REG
24
Interrupt(cont)
آدرس intconثبات • قابليت 0bhدر و است گرفته يا enableقرار دارد .disableو را•GIE : ثبات از هفتم استفاده intcon بيت وقفه از خواهيم مي كه صورتي در كه است
. كنيم مي يك را آن ، كنيم• INTE :ثبات از چهارم وقفه intconبيت اينكه نمودن مشخص براي كه باشد رخ rb0مي
. شود مي ست يك به است داده• RBIE :ثبات از سوم الي intconبيت چهار بيت در وقفه نمودن مشخص براي كه است
.portbهفت شود مي ست يك به• ) مي ) رونده پايين يا و باالرونده لبه لبه كدام در كه است اين وقفه براي ديگر تعيين قابل نكته
. ثبات از مساله اين براوردن براي گيرد انجام .optionخواهد كنيم مي استفادهآدرس • در ثبات است .81hاين گرفته قرار• INTDEG :ازثبات ششم در optionبيت و باالرونده لبه بودن يك صورت در كه باشد مي
. كند مي مشخص را رونده پايين لبه بودن صفر صورتثبات • مورد در آوري ياد قابل بانك optionنكته در ثبات اين كه اين به توجه با كه است اين
و بازگشت صفر بانك به سپس و داد انجام را تغييرات و آمده يك بانك به بايد و دارد قرار يك. آورد در اجرا به را كار ادامه
•
25
Interrupt(cont)در • و برنامه در دهد مي رخ اي وقفه افتد؟ picوقتي مي اتفاقي چه• INTF :ثبات از اول صورت intconبيت به دهد مي رخ اي وقفه وقتي كه باشد مي
يك درگير برنامه كه دهد مي نشان صورت اين به و شود مي ست يك به اتوماتيك. نمايد اجرا بخواهد كه پذيرد نمي آن با همزمان را ديگري وقفه هيچ و است شده وقفه
• ، بيت اين شدن ست از .picپس رود مي نظرش مورد روتين به وقفه پردازش برايكه • باشيم متوجه بايد پردازش خاتمه از بيت picپس اين خودكار طور به كه همانگونه
نويس . برنامه صورت اين در كند نمي ست صفر به خاتمه در ، يك به كند مي ست را. بگيرد نظر مورد و دهد قرار اش برنامه در را عمل اين بايد
•: ها وقفه از استفاده مورد در توجه قابل نكاتفضاهايي • از است ممكن وقفه روتين از استفاده موقع در كه اين به توجه با
است بهتر پس ، ايد كرده مي استفاده آن از اصلي برنامه در نيز شما كه شود استفادهاستفاده آن از بتوانيد وقفه خاتمه از پس تا كنيد داري نگه واسط يك در را آنها مقادير
كنيد.مي • رخ اش بعدي وقفه كه زماني و دهد مي رخ وقفه يك كه موقعي بين را تاخيري
. كه است اين ، تاخير اين دليل كنيد ايجاد ، به picدهد پرش براي زماني به دارد نيازو ... وقفه روتين از خارج به بازگشت ، فلگ كردن ست ، وقفه آدرس
از • هفتم تا چهارم هاي را portbبيت ها پين اين لذا و دهند مي تشكيل را وقفه يك. نمود سرو وقفه براي و انتخاب توان نمي مجزا صورت به
26
Interrupt(cont)•: ها وقفه مورد در حافظه موقعيتما • كه هنگامي را picدر آن يا و كنيم مي روشن شمارنده resetرا كنيم، مي
از از 0000hبرنامه شود خوانده وقفه يك كه وقتي و كند مي آغاز 0004hآغاز . توجه با و كنيم استفاده نيز وقفه از خواهيم مي اي برنامه در وقتي لذا گردد مي
از اصلي برنامه آغاز از . 0000hبه توان مي اين براي بيانديشيم را حلي راه بايد.lableيك نمود تعريف آن توسط و كرد استفاده
از • وقفه روتين از شدن خارج . RETFIEبراي از وسيله اين به كنند مي استفاده . رويم مي ، بودند وقفه رخداد از قبل كه مكاني همان به و شده خارج روتين
• • ORG 0000h ;PIC starts here on power up and reset
GOTO start ;Goto our main program • ORG 0004h ;The PIC will come here on an interrupt
: ;This is our interrupt routine that we : ;want the PIC to do when it receives : ;an interrupt
• RETFIE ;End of the interrupt routine • start ;This is the start of our main program.
•
27
مثالاز . • برنامه اين دهد نمايش را آن و بشمارد را سوييچ شدن روشن بار تعداد كه بنويسيد اي برنامه
چهار در و شمارد مي نه تا . ledصفر در وقفه يا ورودي دهد مي نمايش باينري انجام rb0بصورت. شود مي
حل:••. كنيم مي تعريف را ثابت مقادير ابتدا در
• org 0x00 ; where we come on power up • ;*******************SETUP CONSTANTS*******************
INTCON EQU 0x0B ;Interrupt Control Register• PORTB EQU 0x06 ;Port B register address• PORTA EQU 0x05 ;Port A register address• TRISA EQU 0x85 ;TrisA register address• TRISB EQU 0x86 ;TrisB register address• STATUS EQU 0X03 ;Status register address• COUNT EQU 0x0c ;This will be our counting• TEMP EQU 0x0d ;Temporary store for w register• goto main ;Jump over the interrupt ddress
•
28
مثال ادامه• ;***************INTERRUPT ROUTINE***************• org 0x04 ; where PC points on an interrupt• movwf TEMP ;Store the value of w temporarily • incf COUNT,1 ;Increment COUNT by 1, put result• ;back into COUNT • movlw 0x0A ;Move the value 10 into w• subwf COUNT,0 ;Subtract w from COUNT, and put the• ;result in w• btfss STATUS,0 ;Check the Carry flag. It will be set if • ;COUNT is equal or is greater than w,• ;and will be set as a result of subwf• ;instruction• goto carry_on ;If COUNT is <10,• ; then we can carry on• goto clear ;If COUNT is >9,• ; then we need to clear it•
29
مثال ادامه• carry_on• bcf INTCON,0x01 ;We need to clear this flag to enable• ;more interrupts• movfw TEMP ;Restore w to value before interrupt• retfie ;Come out of the interrupt routine•
clear• clrf COUNT ;Set COUNT back to 0• bcf INTCON,1 ;We need to clear this flag to enable• ;more interrupts • retfie ;Come out of the interrupt routine• ;*******************Main Program*********************• main• ;*******************Set Up The Interrupt Registers****• bsf INTCON,7 ;GIE – Global interrupt enable)• bsf INTCON,4 ;INTE - RB0 Interrupt Enable)• bcf INTCON,1 ;INTF - Clear FLag Bit Just In Case
30
مثال ادامه
• ;*******************Set Up The Ports******************• bsf STATUS,5 ;Switch to Bank 1• movlw 0x01 • movwf TRISB ;Set RB0 as input • movlw 0x10 • movwf TRISA ;Set R 0 to RA3 on PortA as output• bcf STATUS,5 ;Come back to Bank 0
• ;************Now Send The Value Of COUNT To porta • loop• movf COUNT,0 ;Move the contents of Count into W• movwf PORTA ;Now move it to Port A• goto loop ;Keep on doing this• end ;End Of Program •
31
فوق برنامه دياگرام
32
Watchdog timerمستقل picدرون • كه را واحدي كالك كه است گرفته قرار خازن و مقاومت از شبكه
. كه هنگامي نمايد مي ايجاد ، است خارجي كالك شمارنده wdtاز يك ، شود مي فعالتا 00از و شود مي و ffشروع بازگشته صفر به دوباره و شمارد resetرا picمي
. از توان مي كه روشي كند مي آغاز را شمارش و كرد picشدن resetخواهدكه است اين ، نمود سراسربرنامه wdtجلوگيري در زماني دوره صورت به resetرا
نماييم.
از • . wdtاستفاده است شده وقفه يك دچار برنامه كه است مفيدتر زماني برايگرفتار حلقه در سبب و شده ايجاد برنامه در كه است اشكالي يك ، وقفه از منظور
. حالت اين در است گرديده ، لذا wdtشدن و شود نمي ، wdtست pic راreset ابتدا از برنامه كه شود مي سبب و كرد .restartخواهد گردد
از • استفاده براي الزم :wdtنكات
به نياز آنكه از قبل آوريم مي بدست زماني ميزان داشته picكردن resetچهباشيم.
.clearرا wdtچگونه كنيم مينويسي برنامه افزار نرم به كه picبايد دهيم .wdtاطالع نمايد فعال را درونش
33
Watchdog timer(cont)كه • ، wdtزمان كند مي طي دوره يك پايان تا آغاز . 18msاز اين البته است
و دارد را افزايش قابليت و است متغير حدي تا دما و ولتاژ به بسته زمان ميزانبنام عنصري زمان اين افزايش . picدر prescalerبراي است گرفته قرار
Prescaler توان مي هاي programرا كالك تا نمايد rcنمود تقسيم .را•Prescaler ثبات هاي optionدر بيت . 2-0در است گرفته قرار
• Bit wdt time• 000 18ms• 001 36ms• 010 72ms• 011 144ms• 100 288ms• 101 576ms• 110 1.1second• 111 2.3 second
34
Watchdog timer(cont) bcf STATUS,0 ;make sure we are in bank 0
clrf 01h ;address of the other timer – TMR0bsf STATUS,0 ;switch to bank 1clrwdt ;reset the WDT and prescalermovlw b’1xxx’ ;Select new prescaler value , assignmovwf OPTION ;it to WDTbcf STATUS,0 ;come back to bank 0
از: قبل تمام resetنكته .counterكردن شوند ست صفر به بايد ديگر هايچگونه clrwdtبوسيله به توان . wdtكردن clearمي البته گفت قبل clrwdtپاسخ بايد
كه اي نقطه . time outبه wdtز گيرد قرار ، رسد مييك از بيش به موارد اين در ، است طوالني برنامه .clrwdtاگر داريم نياز
تعداد: محاسبه instruction cycleمثال
movlw 02 movwf COUNTloop decfsz COUNT
goto loop
end 1/(4MHz/4) = 1uS cycle, 7 cycles: 7 x 1uS = 7uS.
35
سري: يك كه بنويسيد برنامه از ledمثال سپس و روشن راست به چپ از را
از آن در و نمايد روشن چپ به .wdtراست گردد استفاده نيز• TIME equ 9FH ; Variable for the delay loop.
PORTB equ 06H ; Port B address.TRISB equ 86H ; Port B Tristate address.PORTA equ 05H ; Port A address.TRISA equ 85H ; Port A Tristate address.STATUS equ 03H ; Page select register.COUNT1 equ 0CH ; Loop register.COUNT2 equ 0DH ; Loop register.
• OPT equ 81h ; Option Register to control the WDT
• ;*************Set up the ports, WDT and prescaler******************• clrf 01h ;Clear TMR0
bsf STATUS,5 ;Switch to bank 1clrwdt ;reset the WDT and prescalermovlw b’1101’ ;Select the new prescaler value and assignmovwf OPT ;it to WDT
• movlw 00H ; Now set up the portsmovwf TRISB movlw 00H movwf TRISA bcf STATUS,5 ;Come back to bank 0
• movlw 00H • movwf PORTA •
36
مثال :ادامه• ;*************Start of main program***************************** • RUN• movlw 01H ;
movwf PORTB ; call DELAY ; call DELAY ;
• ; *************Move the bit on Port B left, then pause.**************• rlf PORTB,1 ;
call DELAY ; call DELAY ; rlf PORTB,1 ; call DELAY ; call DELAY ; rlf PORTB,1 ; call DELAY ; call DELAY ; rlf PORTB,1 ; call DELAY ; call DELAY ; rlf PORTB,1 ; call DELAY ; call DELAY ; rlf PORTB,1 ; call DELAY ; call DELAY ; rlf PORTB,1 ; call DELAY ; call DELAY ; rlf PORTB,1 ;
37
مثال :ادامه• ; *************Now move onto Port A, and move the bit left.***********• rlf PORTA,1 ;
call DELAY ; call DELAY ; rlf PORTA,1 ; call DELAY ; call DELAY ; rlf PORTA,1 ; call DELAY ; call DELAY ; rlf PORTA,1 ; call DELAY ; call DELAY ;
• ;************** Move the bit back on Port A************************• rrf PORTA,1 ;
call DELAY ; call DELAY ; rrf PORTA,1 ; call DELAY ; call DELAY ; rrf PORTA,1 ; call DELAY ; call DELAY ; rrf PORTA,1 ;
• ;****************** Now move the bit back on Port B******************• rrf PORTB,1 ;
call DELAY ; call DELAY ; rrf PORTB,1 ; call DELAY ; call DELAY ; rrf PORTB,1 ;
38
: مثال ادامه• call DELAY ;
call DELAY ; rrf PORTB,1 ; call DELAY ; call DELAY ; rrf PORTB,1 ; call DELAY ; call DELAY ; rrf PORTB,1 ; call DELAY ; call DELAY ; rrf PORTB,1 ; call DELAY ; call DELAY ; goto RUN ;
• • ; ******************Subroutine to give a delay between bit movements.****** • DELAY• movlw TIME ;
movwf COUNT1 ; LOOP1 ; decfsz COUNT1 ; goto LOOP1 ; movwf COUNT1 ;
• LOOP2 ; decfsz COUNT1 ; goto LOOP2
39
: مثال ادامه• ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;
;; This part resets the WDT ;;;;Comment out or remove this command to see the WDT ;;;; in action. It should reset the PIC ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
• clrwdt ;This simply resets the WDT.•
;***************Return from our original DELAY routine***************• return ; • END ;
40
ماژول TMR0ثبات timer0ويا • و تايمر مد انتخاب ثبات counterبراي از پنجم بيت نام option_regاز با
TOCS. ميكنند استفاده TOCS=0 ----> TIMER TOSC=1 ----> COUNTER
مد • در لبه COUNTERوقتي در افزايش كه كنيم مشخص بايد ، داريم قرارثبات چهارم بيت از اين براي ، رونده پايين لبه در يا و گيرد انجام باالرونده
OPTION_REG نام كنيم .TOSEبا مي استفاده TOSE=0 ---> باالرونده TOSE=1 ---> رونده پايين
مفهوم • با نيز تايمر مورد اين prescalerدر كه اين براي لذا و هستيم رو روبهبين ثبات timer0,wdtمكان از سوم بيت از لذا ، است شده گذارده اشتراك به
option_reg نام .PSAبا گردد مي استفاده PSA=0 ----> timer0 PSA=1 ----> WDT
از • تايمر كه مي 00به FFوقتي فعال تايمر وقفه و دهد مي رخ ريزي سر رسد ميثبات . از دوم بيت تايمر وقفه نام INTCONشود . TOIFبا نمودن صفر باشد مي
. باشد مي نويس برنامه برعهده وقفه وقوع از پس وقفه اين
41
مثال:
42
داده EEPROMحافظهداده • به . EEPROMحافظه حافظه اين دارد معمول عمليات طول در نوشتن و خواندن قابليت
با مستقيم با RFSصورت غيرمستقيم صورت به گرددو نمي نگاشت دهي SFRها آدرسحافظه SFR(EECON1,EECON2,EEDATA,EEADR)ميشود. در نوشتن و خواندن براي
. اند استفاده مورد•EEDATA و دارد مي نگه نوشتن يا و خواندن براي را داده بيت موقعيت EEADRهشت آدرس
EEPROM. دهد مي قرار اختيار در ، است دسترسي قابل كه را•EECON2 در ترتيبي صورت به نوشتن موقع در بلكه ، نيست فيزيكي صورت به ثباتي
EEPROM. گيرد مي قرار استفاده مورد
43
در نوشتن و EEPROMخواندن
در EEPROMخواندن • نوشتن داده EEPROMداده
Recommended