43
1 رد خ و ان د ج داون ام ج ه ن ب ه: ل ا ق م وع ض و م در ي س ي و ن ه م ا رن بpic : دگان ن* ن ك ه ي ه ت ور0 ن ي ن ا رف ع ه م ي ه ف8 وش ه ما ن ي ر س ي

به نام خداوند جان و خرد

  • Upload
    arista

  • View
    32

  • Download
    0

Embed Size (px)

DESCRIPTION

به نام خداوند جان و خرد. موضوع مقاله: برنامه نويسي در pic تهيه كنندگان: فهيمه عرفاني پور نسرين ماهوش. برنامه نويسي در pic. گام هاي كلي در پروژه انتخاب يك pic : - PowerPoint PPT Presentation

Citation preview

Page 1: به نام خداوند جان و خرد

1

خرد و جان خداوند نام به

: مقاله موضوعدر نويسي picبرنامه

: كنندگان تهيهپور عرفاني فهيمه

ماهوش نسرين

Page 2: به نام خداوند جان و خرد

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اين واقع آن در و ها موقعيت مثل مهمي اطالعات و مهماست.

Page 3: به نام خداوند جان و خرد

3

در نويسي picبرنامهدر • آن كردن لود يا نظر picتست و pic بار مورد مدار :در

حالت programmerبوسيله در و دارد اتصال كامپيوتر پارالل پورت به كهon. كيم مي بار را برنامه ، گرفته قرار

Coding & Assembling in MPLAB 5.70

Building Circuit & testing, editing

Downloading to programmer using PICALLW

Page 4: به نام خداوند جان و خرد

4

pic16f8x

•RA0-RA4به • كه باشد مي جهته دو پورت يك

استفاده مورد خروجي و ورودي عنوانپورت يك و گيرد مي مي 5قرار بيتي

باشد.•RB0-RB7كه • باشد مي ديگري دوجهته پورت

و ورودي عنوان به و دوجهته نيز اينو گيرد مي قرار استفاده مورد خروجي

قبلي پورت با آن بيتي 8تفاوت. است بودن،آن

•VDD بين • منبع .6-2اين كند مي تغيير ولت•Vss به • باشدو مي ولت صفر منبع اين

. كند مي عمل زمين عنوان

Page 5: به نام خداوند جان و خرد

5

pic16f8x(count)•OSC1/CLK IN And OSC2/CLKOUT:

. بنابراين دهيم مي اتصال را خارجي كالك يك كه گردد مي استفاده جايي دراز مختلفي انواع .timingميكروكنترلر دارد را

•MCLR:درون • حافظه موقعيت كردن پاك .PICبراي رود مي كار به

•TOCK1:كالك يك عنوان به و گيرد مي قرار استفاده مورد دروني تايمر يك عنوان به

براي ، است نظر مورد مي ISOLATEورودي قرار استفاده مورد اصلي كالكگيرد.

•INT:• ، دارد را شدن مونيتور قابليت كه ورودي پين يك عنوان به تواند مي پين اين

. حالت در اگر گيرد قرار استفاده توقف HIGHمورد يا و كردن رست براي باشدمورد است برنامه در نظرمان مورد كه ديگري تابع انتخاب براي يا و نمودن

. گيرد مي قرار استفاده

Page 6: به نام خداوند جان و خرد

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

Page 7: به نام خداوند جان و خرد

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

Page 8: به نام خداوند جان و خرد

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

Page 9: به نام خداوند جان و خرد

9

در اسمبلی نویسی برنامه picنکات

نوش�ته باش�يم ” include “p16f84.incاگ�ر در ابت�دای برنام�ه ، از برخی تعاريف اسمبلر می توانيم استفاده کنيم.

و • دس�يمال ص�ورت ب�ه را اع�داد ت�وان می اس�مبلی در هگزاديمال و باينری استفاده کرد

در اس�مبلی می ت�وان پس از ن�ام برچس�ب دو نقط�ه گذاش�ت و •يا از آن صرفنظر کرد.

از س�تون اول آغ�از ب�ه برنام�ه نويس�ی نکني�د ، زي�را س�تون اول • است.( lable)محل نوشتن برچسب

از برنامه جدا می شوند.;توضيحات با قرار دادن عالمت •خوان�دن و نوش�تن را ب�ا برنام�ه نويس�ی می ت�وان مش�خص نم�ود. •

ب�رنل�م�ه ب�ا ا�س�ت ي�ا خ�روج�ی و ورودی اين �پين ک�ه اين� يع�نی نويسی مشخص می کرد.

نوشتن با حروف کوچک ويا بزرگ با هم تفاوت دارد.•

Page 10: به نام خداوند جان و خرد

10

در picساختارها

Page 11: به نام خداوند جان و خرد

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.

Page 12: به نام خداوند جان و خرد

12

زیربرنامهزيربرنامه قسمتی از کد يا برنامه است که در صورت نياز فراخوانی می شود. •

هنگامي مورد استفاده قرار مي گيرد كه از بخشي از برنامه بيش از يكبار استفاده گردد.

مزايا:•قرار می گيرد.pic كاهش ميزان فضای حافظه برنامه ای که درون • آسان کردن تغيير و اصالح مقادير•مراحل نوشتن يک زيربرنامه:• انتخاب يک نام • نوشتن محتوای زيربرنامه• retfie يا return استفاده از •نكته:••pic .بين برنامه اصلی و زيربرنامه ، هچ تفاوتی قائل نمی شود با • اصلي برنامه در زيربرنامه .callفراخواني گيرد مي انجام

• ROUTINE          COUNT       equ 255LABEL              decfsz         COUNT,1                         Goto            LABEL                         RETURN 

Page 13: به نام خداوند جان و خرد

13

Page 14: به نام خداوند جان و خرد

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 

Page 15: به نام خداوند جان و خرد

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

Page 16: به نام خداوند جان و خرد

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 

Page 17: به نام خداوند جان و خرد

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.

Page 18: به نام خداوند جان و خرد

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 

Page 19: به نام خداوند جان و خرد

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مقدار يابد مي انتقال

Page 20: به نام خداوند جان و خرد

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

Page 21: به نام خداوند جان و خرد

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

Page 22: به نام خداوند جان و خرد

22

Interrupt

از • را ميكروپروسسور يا و ميكروكنترلر كه است اي پروسه يا و سيگنال ، وقفهتواند مي ديگري اقدام بنابراين و نمايد مي متوقف دهد مي انجام دارد كه كاري . اصلي برنامه ، دهد رخ اي وقفه وقتي اصلي برنامه اجراي هنگام در گيرد انجام

. گردد نمي آغاز آن ، نشود تمام وقفه روتين كه موقعي تا و شده متوقف•Pic . باشد مي داخلي تا دو و خارجي آنها از دوتا كه هستند وقفه چهار ي دارا هاخارجي :• هاي قفه و• rbo/int•Portb(4-7pin) داخلي :• هاي وقفه• timeroدر • نوشتن شدن eepromكاملقرار: • توجه مورد بايد را مسئله دو خارجي هاي وقفه در كار آغاز از قبل نكته

به. بايد ما آنكه اول دوم picدهيم و كنيم استفاده وقفه از خواهيم مي كه بگوييمعنوان به و هستند وقفه براي ها پين كدام كه كنيم بيان كه .i/oآن نيستند

ثبات • دو از استفاده به نياز فوق نكته انجام .intcon , optionبراي باشد مي

Page 23: به نام خداوند جان و خرد

23

INTCON,OPTION_REG

Page 24: به نام خداوند جان و خرد

24

Interrupt(cont)

آدرس intconثبات • قابليت 0bhدر و است گرفته يا enableقرار دارد .disableو را•GIE : ثبات از هفتم استفاده intcon بيت وقفه از خواهيم مي كه صورتي در كه است

. كنيم مي يك را آن ، كنيم• INTE :ثبات از چهارم وقفه intconبيت اينكه نمودن مشخص براي كه باشد رخ rb0مي

. شود مي ست يك به است داده• RBIE :ثبات از سوم الي intconبيت چهار بيت در وقفه نمودن مشخص براي كه است

.portbهفت شود مي ست يك به• ) مي ) رونده پايين يا و باالرونده لبه لبه كدام در كه است اين وقفه براي ديگر تعيين قابل نكته

. ثبات از مساله اين براوردن براي گيرد انجام .optionخواهد كنيم مي استفادهآدرس • در ثبات است .81hاين گرفته قرار• INTDEG :ازثبات ششم در optionبيت و باالرونده لبه بودن يك صورت در كه باشد مي

. كند مي مشخص را رونده پايين لبه بودن صفر صورتثبات • مورد در آوري ياد قابل بانك optionنكته در ثبات اين كه اين به توجه با كه است اين

و بازگشت صفر بانك به سپس و داد انجام را تغييرات و آمده يك بانك به بايد و دارد قرار يك. آورد در اجرا به را كار ادامه

Page 25: به نام خداوند جان و خرد

25

Interrupt(cont)در • و برنامه در دهد مي رخ اي وقفه افتد؟ picوقتي مي اتفاقي چه• INTF :ثبات از اول صورت intconبيت به دهد مي رخ اي وقفه وقتي كه باشد مي

يك درگير برنامه كه دهد مي نشان صورت اين به و شود مي ست يك به اتوماتيك. نمايد اجرا بخواهد كه پذيرد نمي آن با همزمان را ديگري وقفه هيچ و است شده وقفه

• ، بيت اين شدن ست از .picپس رود مي نظرش مورد روتين به وقفه پردازش برايكه • باشيم متوجه بايد پردازش خاتمه از بيت picپس اين خودكار طور به كه همانگونه

نويس . برنامه صورت اين در كند نمي ست صفر به خاتمه در ، يك به كند مي ست را. بگيرد نظر مورد و دهد قرار اش برنامه در را عمل اين بايد

•: ها وقفه از استفاده مورد در توجه قابل نكاتفضاهايي • از است ممكن وقفه روتين از استفاده موقع در كه اين به توجه با

است بهتر پس ، ايد كرده مي استفاده آن از اصلي برنامه در نيز شما كه شود استفادهاستفاده آن از بتوانيد وقفه خاتمه از پس تا كنيد داري نگه واسط يك در را آنها مقادير

كنيد.مي • رخ اش بعدي وقفه كه زماني و دهد مي رخ وقفه يك كه موقعي بين را تاخيري

. كه است اين ، تاخير اين دليل كنيد ايجاد ، به picدهد پرش براي زماني به دارد نيازو ... وقفه روتين از خارج به بازگشت ، فلگ كردن ست ، وقفه آدرس

از • هفتم تا چهارم هاي را portbبيت ها پين اين لذا و دهند مي تشكيل را وقفه يك. نمود سرو وقفه براي و انتخاب توان نمي مجزا صورت به

Page 26: به نام خداوند جان و خرد

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.

• 

Page 27: به نام خداوند جان و خرد

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

•  

Page 28: به نام خداوند جان و خرد

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•  

Page 29: به نام خداوند جان و خرد

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

Page 30: به نام خداوند جان و خرد

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 •  

Page 31: به نام خداوند جان و خرد

31

فوق برنامه دياگرام

Page 32: به نام خداوند جان و خرد

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اطالع نمايد فعال را درونش

Page 33: به نام خداوند جان و خرد

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

Page 34: به نام خداوند جان و خرد

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.

Page 35: به نام خداوند جان و خرد

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               •  

Page 36: به نام خداوند جان و خرد

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                     ;  

Page 37: به نام خداوند جان و خرد

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                     ;          

Page 38: به نام خداوند جان و خرد

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                       

Page 39: به نام خداوند جان و خرد

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                                                    ;

Page 40: به نام خداوند جان و خرد

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با نمودن صفر باشد مي

. باشد مي نويس برنامه برعهده وقفه وقوع از پس وقفه اين

Page 41: به نام خداوند جان و خرد

41

مثال:

Page 42: به نام خداوند جان و خرد

42

داده EEPROMحافظهداده • به . EEPROMحافظه حافظه اين دارد معمول عمليات طول در نوشتن و خواندن قابليت

با مستقيم با RFSصورت غيرمستقيم صورت به گرددو نمي نگاشت دهي SFRها آدرسحافظه SFR(EECON1,EECON2,EEDATA,EEADR)ميشود. در نوشتن و خواندن براي

. اند استفاده مورد•EEDATA و دارد مي نگه نوشتن يا و خواندن براي را داده بيت موقعيت EEADRهشت آدرس

EEPROM. دهد مي قرار اختيار در ، است دسترسي قابل كه را•EECON2 در ترتيبي صورت به نوشتن موقع در بلكه ، نيست فيزيكي صورت به ثباتي

EEPROM. گيرد مي قرار استفاده مورد

Page 43: به نام خداوند جان و خرد

43

در نوشتن و EEPROMخواندن

در EEPROMخواندن • نوشتن داده EEPROMداده