70
1 شسش ویىش صؽ اPIC دس42 اػر ػ- IN 24 HOURS صتاؼی تی ا تشصؽ وا اc واس تاط ccs c compiler اذىا ا واس تاط اتغ تشسػی زثی زا ای واستشدی ثا ا ط خش

PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

1

ػاػر 42دس PICاصؽ یىش وسشش

-

IN 24 HOURS

اصؽ وا تشا یؼی ت صتاc

ط واس تاccs c compiler

زاثیتشسػی زاتغ ط واس تا اىااذ

خشط ا ثا ای واستشدی

vcc

Page 2: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

2

مذ

، زایش /واسش ، ADCطل ؿشور یىش زیح ی تاؿذ ، دس ای یىش وسشش ای لاتیر ای س PICیىش وسشش ای لذسزذ

.... زؼثی ؿذ اػر ، یىی دیش اص یظی ای PWM.... ، مایؼ وذ ااي ، I2C ،SPI ،RS232 ،CAN BUSخشزى ای اسزثای ظیش

اییذ . ای خااد ، لیر تاال دس تشاتش یض یثاؿذ ، ت ای و ؿا یسایذ اص ا دس زای ىا ای كؼسی .... اػسفاد

صیادی اسائ ؿذ اػر، دس ای وساب ا تا وادایش ) فؼش دیثاش ( تشای تشا یؼی سا اذاصی ای یىش وسشش ا وادایش ا فؼش ای

CCS C COMPILER . واس یىی ، ؿا یسایذ ط داد لة ای ش افضاس سا دس تخؾ هائ تاتیذ

اص یظی ای ای وادایش یسای ت اسد صیش اؿاس وی :

تؼیاس لی HELPداسای -1

اػثی Cا یؼی ت صتا ای لاتیر تش -4

داسای ادیسس خیـشفس تا لاتیر ؿاػایی دػسساذ -3

.... تشای ػایش ش افضاس ای ؿثی ػاصی دیثاش COF .SYM.داسای خشخی ای -2

طیي تؼیاس ػاد خزاب -5

دػسشػی ت وساتخا ا زاایی یشایؾ اا -6

7- .....

سا تا ای وساب ؿشع ویذ تؼذ اص یادیشی Cیثاؿذ ، ؿا یسایذ یادیشی صتا Cای یىش وسشش ا داسای وادایش اس و یذایذ ز

، KIEL) وادایش ای ARM، ؿا یسایذ ت اػای ت ػشاؽ دیش یىش وسشش ) Cوا ت ػشاؽ دیش یىش وسشش ا تشیذ ) تا یادیشی صتا

IAR ،ADS )....AVR وادایش ای (CODE vision ،winavr )....8551 وادیش ای (kiel ،franklin ) تشیذ تا اا واس ویذ )... )...

اؿا یـیذ . CCSؿس ؿذ اػر ، دس فل ا ؿا تا طیي ش افضاس ثطث 42فل 6ای وساب دس

ی تشا یؼی ت صتا ای واسوسشی LCDدس فل د تا زـشیص دػسساذ اكی ط واس تا خسذ ا اؿا خایذ ؿذ . C ، ؿا تا اك ا

یـی ، دس ای فل یاصی ت ضفظ وشد دػساسذ یؼر ، تشای یادیشی وافی اػر ثا ای ااؿ C دس فل ػ تا ػایش دػساسذ صتا

خد سا ؿثی ػاصی ویذ تا ط واس اؿا ؿیذ .

. دس فل زاس ، ط سا اذاصی لؼاذ اىااذ خاثی یىش وسشش اؿا یـی . دس ای تخؾ خشط ای واستشدی صیادی خد داسد

لل ؿـ ؿا ثاضث زىیی ػی وساب یثاؿذ . یشی تسش اسد فس ؿذ یثاؿذ ؿا هائی تشای یاد خسفل

تا ىازث ویذ . ؿا سی COMAT91SAM7X645@GMAIL.دس كسزی و دس سد اة ای وساب ػای داؿسیذ یسایذ اص شیك ایی

دس تخؾ سفغ اؿىا سػی وساب ت ـای صیش شش ویذ : یشا یىشاسا دس اد زخللی یسایذ ػا خد

ادسع اد :

http://www.iranmicro.ir/forum ػاالذ ، اسماداذ ، ظشاذ ... دس سد ای وساب :

http://www.iranmicro.ir/forum/showthread.php?t=1366 تا زـىش

www.1nafar.com

1388خاییض

Page 3: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

3

ی فل كفش : تشسػی فای ا

ثسذی ت وساب دس ای فل ت تشسػی اط ا فای اتسذایی و اص ای ت تؼذ تا اا ػش واس داسی خشداخس ای . ای فل تشای زخیص افشاد

داسیذ اص خاذ ای فل كشف ظش ویذ . اهاف ؿذ ، دس كسزی و لثال تا یىش وسشش ا واس وشد ایذ یا خیؾ صی دس اىسشیه

یىش وسشش زیؼر ؟ -1

ؿس ای زؼیی یـد ، یىشوسششیذ لث زػي تشا ای و اص آا ػىشد تاؿذ ی سیضی تشا لات و ایی ػی ت آی

اىااذ خاثی ػص ػای یثاؿذ . خشداصؽ لذسذ خشخی - سدی داسای ا وسشش یىش

یىش وسشش ز تخؾ ای داسد ؟ -2

اذ ؿذ زـىی صیش تخـای اص ا یىشوسشش:

Cpu خشداصؽ : ای تخؾ اذ غض اؼا ؼر ظیف ی وسش وشد زای تخؾ ای یىش سا ت ػذ داسد ، اضذcpu تش

واس یىذ . اػاع تشا ای و ت ا داد ؿذ

Alu طاػثاذ : ای تخؾ اضذ خشداصؽ طاػثاذ یىش وسشش اػر . دس ای تخؾ ػیاذ خغ زفشیك و خای ی وی اضذ

ػیاذ سیاهی اػر ، ادا یـد .

I /O یىی اص ساد اػسفاد ی یىش ا : سدی ا خشخی تشای اسزثاى یىش تا دیای خاسج ایداد ؿذ اذ . خشخی ا سدی

وسششا وسش وشد یه هؼیر اػر ، ثال ؿا یسایذ تا یه یىش وسشش ػیؼس سا شاضی ویذ و ت طن سد ؿا ت

سدی دسخ زظی وذ . تشای ای ػیؼس تایذ د ػؼس سا ت 44ػاخسا زشاؽ ای خا سا سؿ وشد دای ؿی سا سی

یىش وسشش سل ویذ ، یىی اص ػؼس ا تشای زـخیق تاص ؿذ دسب دیشی تشای زظی دای ؿی ت واس یشد ، سی

س سا ت یىش سل ویذ ، یىی اص س ا ، ای و ػؼس زـخیق دسب زطشیه ؿذ تایذ ك ؿد ، س ی ؿا تایذ د ػذد

ـؼ ؿی سا ای و ػؼس دا زطشیه ؿذ لغ یىذ ، ش د س اص یىش وسشش فشا یشذ تا زخ ت دیش یض اص

تشا ای و ؿا تشای یىش ؿس ایذ ، واس یىذ .

ا : یىش وسشش ای داسای ضافظ ای تشای رخیش دائ لر تشا یثاؿذ ، ای و ؿا یىش سا تشا سیضی ضافظ

تشا سا خي ت خي اص ای ضافظ ی خاذ اخشا یىذ . cpuرخیش یـد ، flashیىیذ ، تشا دس ضافظ ای ت ا

ت ا سی یىش ت ضافظ ایram . تشای رخیش وشد لر االػاذ یاص داسد

تشای س اضسی واستشا ، دس داخ ای یىش وسشش ضافظ ای ت اeeprom دس ظش شفس ؿذ اػر ، ؿا یسایذ االػاذ زطی

یشد ( ؿذ زػي یىش سا دس ای ضافظ رخیش ویذ ) االػاذ خد دس ای ضافظ تا لغ تشق اص تی

اىااذ خاثی : دس یىش وسشش ا اىاازی تشای سل وشد یىش ت دیش لؼاذ اص اىسشیه ) خسذ ایspi rs232

i2c دس ... ( زؼذادی زایش ) صا ػح ( واسش ) ؿاسذ ( ، ثذ ای ااي ت دیدسا ) تشای اسزثاى یىش تا خا الؼی ... )

ظش شفس ؿذ اػر . دس ادا تا ای اسد اؿا یـی .

دس ایشا ز یىش وسشش ای خد داسد تسشی اا وذا اػر ؟ -3

Page 4: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

4

یىش وسشش ای صیادی دس تاصاس خد داسد ، ش وذا اص ای یىش وسشش ا داسای ا ـخلاذ خاف خد ؼسذ ، اا زاس

دػس ی صیش تیـسش اػسفاد یـذ :

avr ،8051 ،pic ،arm ....

، اط ای تاال ا خاذ ی یىش وسشش ا یثاؿذ ، ثال سها اص ش اؼا ا اص خااد ی خؼسا داسا اػرpic16f84a یض

ش تیـسش اؿا یـی . اػر . دس ادا تا اػوای ای pic اص خااد ی 16اص ش)ػشی(

؟ داد ادا زا ی واسایی ز وسشش یىش تا -4

ای لؼاذ اذ یه وادیزش وزه ؼسذ یساذ ش زیضی سا وسش ذیشیر وذ ، تذ ؿه اا خاػخ ی یاص ؿا

دس زای صی ا خاذ تد .

ش سا تشا سیضی وی ؟ز یسای یه یىش وسش -5

. تشای تشا سیضی یىش وسشش اص یه وادایش زذ ش افضاس دیش اػسفاد یـد

وادایش ش افضاسی اػر و وذ ای ؿس ؿذ دس طیؾ سا ت صتا اؿی زشخ یىذ ) ز واس تا صتا اؿی تؼیاس ػخر اػر

تیؼیه cتشای یىش وسشش ا وادایش ای خسفی خد داسد و ؿا یسایذ دس اا ت صتا ، وادایش ا تخد اذذ (.

اػثی خاػىا ... تشا تیؼیذ .

ش دس تؼذ اص ؿس تشا وادای وشد ا ) زثذی ؿذ وذای ؿس ؿذ زػي واستش ت صتا اؿی سا وادای ییذ ( ، وادیا

ایداد یىذ ، ؿا تایذ ای وذ سا تا دػسای ت ا خششاش ت یىش وسشش سم hex.ىا رخیش ی تشا ی یه فای تا خؼذ

ویذ .

تشا تا ش سی ؿا یسایذ تا اػسفاد اص ش افضاس ای ؿثی ػاص ، تشا خد سا ؿثی ػاصی ویذ ) دس تخؾ هائ ط ؿثی ػاصی

افضاس خشزع اسد ؿذ اػر .(

فشق یىش وسشش ا زیؼر ؟ ش وذا ز اىاازی داسذ ؟ -6

ؿد ی ػشه خسف ای لیر دس تاؿذ ی داسا سا خاكی اىااذ وذا ش یؼر یىؼا وسششا یىش اىااذ .

ؿا یسایذ تا شاخؼ ت دیسا ؿیر یىش وسشش ا اص اىااذ ش وذا االع یاتیذ ) دیساؿیر ، یه فایpdf اػر و اص شف

ؿشور ػاصذ ی یىش وسش اسائ یـد دس ا ـخلاذ یىش وسشش خد داسد (.

... زیؼر ؟ plcؿذ ، ، س ای می ای ذاس ت ؼثر وسشش یىش ضایای -7

واس ت ذاس دس و ایی ػی آی زؼذاد. دذ ادا سا می یر زذی واس و وشد سیضی تشا سی زا ی سا وسشش یىش یه

ؿر خذیذ ای تشا یىش سی یسا تاس ضاسا زا داد زغییش سا وسشش یىش تشا زا ی ساضسی ت. یشػذ ضذال ت یشد

. وشد خان یا

تشا ؿد اػسفاد وسشش یىش اص و دسكسزی ی ػاخر سا آ ـات وشد ودی می ذاس یه سی اص یسا ساضسی ت

. شفر ودی آ اص زا ی ػا یر ت وشد لف سا یىش

Page 5: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

5

ػسع ای صیادی خد داسد ، لؼاذ خاثی اا دس تاصاس ت ػادی یافر یىش وسششا تؼیاس اسصا ؼسذ تشای اا ثا ا

یـد تا وسشی ضی یسا ذاس شاضی ؿذ تا اا سا زغییش داد .

( زیؼر ؟pin ( ( خی portف خسذ ) -8

یىش وسشش ا داسای زذی خای یثاؿذ و زؼذاد دلیك اا ت ع یىش تؼسی داسد ، دس ای تی خای ایi/o 8ت دػس ای

ػذدی زمؼی تذی ؿذ اذ ، ت ش وذا اص ای دػس خسذ فس یـد . خغ ی زا فر خی ا خای ای یىش وسشش خسذ

ی اػر .خ 8دع

ؼال خسذ ا سا تا ا ایA یاB یاC یا 7زا 0 یا ... خی ا سا تا ا ایVCC . یا شاذ یا ... ا زاسی یىذ

وشیؼسا زیؼر ؟ -9

ذ وشیؼسا لؼ ای اػر و ت یىش سل یـد یىش زػي خاغ ای خشخی ا صا خد سا زظی یى

یىش وسشش خد دس زلیش تاال 24و دس خ ی خای ی ؿاس RD1/PSP1خای ای یىش ز واسی ادا یذذ ، ثال ف -14

ؿس ؿذ زیؼر ؟

تخؾ تشا خای ای یىش وسشش ؼال داسای زذی مؾ دضا ؼسذ یساذ دس ضاسی خاف خیىشتذی ؿذ ، دس ادا دس

یؼی دس سد واستشد خای ا زهیص داد ای ، ؿا سی یسایذ تا شاخؼ ت دیساؿیر ای فاسػی و دس خؿ ی خیػر خد

اػر اص واستشد ش خای االع یاتیذ .

اسج اػر ، ؿا یسایذ تا شاخؼ ت ادسع تیا وشد اا اص ضك ی ای وساب ختذ ؿه ػاالذ دیشی یض دس ر ؿا خد داسد ، و

صیش ػا خد سا شش اییذ دس وسشی صا خاب ا سا تیاتیذ :

http://www.iranmicro.ir/forum/showthread.php?t=1366

Page 6: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

6

فل ا

: ccsاؿایی تا طیي

خشداخس ای . تؼذ اص خاذ ccsدس ای فل للذ ذاسی زا تا زهیطاذ اهاف ؿا سا خؼس وی ت ی دی تا یه ثا ػاد ، ت تشسػی طیي

ش ا سا ؿثی ػاصی ای فل ؿا تا ط ؿس / یشایؾ تشا اؿا خایذ ؿذ ، ؿا یسایذ تشا خد سا وادای خا یاتی ویذ دس اخ

. ػدغ ت یىش سم ویذ

سا اسخاب ویذ : pic c copilerضی ی pic-c ی all program تخؾ startتشای تاص وشد ش افضاس اص ی

داسد یسایذ طیي ای وادایش تا دیش وادایش ای یىش وسششی سفاذ یثاؿذ . دس ای ش افضاس ا صیش ا دس دػشع ؿا لشاس

ا صیش ا سا یشایؾ ویذ ت ػادی زای

سا اسخاب ویذ دس خدش تاص ؿذ تؼذ اص اسد PIC Wizard ای ضی یاص ضی ای تشای واس تا خشط ا خد داسد . projectدس ی

ویه ویذ : save( تش سی ضی ی file nameوشد ا خشط ) دس فیذ

تاص یـد . ؿا یسایذ دس ای تخؾ اىااذ اص خاثی سا فؼا ویذ ، تا ای ای واس وادایش pic wizardتؼذ اص رخیش وشد خشط خدش ی

، دس وذ ای سد یاص سا ت كسذ خدواس ت تشا اهاف یىذ .) تسش اص فؼال اص دیش ساد زـ خؿی ویذ ثك اة خیؾ تشیذ

ای تخؾ خای خشداخر ( تخؾ ای تؼذی ت تشسػی وا

oscillator frequencyیىش وسشش دخا سا اسخاب ویذ ، سی دس تخؾ deviceدس خی ضی ی generl دس خار PIC Wizardدس خدش

ویه ا ییذ ) فؼال تا دیش تخؾ ا واس ذاؿس تاؿیذ ( : okفشواغ واسی یىش تش ضؼة شزض سا دسج ویذ تش سی

Page 7: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

7

ا لشاس تا رخیش وشد زظیاذ ، یشایـش ش افضاس تاص ی ؿد ، وی وذ ای خد دس یشایؾ ش سا خان ویذ ت خای اا وذ ای صیش س

دیذ :

#include <16f84.h> //micro name

#use delay(Clock=20000000) // oscillator frequency

main)(

{

set_tris_b(0x00); //set port b as outputs

while(true)

{

delay_ms(1000); //wait 1

output_high(PIN_B0); //set portb.0 ( turn on led)

delay_ms(1000); //wait 1 output_low(PIN_B0) ; //reset portb.0 ( turn off led)

}

}

اص ػخر تد وذ ا سشػیذ ، لسی تا اا اؿا ؿیذ ت ػادی اا خی خایذ تشد .

زشخ یشدد hexت وذ cویه اییذ ، تا ای واس خشط وادای یـد ) وذ build allتشیذ دس ادا تش سی ضی ی compileاو ت ی

( دس كسذ خد ثد خا وذ ض دس ط رخیش خشط زیذ یشدد :

Page 8: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

8

فضاس ای ؿا فك ؿذیذ ای خشص خد سا ودای ویذ . او ؿا یسایذ وذ ض سا زػي خششاش ت یىش سم ویذ ، یا زػي ش ا

تشا خد سا ؿثی ػاصی ویذ ، دس صیش ذاس شتى ت تشا تاال سا ـاذ یىیذ : خشزع mplabؿثی ػاصی اذ

) دس تخؾ هائ ، ط خششا وشد ؿثی ػاصی تشا زهیص داد ؿذ اػر (

ػیؼسؿا سی یسایذ اص یضاسد اػسفاد ىیذ ، دس ای ضار دس ىا دخا تش سی

ایداد ویذ : C.خد یه فای سی تا خؼذ

سا اسخاب ویذ : create ضی ی Projectاص ی

Page 9: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

9

دس خدش ی تاص ؿذ ، ت ىا رخیش ی فای سی تشیذ ا سا تاص ویذ :

ویه اییذ ، aplayدس خدش ی خذیذی و تاص یـد ، یىش وسششی سا و للذ داسیذ تشایؾ تشا تیؼیذ سا اسخاب ویذ ػدغ تش سی

فای سی ت خشط ی خذیذ اهاف یـد خشط دس واس فای سی رخیش یـد .

تششدیذ وذ ای خ سا دس ادیسس ودی ویذ شاض سا ادا دیذ . 8او ت كفط ی

Page 10: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

10

تیاتیذ : toolsاىااذ خاثی تشای واس تا یىش وسشش ا وذ ای خشخی خد داسد ، ؿا یسایذ ای اسد سا دس ی CCS C COMPILERدس

Device Editor دس ای تخؾ ، دػ االػاذ واستشدی تشای ش یىش وسشش خد داسد :

- MCU parts ای تخؾ دس ای تخؾ دػ ای اص االػاذ واستشدی لؼ ؿا زظیاذ ای تشای وادایش ، زؼذاد خسذ خای ... خغ اسی ؿذ اػر ، دس

4msسا ت WDT baseضی ی Other featuresسا اسخاب ویذ ، دس تخؾ pic16f84ایذ االػاذ سا زغییش دیذ ) تسش اػر ای واس سا ىیذ ( ، ثال یىش وسشش یس

زغییش یىذ ) دس ادا تا ای زایش تیـسش اؿا خای ؿذ ( .یی ثای 2یی ثای ت 18زغییش دیذ ػدغ زغییشاذ سا رخیش ویذ ، تا ای واس زاخیش زایش اذ داي اص

- Selection tool دس ای تخؾ یظی یىش وسشش ای :pic خغ اسی ؿذ اػر ؿا یسایذ تا زخ ت االػاذ خد یىش وسشش سد یاص خد سا اسخاب

ویذ .

File Compare - ضم ا ، فی سغیشا : دس ای تخؾ یسایذ د فای تا خؼذ یىؼا سا اص ظش وذ داخی ، تا مایؼ ویذ . مایؼ تش ثای خیىشتذی اا ا ، ؼش

... ادا یـد .

Disassembler Binary File to C اص : اوثش افشادی و الذا ت ؿس تشا تشای ماكذ زداسی یىذ ، فمي وذ ض سا دس اخسیاس لشف وذ لشاس ی دذ ، تا اػسفاد

زثذی ویذ . دس ا اػسفاد ـخق وشد فشر سدی سا فشاؽ ىیذ . cد سد یاد ؿذ یسایذ وذ ض سا ت اػثی یا

اىااذ دس ادا اؿا یـی تا دیش

فل د ای واسوسشی LCDدػسساذ اكی ط واس تا خسذ ا

زـىی یـد ، lcdدػسساذ شتى ت -3دػسساذ شتى ت خسذ ا -4دػسساذ اكی ط تشا یؼی -1ای فل اص ػ صیش دػ

خسذ ا تا ثا ای سؼذد زـشیص lcdدس تخؾ ا ت تشسػی تذ ط تشا یؼی یدشاصی ، دس تخؾ ای تؼذی دػسساذ شتى ت

خاذ ؿذ .

تشای سا اذاصی شػی خاثی ... یه فای ذس خد داسد ، دس ا ؿس تشا ای خى ت فشاخای فای ای ذس اخسلاف cدس صتا

یثاتذ :

#include <xxxx.h>

Xxxx یساذ ا یىش یا ػی خاثی و وساتخا ا دس ط رخیش خشط یا خؿDevices یاDrivers ، دس ط لة ش افضاس ، خد یاؿذ

تاؿذ .) دس ادا دس سد وساتخا ا فای ای ذس تیـسش زهیص یذی ( .

ثا :

Page 11: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

11

#include <16C56.h>

#include <graphics.c>

#include <math.h>

) mathشافیىی ( lcd)ؿا دػسسازی تشای سا اذاصی graphics.c( 16C56)ؿا سیدؼسش ای یىش وسشش 16C56دس تشا تاال فای ای

ت ؿا اخضا اػسفاد اص دػسساذ ؿا دػسسازی تشای ادا طاػاتاذ سیاهی ( دس تشا فشاخای یـذ ، تا فشاخای ای فای ا ش افضاس

تیـسشی سا یذذ .

تؼذ اص فشاخای فای ای ذس تر ت خیىش تذی اىااذ خاثی یشػذ ، تشای خیىش تذی اىااذ خاثی اص دػسس :

#use

اػسفاد یـد ، ثال :

#use delay(clock=20000000(

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7(

سا خیىشتذی یایذ . rs232ای دػسس ، فشواغ واسی یىش تشای ایداد زاخیش سا ـخق یىذ دػسس د خشزى

تؼذ اص خیىشتذی اىااذ خاثی ، ؿا تایذ یه ضم اكی زؼشیف ویذ ، دػسساذ خد دس ای ضم تشا اكی ؿا خاذ تد .

: c ا یؼی ت صتالای تش

)وا( خس یـذ ;وی دػسساذ اخشایی ت -1

ش تشا داسای یه ضم یا زاتغ اكی اػر -4

تشای اهاف وشد زهیطاذ تایذ اص // اهاف ؿد ) زهیطاذ خد دس یا // زهیطاذ // ، دس تشا وادای یـذ فمي تشای -3

اهاف یـذ ( داد االػاذ ت واستش تؼذی

یىؼا یؼر . Aتا aضشف وزه تضسي تا فشق داسذ ، c دس صتا -2

اتك صیش خاذ تد : cتذی زشزیة تذ یه تشا ت صتا

فشاخی فای ای ذس ) ؼشفی یىش اىااذ خاثی (

ؼشفی سغیش ا خیىشتذی اىااذ خاثی

ؿشع ضم اكی

دػسساذ

خایا ضم اكی

صیش تشا ا ) دس كسذ خد (

ثا :

#include <16f84.h>//micro name

ؼشفی یىش

#use delay(Clock=2000000)// oscillator frequency

زؼیی وشد فشواغ وشیؼسا تشای ایداد زاخیش

main)(

Page 12: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

12

{

ؿشع ضم اكی

set_tris_b(0x00); //set port b as outputs

b.0لشاس داد خسذ ت ػا خشخی

while(true)

{

1ضم ؿاس

delay_ms(1000);//wait 1

ثای 1زاخیش صای ت مذاس

output_high(PIN_B0); //set portb.0 ( turn on led)

b.0سؿ وشد خای

delay_ms(1000);//wait 1

ثای 1زاخیش صای ت مذاس

output_low(PIN_B0); //reset portb.0 ( turn off led)

b.0 خاؽ وشد خای

}

1خایا ضم ؿاس

}

خایا ضم اكی

ی دػسساذ زهیص داد ؿذ ، دس ادا وی ای سد اػر c، یىی اص خاف ى اػر ؿا اص دػسساذ اػسفاد ؿذ دس تاال زیضی فیذ

اػر ، خغ شا ثاؿیذ ....

شتى ت سا اذاصی خسذ ا :دػسساذ

سذ یا خای سا تا دػسساذ صیش ای لذ تشای واس تا یه خسذ یا خای ، ـخق وشد هؼیر ا اػر ، ؿا تایذ سدی یا خشخی تد خ

ـخق ویذ :

SET_TRIS_x( y)

هؼیر خای ای خسذ ـخق ؿذ اػر ، ثا : yا خسذ یثاؿذ xدس دػسس تاال

SET_TRIS_B( 0x0F );

ت B3,B2,B1,B0ت ػا خشخی خای ای B7,B6,B5,B4لشاس یذذ ، دس ای ضار خای ای bخسذ i/oض سا دس سیدؼسش 0fدػسس تاال مذاس

ػا سدی خیىشتذی یـذ .

خیىشتذی سا ت ػا خشخی pic16f84aسا ت ػا سدی ػایش خای ای یىش وسشش bخسذ 5 3 5 ای خای aخسذ 3 4خای ای

ویذ :

: aخسذ

Page 13: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

13

تاؿذ ، تشای تذػر اسد مذاس سیدؼسش ای ػذد سا ت ض زثذی یىی دس دػسس تاال لشاس B00001100& تایذ ت كسذ aهؼیر خسذ

یذی :

set_tris_A(0x0c);

: bخسذ

تاؿذ ، تشای تذػر اسد مذاس سیدؼسش ای ػذد سا ت ض زثذی یىی دس دػسس تاال لشاس B00101001&تایذ ت كسذ bهؼیر خسذ

:یذی

set_tris_B(0x29);

ىس :

.خد داسد toolsدس ی Numeric Converterاػسفاد ویذ، Numeric Converterتشای زثذی اػذاد دس ثای تایشی ت ض ، یسایذ اص -

.شاخ ویذ "شػسا سؿس اىسشیه ػا ػ –:ثای دیدسا "ػاذ تیـسش دس سد ثای اػذاد ، ت وساب التشای دسیافر ا -

ػسساذ صیش ػالیر دخا سا تش سی خسذ یا خای اد دیذ :دتؼذ اص ـخق وشد هؼیر خسذ ، ؿا یسایذ تا اػسفاد اص

output_low(PIN_xy);

سا سیؼر یىذ ) صی یىذ ( ، ثا : yاص خسذ Xدػسس تاال خای

output_low(PIN_B0);

output_low(PIN_A1);

یىش سا كفش یىذ . Aاص خسذ 1 دػسس د خای Bاص خسذ 5دػسس ا خای

output_high(PIN_xy);

سا ػر یىذ ) یه یىذ ( ، ثا : yاص خسذ Xدػسس تاال خای

output_low(PIN_B5);

output_low(PIN_A3);

ساط Aاص خسذ 3دػسس د خای Bاص خسذ 5دػسس ا خای ر ( ظس اص 5یىش سا یه یىذ .) ظس اص یه ، ػص می یه )

ساط ر ( اػر ( 5كفش ، ػص می كفش )

OUTPUT_x(y);

ػص می خای ای خسذ ـخق ؿذ اػر ، ثا : yا خسذ یثاؿذ xدس دػسس تاال

OUTPUT_B(0x0f);

دس هؼیر B3,B2,B1,B0دس هؼیر كفش خای ای B7,B6,B5,B4لشاس یذذ ، دس ای ضار خای ای bض سا دس خسذ 0fسس تاال مذاس دػ

یه لشاس یشد .

output_toggle(PIN_xy);

سا ؼىع یىذ ، یؼی اش خای لثال دس ػص می كفش لشاس داؿس تاؿذ ، تؼذ اص ای دػسس یه یـد x اص خسذ yدػسس تاال هؼیر خای

اش دس ػص می یه لشاس داؿس تاؿذ ، تؼذ اص ای دػسس كفش یـد ، ثا :

output_toggle(PIN_B4);

output_bit( PIN_xy, value);

لشاس یذذ ، ثا : y اص خسذ xیا هؼیر یه خای دیش تاؿذ سا دس خای 1یا 5اذ و یس valueدػسس تاال مذاس

Page 14: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

14

output_bit( PIN_B0, 0);

دس هؼیر كفش لشاس ییشد . b.0تؼذ اص دػسس تاال خای

value = input (PIN_xy)

bitیض ت ػا یه سغیش اص خغ input (PIN_xy)رخیش یىذ ، ؿا یسایذ اص دػسس valueسا دس سغیش x اص خسذ yدػسس تاال هؼیر خسذ

اػسفاد ویذ ثا :

output_bit( PIN_B0,input( PIN_B1 ) );

یض یه یـد ، تا كفش ؿذ b.0خای b.1لشاس یشد ) دس كسذ یه تد خای b.0تشسػی یـد هؼیر ا دس خای b.1تا ای دػسس ، خای

b.1 خای b.0 ) یض كفش یـد

value = input_x();

یشیضد ، ثا: valueسا دس سغیش x دػسس تاال مذاس خسذ

data = input_b();

ج دس هؼیر یه لشاس دس هؼیر كفش خای ای ص bسیخس یـد ) ثال اش خای ای صج خسذ dataدس سغیش b مذاس خد دس خسذ

دس ثای دػیا ( یـد . 175دس ثای ض 0xaaدس ثای تایشی ) 10101010 تشاتش تا dataداؿس تاؿذ ، مذاس سغیش

port_x _pullups (TRUE/ FALSE)

ػاصی ای مار ا اص دػسس تاال اػسفاد یـد . دض ت مار ای تاال وـذ داخی یثاؿذ ، تشای فؼا picخسذ ای یىش وسشش ای

x ا خسذ یثاؿذ تا اػسفاد اص دػسس TRUE مار ا فؼا تا دػسس FALSE : مار ا غیش فؼا یـذ ، ثا

port_a_pullups(TRUE);

سا فؼا یىذ . a( خسذ pull-upsدػسس تاال مار ای تاال وـذ )

ساذ زاخیش :دػس

#use delay (clock=x)

مذاس وشیؼسا xتشای اػسفاد اص دػسساذ زاخیش ، اتسذا تایذ فشواغ واسی یىش سا ـخق ویذ ، تشای ایىاس اص دػسس تاال اػسفاد یـد

اػسفاد ؿذ تش ضؼة شزض اػر ، ثا :

#use delay (clock=2000000)

زاخیش ت ا شزض واس یىذ .) دس كسزی و مذاس دسج ؿذ تا فشواغ واسی یىش تشاس ثاؿذ ، دػسساذ 4دس ای ضار یىش تا وشیؼسا

وشد (. دسػسی واس خاذ

delay_us(time);

ا ؿذ ، ثال :ت 65535-0یساذ تی timeیىش ثای سا ت خد یاسد ، timeدػسس تاال زاخیش صای

delay_us(155);

یىش ثای ایداد یـد ، ػدغ تشا اص خي تؼذ اص دػسس دثا یـد . 155یىش ت دػسس تاال ، زاخیش cpuتا سػیذ

delay_ms(time);

:تا ؿذ ، ثال 65535-0یساذ تی timeیی ثای سا ت خد یاسد ، timeدػسس تاال زاخیش صای

delay_ms(3005);

ثای ایداد یـد ، ػدغ تشا اص خي تؼذ اص دػسس دثا یـد . 3یىش ت دػسس تاال ، زاخیش cpuتا سػیذ

زذ خشط :

Page 15: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

15

: 1خشط ؿاس

ثای ت زشزیة سؿ خاؽ 1تا زاخیش pic16f84یىش وسشش bتشا صیش شتى ت یه زـه ص یثاؿذ ، دس ای خشط خای ای خسذ

یـذ :

#include <16f84.h>//micro name

#use delay(Clock=2000000)// oscillator frequency

Main(){

set_tris_b(0xff);//set all pin as output

while(true){

OUTPUT_B(0x01);//portb=00000001 bin

delay_ms( 1000 );//wait 1 sec

OUTPUT_B(0x02);//portb=00000010 bin

delay_ms( 1000 ) ;//wait 1 sec

OUTPUT_B(0x04);//portb=00000100 bin

delay_ms( 1000 );//wait 1 sec

OUTPUT_B(0x08);//portb=00001000 bin

delay_ms( 1000 );//wait 1 sec

OUTPUT_B(0x10);//portb=00010000 bin

delay_ms( 1000 );//wait 1 sec

OUTPUT_B(0x20);//portb=00100000 bin

delay_ms( 1000 );//wait 1 sec

OUTPUT_B(0x40);//portb=01000000 bin

delay_ms( 1000 );//wait 1 sec

OUTPUT_B(0x80);//portb=10000000 bin

delay_ms( 1000 );///wait 1 sec

}

}

تشا تاال و تا دػسساذ دیش ؿس ؿذ اػر :

#include <16f84.h>//micro name

#use delay(Clock=2000000)// oscillator frequency Main(){

set_tris_b(0xff);//set all pin as output

while(true){

output_low(PIN_B7);//reset pin (led off)

output_high(PIN_B0);// set pin (led on)

delay_ms( 1000 );//wait 1 sec

output_low(PIN_B0);//reset pin (led off)

output_high(PIN_B1);// set pin (led on)

Page 16: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

16

delay_ms( 1000 );//wait 1 sec

output_low(PIN_B1);//reset pin (led off)

output_high(PIN_B2);// set pin (led on)

delay_ms( 1000 );//wait 1 sec

output_low(PIN_B2);//reset pin (led off)

output_high(PIN_B3);// set pin (led on)

delay_ms( 1000 );//wait 1 sec

output_low(PIN_B3);//reset pin (led off)

output_high(PIN_B4);// set pin (led on)

delay_ms( 1000 );//wait 1 sec

output_low(PIN_B4);//reset pin (led off)

output_high(PIN_B5);// set pin (led on)

delay_ms( 1000 );//wait 1 sec

output_low(PIN_B5);//reset pin (led off)

output_high(PIN_B6);// set pin (led on)

delay_ms( 1000 );//wait 1 sec

output_low(PIN_B6);//reset pin (led off)

output_high(PIN_B7);// set pin (led on)

delay_ms( 1000 );///wait 1 sec

}

}

خشط ی تاال :ى ت تو دس ایذ ت اا اؿاس یـد . ذاس ش تاال سؽ ای صیادی خد داسد اتشای ؿس تش

: 4خشط ؿاس

زوس خاؽ ی ؿد : led ساظش سؿ تا لغ زطشیه led دس ای خشط تا زطشیه ش ویذ

Page 17: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

17

#include <16f84.h>//micro name

#use delay(Clock=2000000)// oscillator frequency

main(){

set_tris_b(0x1f);//set portb.0,portb.1,portb.2,portb.3,portb.4 as outputs

set_tris_a(0x00);//set porta.0,porta.1,porta.2,porta.3,porta.4 as inputs

while(true){

output_bit( PIN_B0,input( PIN_a0 ) );//portb.0=porta.0

output_bit( PIN_B1,input( PIN_a1 ) );

output_bit( PIN_B2,input( PIN_a2 ) );

output_bit( PIN_B3,input( PIN_a3 ) );

output_bit( PIN_B4,input( PIN_a4 ) );

}

}

ذاس شتى ت خشط تاال :

واسوسشی : lcdدػسساذ شتى ت سا اذاصی

دس زذی ع ػاخس یـذ داسای زذ ػش ػس ی تاؿذ و ا زاسی اا تشثای ػش ػس ی تاؿذ . lcdای ع

Page 18: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

18

اسد ؿذ اػر: lcdدس صیش ا ای

ػس ی تاؿذ. 16: و داسای یه ػش 1*16

16*1a دسع دی وشد. یسا ػس ـس ت تؼذ ا سا ا ػس ی تاؿذ 16: و داسای یه ػش

ػس ی تاؿذ. 16ػش 4: و داسای 2*16

ػس ی تاؿذ . 16ػش 2:و داسای 4*16

ػس ی تاؿذ. 45ػش 4:و داسای 2*20

ػس ی تاؿذ. 45ػش 2:و داسای 4*20

ػس ی تاؿذ. 25ػش 4:و داسای 2*40

ػس ی تاؿذ. 25ػش 2: و داسای 4*40

دس صیش اسد ؿذ اػر : ، ا خای ا خای ی تاؿذ 16ای واساوسشی داسای lcdزا

اػر تایذ ت صی ذاس ك ؿد. lcd، ای خای ،خای شاذ VSS: 1خای ؿاس

ر ك ؿد. 5اػر و تایذ ت VCC، LCDای خای خای VDD: 4خای ؿاس

:اػر صیش سا زؼیی یىذ ازلا ا ثك ذاس LCDای خای سؿایی خیىؼ ای VEE: 3خای ؿاس

تشای شفس دػسساؼ ااد ی ؿد دس غیش ای lcdتاؿذ rs =0ؼ داد خد داسد اش د سخیؼسش ت ا دػسسا lcdدس ، RS: 2خای ؿاس

.ؿس ؿد یه داد اػر lcdو تایذ سی qwerیه دػسس اؼ اػر clsكسذ تشای داد .ثال دػسس

. lcdتشای ؿس دس lcd rw=0تشای خاذ اص rw =1ای خای د هؼیر داسد ، RW: 5خای ؿاس

.سا اسخاب وشد LCDا ای خای ی زا ت E: 6خای ؿاس

.یثاؿذ )خای دیسا ی كفش( LCDای خای تشای شفس دیسا )اال ػاذ( اص DB0: 7خای ؿاس

.یثاؿذ )خای دیسا ی یه( LCDای خای تشای شفس دیسا )اال ػاذ( اص DB1: 8خای ؿاس

.یثاؿذ )خای دیسا ی د( LCDای خای تشای شفس دیسا )اال ػاذ( اص DB2: 9خای ؿاس

.یثاؿذ )خای دیسا ی ػ( LCDای خای تشای شفس دیسا )اال ػاذ( اص DB3: 15خای ؿاس

.یثاؿذ )خای دیسا ی زاس( LCDای خای تشای اسػا دیسا )اال ػاذ( ت DB4: 11خای ؿاس

.یثاؿذ )خای دیسا ی خح( LCDای خای تشای اسػا دیسا )اال ػاذ( ت DB5: 14اس خای ؿ

.یثاؿذ )خای دیسا ی ؿؾ( LCDای خای تشای اسػا دیسا )اال ػاذ( ت DB6: 13خای ؿاس

.فر(یثاؿذ )خای دیسا ی LCDای خای تشای اسػا دیسا )اال ػاذ( ت DB7: 12خای ؿاس

.ر سل یـد5ی تاؿذ و ت LCDخـر LEDزغزی 16: ای خای خای ؿاس 15خای ؿاس

Page 19: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

19

.ر سل یـد5ی تاؿذ و ت LCDخـر LEDزغزی 15: ای خای خای ؿاس 16خای ؿاس

یـد . db3زا db0تیر سا اذاصی ویذ ، دس ای ضار اص خای ای 2سا ت كسذ lcdؿا ایذ ccsدس وادایش اػسفاد

ی لذ تشای سا اذاصی ccsاذ دیش وادایش ا ، دس ؼشفی خای ای ا یثاؿذ ، تا اػسفاد اص دػسس صیش ـخق یىی و خای ای lcdیض ا

lcd سل ؿذ اذ :ت وذا خسذ اص یىش

#define use_portx_lcd TRUE

X یساذd یاb تاؿذ ، وساتخاlcd خد دسccs فمي اص ازلاlcd ت خسذ ایb d یىش خـسیثای یىذ . ) اس و یذایذ خسذb دس

یض اغة ت ػا یه سدی / خشخی ػادی دس یىش dسذ خی ( خد داسد ، خ 8) ت خض یىش وسشش ای picزای یىش وسشش ای

وسشش ا یافر یـد . (.

ت lcdیض اذ وذیظ .... اىا ؼشفی خای ای ccsاذ صیش خاذ تد ) دس lcd( ، ازلا خای ای dتا اسخاب خسذ اػة ) ثال خسذ

كسذ دضا خد ذاسد ( :

یىشخای LCDخای

enable pord.0

rs pord.1

rw pord.2

not used pord.3

D4 pord.4

D5 pord.5

D6 pord.6

D7 pord.7

دس تشا یثاؿذ ، تا فشاخای ای وساتخا دػ دػسساذ صیش دس اخسیاس ؿا لشاس ییشد : LCDدی شض ، فشاخای وساتخا

#include <lcd.c>

تا دػسس تاال ادا یـد . LCDفشاخای وساتخا ) ذس (

lcd_init();

سا فؼا یىذ . LCDدػسس تاال

lcd_gotoxy(Y,X);

اغاص ی ؿد .( Y ػس X) ایؾ اص ػش یثشد . Y ػس Xدػسس تاال ىا ا سا ت ػش

lcd_putc("CODE");

اسػا ویذ : LCDاسػا یىذ ، ؿا یسایذ تا دػسس تاال سغیش دخا سا یض ت LCDسا ت CODEدػسس تاال سؿس

lcd_putc("VAR");

VAR .) ا سغیشی اػر و لثال دس تشا ؼشفی ؿذ اػر . ) دس ادا دس سد ؼشفی سغیش ا دػسساذ شتى ت اا زهیص داد ای

اسػا LCDسا ت SPACEؿا یسایذ دػ ای اص واسوسش ای LCDذاسد ، تشای خان وشد LCDان وشد وساتخا فق ، دػسسی تشای خ

ویذ :

lcd_gotoxy( 1, 1);

lcd_putc(" ");

Page 20: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

20

خد داسد سا یشایؾ ویذ : Program Files\PICC\Driversدس ؼیش LCD.Cسا و تا ا LCDؿا سی یسایذ وساتخا

یذص تاص ویذ دس اخش ا وذ صیش سا اهاف ویذ : Notepadسا تا LCD.Cفای

void lcd_clear () {

lcd_send_byte(0,0x01);

lcd_send_byte(0,0x02);

}

خان یـد : lcdتا افضد وذ ای تاال دػسس صیش ت دػ دػسساذ ای ذس اهاف یـد ، تا ای دػسس

lcd_clear ();

، یسایذ دػسساذ تیـسشی سا ت ای ذس اهاف ویذ ) دػسازی ظیش سؿ خاؽ وشد ىا ا ، ؿیفر داد lcdتا اؼ دیساؿیر

( .االػاذ ....

: printfدػسس

Printf یىی اص واستشدی زشی دػسساذ صتاc : یثاؿذ ، ا یسای اص ای دػسس ت سؽ ای صیش اػسفاد وی

printf (string)

printf (cstring, values...) printf (fname, cstring, values...)

fprintf (stream, cstring, values...)

یسای یه ػذد یا سؿس یا .... سا ت تخؾ ای وزىسش زمؼی وشد دػسا خاثی اسػا وی : Printfتا دػسس

printf(lcd_putc,"%format",var);

lcdت و فشر ا دس تاال اسد ؿذ اػر ، تشای اسػا سغیش ا یا اػذاد كطیص printfو دس تاال ت ؼشفی ا خشداخسی ، اص دػسس lcdوساتخا

:سغیش یا ػذد اسػای اػر varط اسػا داد formatواسوسشی اػسفاد یىذ . دس ای دػسس

printf(lcd_putc,"%u",m);

ذ ) ت ػذد اسػا یى LCDت 0000.00یا دػسس صیش سغیش خد سا ت فش تاؿذ ، 455زا 5یساذ اص mاسػا یىذ ، lcdسا ت mدػسس تاال سغیش

دس ادا دس تخؾ اسزثاى ػشیا تا ای دػسس تیـسش اؿا یـی . خد د سل اػـاس اهاف یىذ ( ...

printf(lcd_putc,"%f",g);

: 3 ؿاس خشط

: اػر ؿذ ػاخس زمی ػاػر یه pic16f84 وسشش یىش واسوسشی lcd اص اػسفاد تا خشط ای دس

#include <16F877.h>

#use delay(clock=2000000)

Page 21: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

21

#define use_portb_lcd TRUE

#include <lcd.c>

void main() {

int sec,min=11,hor=16,day=25,mon=7,yar=88;

lcd_init();

while (1) {

lcd_gotoxy( 1, 1);

lcd_putc(" : : ");

lcd_gotoxy( 1, 2);

lcd_putc(" : : ");

sec++;

lcd_gotoxy( 7, 1);

printf(lcd_putc,"%u",sec);

if (sec==59){

sec=0;

min++;}

lcd_gotoxy( 4, 1);

printf(lcd_putc,"%u",min);

if (min==59){

min=0;

hor++;}

lcd_gotoxy( 1, 1);

printf(lcd_putc,"%u",hor);

if (hor==23){

hor=0;

day++;}

lcd_gotoxy( 7, 2);

printf(lcd_putc,"%u",day);

if (day==30){

day=1;

mon++;}

lcd_gotoxy( 4, 2);

printf(lcd_putc,"%u",mon);

if (mon==12){

mon=1;

yar++;}

lcd_gotoxy( 1, 2);

printf(lcd_putc,"%u",yar);

Page 22: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

22

delay_ms(999);

}

}

فل ػ

cػایش دػسساذ صتا

Page 23: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

23

خشداخس ای . تشای یادیشی ای دػسساذ یاصی ت ضفظ وشد اا ذاسیذ ، cدس ای فل ت ؼشفی دػ ای اص دػسساذ واستشدی دس صتا

ا ػی شت سا ـاذ ویذ ، ا اص ای دػسساذ دس تخؾ سا اذاصی اىااذ خاثی ىشسا اػسفاد وافی اػر تا واستشد اا اؿا ؿیذ ث

یایی ، زا ؿا تا خث ی واستشدی اا وا اؿا ؿیذ .

: سغیش ا

اص سغیش ای صیش خـسیثای یىذ : ccsسغیش ا ىا ای اص ضافظ ؼسذ و تشای رخیش ػاصی داد ا ت واس تشد یـذ ، وادایش

Type-Specifier Size Unsigned Signed Digits

short 1 bit number 0 to 1 N/A 1/2

char 8 bit number 0 to 255 2-3

int 8 bit number 0 to 255 -128 to 127 2-3

long 16 bit number 0 to 65535 -32768 to 32767 4-5

long long 32 bit number 0 to 4294967295 -2147483648 to 2147483647 9-10

float 32 bit float -1.5 x 1045 to 3.4 x 1038 7-8

ثا :

int ival;

long lval;

float fval;

اخسلاف یافس اػر ، ؿا یسایذ دس ای خا ا داد fvalخا ت سغیش lval 32خا ت سغیش ival 16خا اص ضافظ ت سغیش 8دس ثا تاال زؼذاد

.ای دس دػر خشداصؽ سا رخیش ویذ

ؿا یسایذ دس یه خي زذ غیش ؼشفی ویذ : -

int a,b,c,d;

یثاؿذ . intؼسم اص یىذیش اص خغ a,b,c,dسغیش ای

اىا ؼشفی سغیش ای زذ تؼذی ) ازشیؼی ...( یض خد داسد : cدس صتا -

char const KEYS[4][3] = {{'1','2','3'},

{'4','5','6'},

{'7','8','9'},

{'*','0','#'}};

اىا ـخق وشد زؼذاد تیر یه سغیش یض خد داسد : cدس -

int b : 2;

زغییش وذ (. 2د تیر اص ضافظ سا اؿغا یىذ ) یساذ اص كفش زا bسغیش

ای تذیذ :ؿا یسایذ دس ا ؼشفی سغیش ت ا مذاس -

int m=2;

اػر ) دس ضار ػادی مذاس ای كفش اػر ( 4تشاتش تا mمذاس ای

Page 24: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

24

- .....

دس ادا تا سغیش ا تیـسش اؿا یـی .

.... دػسساذ ضم ، ؿشى ، خشؽ

ؿشى )ثال یه ؿذ یىی اص خای ا ( اتؼس ؿد .... ای الغ یاص اػر زا تشا زذی تاس اخشا ؿد ، یا ادا اخشای تشا ت یه

د ای اص دػساذ خد داسد و تا اا یسای ؿشى ضم ای سا ت اخشا دس اسی : ccsدس

: ifدػسس

if (expr)

stmt-1;

[else

stmt-2;]

اخشا خاذ ؿذ . 4اخشا یـذ ، دس كسزی و ؿشى كطیص ثاؿذ ، دػسساذ 1دس كسذ كطیص تد ؿشى دػسساذ

ت فش ای صیش یض اػسفاد ویذ : ifؿا یسایذ اص دػسس

if (expr)

stmt-1;

ادیذ شفس یـد . stmt-1ؿشى كطیص ثاؿذ ، دػسس اخشا یـد ، دس كسزی و stmt-1دػسس expr دس كسذ كطیص تد ؿشى

if (expr1)

stmt1;

[else if (expr2)

Stmt2;]

[else if (expr3)

Stmt3;]

...

[else

stmtx;]

expr2اخشا یـد ، دس كسزی و ؿشى stmt1كطیص تاؿذ ، دػسس expr1دس ای دػسس دػ ای اص ؿشى زه یـذ ، دس كسزی و

اخشا خاذ ؿذ . ثا : stmtxاخشا یـد ،...... دس كسزی و یر وذا اص ؿشى كطیص ثاؿذ ، دػسس Stmt2كطیص تاؿذ دػسس

#include <16F877.h>

#use delay(clock=2000000)

#define use_portb_lcd TRUE

#include <lcd.c>

void main() {

int m;

lcd_init();

while (1) {

lcd_gotoxy( 1,1);

m++;

Page 25: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

25

if (m==3) lcd_putc("m=3");

else if (m==5)

lcd_putc("m=5"); else

lcd_putc("m=?"); lcd_gotoxy( 1, 2);

printf(lcd_putc,"%u",m);

delay_ms(1000);

}

}

ضذاوثش یه دػسس لات اخشا اػر ، تشای اخشا وشد دػسساذ تیـسش ، تایذ دػسساذ سا دس یا { } لشاس دیذ : elseیا else ifیا ifىس : تؼذ اص

else if (m==5){

lcd_putc("m=5");

lcd_gotoxy( 7,1);

lcd_putc("3 line");

}

: while ضم ی

ای ضم ت فش صیش یثاؿذ :

while (x) {

تشا

}

زه یـد دس كسذ كطیص تد ؿشى دػسساذ یا د اوالد اخشا یـد . ؿا xیه ضم ؿشی اػر ، دس ای ضم ؿشى whileدػسس

ضم سا ذا زىشاس ویذ . ثا : xت خای 1یسایذ تا لشاس داد

#include <16F877.h>

#use delay(clock=2000000)

#define use_portb_lcd TRUE

#include <lcd.c>

void main() {

int m;

lcd_init();

while (m<10) {

m++;

lcd_gotoxy( 1,1);

printf(lcd_putc,"%u",m);

delay_ms(1000);

Page 26: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

26

}

lcd_putc("m > ten");

}

) اوالد ( اخشا یـد . تا افضایؾ مذاس braceتش لشاس یثاؿذ دػسساذ یا د m<10تشاتش كفش یثاؿذ ، خغ ؿشى mدس ای تشا ، مذاس ای

m زػي دػسسm++; ؿشى 9 تیـسش ؿذ مذاس ا اصm<10 اص تی یشد تشا اص خي تؼذ اص اوالد د ادا یاتذ ، تذی شیك دػسس

lcd_putc("m > ten"); سلف یـد . {اخشا یـد تشا دس

: doضم ی

فش صیش اػر : ای ضم ت

do {

تشا

} while (x);

، ؿشى دس اسای ضم زه یـد ، خغ ضم ضذال یه تاس اخشا whileداسد ، اا دس ا تشخالف ضم whileای ضم ػاخساسی ـات ضم

ضم سا ذا زىشاس ویذ . ثا : xت خای 1خاذ ؿذ . . ؿا یسایذ تا لشاس داد

#include <16f84.h>//micro name

#use delay(Clock=2000000)// oscillator frequency

main(){

set_tris_a(0x0f);

do{

output_bit( PIN_A0,1 );//portb.0=porta.0

delay_ms( 1000 );//wait 1 sec

output_bit( PIN_A1,1 );

delay_ms( 1000 );//wait 1 sec

output_bit( PIN_A0,0 );

delay_ms( 1000 );//wait 1 sec

output_bit( PIN_A1,0 );

delay_ms( 1000 );//wait 1 sec

}while(input( PIN_A4 ) );

OUTPUT_A(0x00);

do{

output_bit( PIN_A2,1 );//portb.0=porta.0

delay_ms( 1000 );//wait 1 sec

output_bit( PIN_A3,1 );

delay_ms( 1000 );//wait 1 sec

output_bit( PIN_A2,0 );

delay_ms( 1000 );//wait 1 sec

output_bit( PIN_A3,0 );

Page 27: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

27

delay_ms( 1000 );//wait 1 sec

}while(1);

}

: forضم ی

ضم ی یه ضم ی ؿشی اػر زاصای و ؿشى ا دسػر تاؿذ ادا ی یاتذ ، ای ضم ت فش وی صیش اػر : ای

For ( ی ضم ا ضم , ؿشى خایا , مذاس ا ){

تشا

}

ی ضم ، یساذ یه ػذد تاؿذ ، ؿش ى خایا ضم یض یه ػذد یا دس ای ع ضم یسا زؼذاد زىشاس سا ـخق وشد ، مذاس ا

سغیش اػر ، ای و مذاس ای دس ؿشی و دس ای لؼر ؿس یـد ، كذق وذ ، ضم ت خایا یشػذ .

ا ضم یض ـخق یىذ و مذاس ای زى زغییش وذ :

for (j = 1; j <10 ; j++ ) {

تشا

}

افضد jوزىسش تاؿذ ، ضم ادا ی یاتذ ، سی تا ش تاس زىشاس ضم یه اضذ ت 15اص jیثاؿذ ، زا لسی و j 1دس ثا تاال مذاس ای

یـد .

: Switch- caseدػسس

switch (سغیش) {

case مذاس ا: 1دػسس

break;

case 4مذاس : 4دػسس

break;

....

default: 3دػسس

break;

Page 28: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

28

}

یىذ . دس ، دػسس ا تخؾ سا اخشا caseای دػسس ، مذاس یه سغیش سا زه یىذ دس كسذ تشاتش تد ا تا مادیش دسج ؿذ دس تخؾ

اخشا یـد ، ثا : defaultكسذ تشاتش ثد سغیش تا یر یه اص مادیش دػسساذ خد دس تخؾ

#include <16F877.h>

#use delay(clock=2000000)

#define use_portb_lcd TRUE

#include <lcd.c>

void main() {

int m;

lcd_init();

while (1) {

lcd_gotoxy( 1,1);

m++;

switch (m) {

case 3:lcd_putc("m=3");

break;

case 5:lcd_putc("m=5");

break;

default :lcd_putc("m=?");

break;

}

lcd_gotoxy( 1, 2);

printf(lcd_putc,"%u",m);

delay_ms(1000);

}

}

دس كسذ تشاتش case 3دػسساذ تاؿذ 3 تشاتش تا mزه یـد ، دس كسزی و switchتا ش تاس اخشا ؿذ دػسس mدس تشا تاال مذاس سغیش

سا اخشا یىذ . defaultدػسساذ تخؾ mاخشا یـد . دیش مادیش case 5دػسساذ 5تد ا تا

ا اخشا یـذ (. caseتا ػث زشن ضم دس كسذ دسػر تد ؿشى یـد ) ػایش ;break دػسس

: gotoدػسس

ادا یـد : returnت یه تشزؼة خشؽ وشد ، تاص ـر اص تشخؼة تا دػسس زػي ای دػسس یسا

Goto lable ;

Lable:

تشا

Return;

Page 29: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

29

یسا اص واذ سصس ؿذ اػسفاد وشد ، 31تشزؼة تایذ دس داخ ضم ی اكی تاؿذ ، تشزؼة تایذ اص واساوسش وسش تاؿذ ، تشای تشزؼة

اضای یؼر ( Return) اػسفاد اص دػسس تیایذ . Gotoتشزؼة ی زاذ لث یا تؼذ اص دػسس

void main() {

int m;

lcd_init();

q:

m++;

lcd_gotoxy( 1, 2);

printf(lcd_putc,"%u",m);

delay_ms(1000);

goto q;

}

: continueدػسس

خد ای دػسس دس ضم ، تاػث اخشای ا اص اتسذا یـد :

continue;

: breakدػسس

یىذ (:ضم سا زشن cpuخد ای دػسس دس ضم تاػث ؿىؼس ا یـد )

break;

: دػسساذ طاػثازی سیاهی

ا ػیاذ Operant name ػیاذ

+ Addition خغ

Page 30: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

30

+= Addition assignment خغ اسؼاب , is the same as x=x+y

&= Bitwise and assignment And تی اسؼاب is the same as x=x&y

& Address ادسع

& Bitwise and And تی

^= Bitwise exclusive or assignment XOR تی اسؼاب x^=y, is the same as x=x^y

^ Bitwise exclusive or XOR تی

l= Bitwise inclusive or assignment Or تی اسؼاب xl=y, is the same as x=xly

l Bitwise inclusive or Or تی

?: Conditional Expression ػثاسذ ؿشی

- - Decrement اضذ یه واؾ

/= Division assignment ازؼاب زمؼی x/=y, is the same as x=x/y

/ Division زمؼی

== Equality زؼای

> Greater than اص تضسسش

>= Greater than or equal to ؼای تضسسش

++ Increment اضذ یه افضایؾ

* Indirection هشب

!= Inequality ؼای ا

<<= Left shift assignment اسؼاب زح ت ضشور x<<=y, is the same as

< Less than اص وزىسش

<< Left Shift زح ت ضشور

<= Less than or equal to ؼای وزىسش

&& Logical AND ػیاذ and می

! Logical negation ػیاذ not می

ll Logical OR ػیاذ or می

%= Modules assignment اسؼاب تالیاذ is the same as x=x%y x%=y

% Modules تالیاذ

*= Multiplication assignment اسؼاب هشب x*=y, is the same as x=x*y

Page 31: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

31

* Multiplication هشب

~ One's complement (یه ت ؼثر س)یه ى

>>= Right shift assignment اسؼاب ساػر ت ضشور x>>=y, is the same as x=x>>y

>> Right shift ساػر ت ضشور

-> Structure Pointer operation ػاخساس

-= Subtraction assignment اسؼاب زفشیك

- Subtraction زفشیك

sizeof Determines size in bytes of operand تایر یه ػایض وشد زؼیی

ػذ

سا تا دػسس صیش دس تشا خد فشاخای ویذ : <math.h>تشای اػسفاد اص ای دػسساذ تایذ وساتخا ی

#include <math.h>

زاتغ ثثازی :

ی وـؾ ا اص لثال تا ای زاتغ اؿا ؿذی اص اا تشای اػسفاد ای صیادی س ، تذػر اسد هشیة لذسذ ، ضد ای تشداسی زا ، صایا

طاػث ویذ . keil زػي ؿس دػسساذ صیش دس وادایش arm.... اػسفاد یىشدی ، ؿا یسایذ ای زاتغ سا تا

: cosدػسس

ای دػسس ت فش وی صیش اػر :

k=cos(x);

ضاك ػیاذ اػر ، ثا : kمذاس سغیش سدی xدس ای دػسس

float k,x=45;

k=cos(x);

تشاتش kمذاس سیخس یـد ، تؼذ اص ادا دػسس kطاػث ؿذ دس سغیش xمذاس وؼیع cosاػر ، تا دػسس 45تشاتش تا xدس ثا تاال مذاس

یـد . 707. تا

: sinدػسس

ای دػسس ت فش وی صیش اػر :

Page 32: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

32

k= sin (x);

ضاك ػیاذ اػر ، ثا : kمذاس سغیش سدی xدس ای دػسس

float k,x=45;

k= sin (x);

تشاتش kسیخس یـد ، تؼذ اص ادا دػسس مذاس kطاػث ؿذ دس سغیش xمذاس ػیع sinاػر ، تا دػسس 45تشاتش تا xدس ثا تاال مذاس

یـد 707. تا

: tanدػسس

ای دػسس ت فش وی صیش اػر :

k= tan (x);

ضاك ػیاذ اػر ، ثا : kمذاس سغیش سدی xدس ای دػسس

float k,x=45;

k= tan (x);

تشاتش kسیخس یـد ، تؼذ اص ادا دػسس مذاس kطاػث ؿذ دس سغیش xمذاس زاظار tanاػر ، تا دػسس 45اتش تا تش xدس ثا تاال مذاس

یـد 1 تا

: cotدػسس

دػسسی تشای تذػر اسد مذاس وساظار یه سغیش خد ذاسد ، اا ؿا یسایذ تا ؼىع وشد مذاس زاضار یه سغیش ، keilدس وادایش

مذاس وساظار ا سا تذػر اسیذ ، ثا :

float k,x=45;

k= tan (x);

k=1/k;

یدشتیه : زاتغ ثثازی

سا داؽ ای و فضی ای خش دس دا زصیغ تشق، یشی اسما خى ؿى وـؼا، اخؼا دس ج ضشور زكیف تشای یدشتیه اص زاتغ

.... اػسفاد یـد . ای زاتغ تشای ػیع وؼیع داسای زؼشیف صیش اػر : ؼثیر ی ظشی زؼمیة ای خ وذ، ی ػشد

2 (/ex - e-x ) ( sinh) یدشتیه ػیع

Page 33: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

33

2 (/ex + e-x ) ( cosh) یدشتیه وؼیع

یه ػیع ت وؼیع زمؼی اص وساظار وؼیع ت ػیع زمؼی اص زاظار دایذ ی و اس . دس ادا دػ ی ایذ تذػر یدشت

خد داسد اسد ؿذ اػر : keilزاتغ طاػثاذ ، شتى ت اسد تاال و دس ش افضاس

: coshدػسس

ای دػسس ت فش وی صیش اػر :

k=cosh(x);

ضاك ػیاذ اػر ، ثا : kمذاس سغیش سدی xدس ای دػسس

float k,x=45;

k=cosh(x);

سیخس یـد ، تؼذ اص ادا kطاػث ؿذ دس سغیش xمذاس وؼیع یدشتیه hcosاػر ، تا دػسس 45تشاتش تا xال مذاس دس ثا تا

یـد . 174671355287425476744417398616743تشاتش تا kدػسس مذاس

: sinhدػسس

ای دػسس ت فش وی صیش اػر :

k= sin (x);

ضاك ػیاذ اػر ، ثا : kمذاس سغیش سدی xدس ای دػسس

float k,x=45;

k= sinh (x);

سیخس یـد ، تؼذ اص ادا kطاػث ؿذ دس سغیش xمذاس ػیع یدشتیه sinhاػر ، تا دػسس 45تشاتش تا xدس ثا تاال مذاس

یـد17467135528742547674.017398616703 تشاتش تا kدػسس مذاس

: tanhدػسس

ای دػسس ت فش وی صیش اػر :

k= tanh (x);

ضاك ػیاذ اػر ، ثا : kمذاس سغیش سدی xدس ای دػسس

float k,x=45;

Page 34: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

34

k= tan (x);

سیخس یـد ، تؼذ اص ادا دػسس kطاػث ؿذ دس سغیش xیدشتیه مذاس زاظار tanhاػر ، تا دػسس 45تشاتش تا xدس ثا تاال مذاس

یـد 1 تشاتش تا kمذاس

ىس :

تیایر ثثر فی تی: sinh x : طذد ی زاتغ یدشتیه -

cosh x :تیایر ثثر زا 1 ثثر اص

tanh x :1+ زا 1- اص

اػر ، 3 دسخ زاتغ یه ث زمشیثا sinh x ؿى تاالػر ت س ػی اذ زمشیثا cosh x زاتغ ؿى-

ی ایذ ، ثا : تذػر یدشتیه ػیع ت وؼیع زمؼی اص وساظار وؼیع ت ػیع زمؼی اص اس و لثال یض فس ؿذ زاظار-

k= sinh (x);

k2=cosh(x);

tanh=k/k2;

coth=k2/k;

coth tanh . د سغیش اص ی فذ یا ... ؼسذ

آسن زاتغ ثثازی :

خاد زاتغ، ای. آسد دػر ت سا آ صایای ثث، یه اهالع ی اذاص اص اػسفاد تا تایذ ا آ دس و اػر ؼائی ؼىع، ثثازی زاتغ ـا

یـذ ظاش فیضیه ذػی سیاهیاذ، دس تطث سد دیفشاؼی ؼادالذ اص زؼذادی ای خاب دس زا ؼسذ دیش زاتغ اص تؼیاسی ـسك

سا ؼىع ی یىیذ اص خاب ت مذاس صای یشػیذ .، دس الغ تا اسن ؿا ؼیش تذػر اسد زاتغ

: acosدػسس

ای دػسس ت فش وی صیش اػر :

k=acos(x);

ضاك ػیاذ اػر ، ثا : kمذاس سغیش سدی xدس ای دػسس

float k,x=.707;

Page 35: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

35

k=acos(x);

سیخس یـد ، تؼذ اص ادا دػسس kطاػث ؿذ دس سغیش xمذاس اسن وؼیع acosاػر ، تا دػسس 705.تشاتش تا xدس ثا تاال مذاس

یـد . 45 تشاتش تا kمذاس

: asinدػسس

ای دػسس ت فش وی صیش اػر :

k= sin (x);

ضاك ػیاذ اػر ، ثا : kمذاس سغیش سدی xدس ای دػسس

float k,x=45;

k= asin (x);

سیخس یـد ، تؼذ اص ادا دػسس kطاػث ؿذ دس سغیش xمذاس اسن ػیع asinاػر ، تا دػسس 707.تشاتش تا xدس ثا تاال مذاس

یـد 45 تشاتش تا kمذاس

:atanدػسس

ای دػسس ت فش وی صیش اػر :

k= atan (x);

ػیاذ اػر ، ثا :ضاك kمذاس سغیش سدی xدس ای دػسس

float k,x=45;

k= atan (x);

سیخس یـد ، تؼذ اص ادا دػسس مذاس kطاػث ؿذ دس سغیش xمذاس اسن زاظار atanاػر ، تا دػسس 1تشاتش تا xدس ثا تاال مذاس

k یـد 45 تشاتش تا .

: atan2دػسس

ای دػسس ت فش وی صیش اػر :

k= atan2(x,y);

تا دػسس تا مذاس زاظار ؼىع د م ؼثر ت طس خسلاذ تذػر ی ایذ ، ثا

float k,x=-3,y=-6;

Page 36: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

36

k= atan (x,y);

خس یـد ، سی kطاػث ؿذ دس سغیش x,yمذاس اسن زاظار atanاػر ، تا دػسس 6- تشاتش تا y مذاس 3-تشاتش تا xدس ثا تاال مذاس

. یـد 24345 تشاتش تا kتؼذ اص ادا دػسس مذاس

تشای تذػر اسد االػاذ تیـسش دس سد ؼثر ای ثثازی ت وساب سیاهاذ ػا ای د ػ دتیشػسا شاخؼ ویذ .

: exp(x)دػسس

ای دػسس ت فش وی صیش اػر :

k= exp(x) ;

مذاس سدی اػر یساذ یه ػذد تاؿذ . xسا طاػث یىذ ، x ) ػذد دش( ت زا eتا ای دػسس مذاس

: log(x)دػسس

ای دػسس ت فش وی صیش اػر :

k= log (x) ;

سیخس یـد . ای دػسس ؼىع دػسس لث اػر . kطاػث ؿذ دس سغیش eدس ثای xتا ای دػسس مذاس اسزی

: log10(x)دػسس

ای دػسس ت فش وی صیش اػر :

k= log10(x) ;

سیخس یـد. kطاػث ؿذ دس سغیش 01دس ثای xتا ای دػسس مذاس اسزی

:pow(x,y)دػسس

ای دػسس ت فش وی صیش اػر :

k= pow(x,y);

سیخس یـد. kیشػذ دس سغیش yت زا سغیش xتا ای دػسس سغیش

:pow(x,y)دػسس

ای دػسس ت فش وی صیش اػر :

k= pow(x,y);

Page 37: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

37

سیخس یـد. kیشػذ دس سغیش yت زا سغیش xتا ای دػسس سغیش

:pow(x,y)دػسس

ای دػسس ت فش وی صیش اػر :

k= pow(x,y);

سیخس یـد. kیشػذ دس سغیش yت زا سغیش xتا ای دػسس سغیش

: fmod(x,y) دػسس

ای دػسس ت فش وی صیش اػر :

k= fmod(x,y);

سیخس یـد . kطاػث ؿذ دس سغیش yزمؼی تش xتا ای دػسس تالیاذ ضاك

: sqrt(x) دػسس

ای دػسس ت فش وی صیش اػر :

k= sqrt(x);

تایذ ثثر تاؿذ . xسیخس یـد ، مذاس kطاػث ؿذ دس سغیش xتا ای دػسس خزس ػذد

:ceil(x) دػسس

ای دػسس ت فش وی صیش اػر :

k= ceil(x);

ت ػذد سذ تؼذی ، زثذی یـد ، ثا xتا ای دػسس ػذد اػـاسی

float k,x3.1;

k= ceil(x);

14-ت 1443-یـد . ای دػسس تشای اػذاد فی یض كادق اػر ، ثال 4تشاتش تا kاػر ، تا اخشا ؿذ دػسس مذاس 341تشاتش تا xدس ثا تاال

زثذی یـد .

:floor(x) دػسس

Page 38: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

38

ای دػسس ت فش وی صیش اػر :

k= floor(x);

د ، ثا ت ػذد سذ لثی ، زثذی یـ xتا ای دػسس ػذد اػـاسی

float k,x3.1;

k= floor(x);

11-ت 1443-یـد . ای دػسس تشای اػذاد فی یض كادق اػر ، ثال 3تشاتش تا kاػر ، تا اخشا ؿذ دػسس مذاس 341تشاتش تا xدس ثا تاال

زثذی یـد .

:ldexp(x) دػسس

ای دػسس ت فش وی صیش اػر :

k= ldexp(x);

یشػذ. ثا xت زا 2تا ای دػسس ػذد

float k,x=10;

k= ldexp(x);

اػر pow (2,y)یـد . دس الغ ای دػسس ؼىع دػسس 1024تشاتش تا kاػر ، تا اخشا ؿذ دػسس مذاس 10تشاتش تا xدس ثا تاال

سا تش یشداذ . yمذاس

:frexp(x) دػسس

فش وی صیش اػر :ای دػسس ت

k= frexp(x);

زثذی یـد . ثا 2 ت زا ای اص ػذد xتا ای دػسس ػذد

float k,x=1024;

k= frexp(x);

.اػر ldexp(x)یـد . دس الغ ای دػسس ؼىع دػسس 14تشاتش تا kاػر ، تا اخشا ؿذ دػسس مذاس 1024تشاتش تا xدس ثا تاال

:((modf x,y دػسس

Page 39: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

39

ای دػسس ت فش وی صیش اػر :

k= modf(x,&y);

تا ای دػسس مذاس اػـاسی یه سغیش اػـاسی اص لؼر كطیص ا خذا یـد ، ثا :

double k,x, y;

x = 3.14159265;

k = modf (x , &y);

یـد . 44141593تشاتش تا y مذاس 34444444تشاتش تا kاػر ، تا اخشا ؿذ دػسس مذاس 3.14159265تشاتش تا xدس ثا تاال

:abs (x) دػسس

k= abs(x);

سا طاػث یىذ ) ػذد فی سا ثثر یىذ ( . xتا ای لذس ك

دػسساذ ثذ داد واس تا سؿس ا

:atof (x) دػسس

n = atof ( szInput );

( . Convert string to doubleای دػسس یه سغیش اص ع سؿس سا ت دت زثذی یىذ )

:atol (x) دػسس

Page 40: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

40

n = atol ( szInput );

( . Convert string to long integerای دػسس یه سغیش اص ع سؿس سا ت ال ثثر زثذی یىذ )

:atoi (x) دػسس

n = atoi ( szInput );

( .Convert string to integerای دػسس یه سغیش اص ع سؿس سا ت ایسدش زثذی یىذ )

ت تشسػی ای ادا ی ای rs232 spi usbتا زخ ت واستشد تاال ی ای دػسساذ دس اسػا دسیافر داد ، دس تخؾ سا اذاصی خسذ

دػسساذ یدشداصی .

اخشایی دػسساذ :

یا وسشش یىش یا وادایش زظی تشای ای دػسساذ اص ، ذاسذ زذای زاثیش... خاثی اىااذ اذاصی سا وادایش خشخی دس دػسساذ ای

اص اػسفاد. ایذ ی دس لشض س ت وادایش طیي دس یـذ ؿشع # تا ؼال دػسساذ ای. ؿد ی اػسفاد ػاد وشد دیش دػسساذ...

یثاؿذ اضای دػسساذ ای اذ ؿذ زـشیص صیش دس و دػسساذ ای اؼ تا ، تاؿذ ؿذ اػسفاد اا اص ا خشط اص تؼوی دس اػر ى اا ،

. تثشیذ خی تشا دس اا مؾ ت یسایذ

: c یا دس اػثی ؿس

#asm

Page 41: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

41

or

#asm ASIS

اػثی تشا

#endasm

: ثا ، ویذ ـخق سا وذ طذد تاال دػسساذ تا تایذ ، ویذ اػسفاد اػثی دػسساذ اص c صتا دس داسیذ للذ و ای

int find_parity(int data){ int count;

#asm

MOV #0x08, W0 CLR W0

loop:

RRC data,W0

DEC count,F

BRA NZ, loop

#endasm

}

. اػر ؿذ زـشیص ccs اػثی دػسساذ هائ تخؾ دس

: bit# دػسس

: ػاخر ضافظ اص دخا ادسع دس bit خغ اص سغیش یه یسا دػسس ی زػي

#bit id = x.y

: ثا ،( تایر یه ضذاوثش) تاؿذ 7 زا 5 تی یساذ y. اػر ا تیر زؼذاد y ضافظ دس ا ادسع x خذیذ سغیش ا id دػسس ای دس

#bit T0IF = 0xb.2

...

T0IF = 0; // Clear Timer 0 interrupt flag

int result;

#bit result_odd = result.0

...

if (result_odd)

. اػر ؿذ رخیش كفش زایش لف سیدؼسش ا دس و یثاؿذ ضافظ اص ادسػی 0xb ثا ای دس

: build# دػسس

: اػر صیش ای فش ت دػسص ای ، داد اخسلاف خاف ای داد ت سا ضافظ اص ادسػی یسا دػسس ای زػي

#build(segment = address)

#build(segment = address, segment = address)

#build(segment = start:end)

#build(segment = start: end, segment = start: end)

Page 42: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

42

#build(nosleep)

Segment ویذ ودی ا دس سا ضافظ اص دیشی تخؾ یا سیؼر تشداس یا لف ای داد یسایذ ؿا و یثاؿذ ضافظ اص ای لؼ .

Address ، ضافظ اص تخـی ادسع rom اػر ، Start and end یىذ ـخق سا ؿذ اػسفاد ضافظ مذاس start ؿذ اػسفاد خا ای end اخشی

. یثاؿذ ؿذ اػسفاد خاا

: ثا ، یىذ خیشی mine ضم خایا ت cpu سػیذ ا دس تشا یافس خایا اص nosleep دػسس

#build(memory=0x20000:0x2FFFF) //Assigns memory space

#build(reset=0x200,interrupt=0x208) //Assigns start

//location

//of reset and

//interrupt

//vectors

#build(reset=0x200:0x207, interrupt=0x208:0x2ff)

//Assign limited space

//for reset and

//interrupt vectors.

#build(memory=0x20000:0x2FFFF) //Assigns memory space

: case# دػسس

تضسي یا وزه ضشف تا ا سغیش د یسایذ دػسس ای تا ، یؼر تشاتش a تا A ثال ، داسذ فشق وزه ضشف تا تضسي ضشف C صتا دس

( : یـد ؿس وزه ضشف تا دیشی تضسي فضش یا ا سغیش اص یىی) ویذ زؼشیف

#case

void main() {

int m;

int M;

: __DATE__ دػسس

: ثا ، اػر "JAN-03-31" فش ت اسػای داد ، ویذ اسػا ػشیا خسذ ت سا تشا ؿذ دایوا زاسیخ یسایذ دػسس ای زػي

printf("Software was compiled on ");

printf(__DATE__);

: define# دػس

: دیذ زغییش دخا ا ت سا.... دػسس ، خسذ ، داد ، سغیش ا یسایذ دػسس ای زػي

#define id text

: ثا ، ویذ اػسفاد text اص id خای ت یسایذ تؼذ ت ای اص

#define BITS 8

a=a+BITS; //same as a=a+8;

Page 43: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

43

#define hi(x) (x<<4)

a=hi(a); //same as a=(a<<4);

__DEVICE__ دػسس

: ثا ، یشد لشاس سغیش ای دس ؿذ اػسفاد وسشش یىش ا تا ساظش ػذد ccs دس

#if __device__==622

SETUP_ADC_PORTS( ALL_DIGITAL );

#endif

.... ( . pic16f84 دذ ـا 82 ػذد. ) یثاؿذ PIC16C622 وسشش یىش دذ ـا 644 ػذد تاال ثا دس

دػسساذ دیشی یض اص ای دػس خد داسد ، ا تؼذ اص یادیشی ط سا اذاصی زذ سد اص اىااذ خاثی ت تشسػی اا خای ccsدس

خشداخر .

وجود داشت که به دلیل پیچیبذه بودن و داشتن ارتباط با سخت افسار های در این بخش دستورات دیگری نیس

جانبی از بیان انها صرف نظر شذ ، با این دستورات در بخش راه انذازی امکانات جانبی اشنا خواهیم شذ .

فل زاس

: خاثی اىااذ اذاصی سا

یىش ؿیر دیسا اؼ تا یسایذ ؿا ، ای خشداخس ... ، ADC ، SPI ظیش خاثی اىااذ اص اػسفاد اذاصی سا ط تشسػی ت تخؾ ای دس

. یاتیذ اای ا دس ؿذ روش سد خد اص خسف ای وسشش

: PIC ای وسشش یىش دس دیدسا ت ااي ثذ

یسایذ ؿا داسد زفاذ خسف ای وسشش یىش دس زثذی دلر ػشػر. یثاؿذ تیسی 15 ای ADC ت دض PIC ای وسشش یىش

: ای خشداخس داسی واس ػش ا تا تؼذ ت ای اص و وازی اص زؼذادی ؼشفی ت صیش دس. تیاتیذ ای وسشش یىش ای ؿیر دیسا دس سا تیـسش االػاذ

Page 44: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

44

ساط شخغ :

ؼثر ت ا اذاص یشی یـد . دس اغة طاػثاذ ساط شخغ تشاتش تا كفش اػر . adcساط ی اػر و سدی

لف :

تشا دس دػر اخشا سا سا یىذ ت تخؾ دیشی یشد تشا خد دس ادا سا اخشا cpuدس یىش وسشش ا لف ت ضاسی فس یـد و

یىی اص ااػر . adcلف ای صیادی خد داسد و لف picیىذ . دس یىش وسشش ای

دلر زثذی :

خ دس خشخی اػر ، یؼی ضذال ساط اذاص یشی 1542د تیسی داسای adcفس یـد . ثال adcت زؼذاد خ خد دس خشخی دلر زثذی

مذاس ساط سدی اػر ( 5اػر ) 1542/5ؿذ زػي ا تشاتش تا

adcدػسساذ شتى ت

: adc خشخی داد وشد زؼیی

#device ADC=x

X خشخی تیر زؼذاد adc اػر ، x 16 ػذد 1543 زا 5 تی ای داد 15 ػذد 455 زا 5 تی ای داد ، 8 ػذد اص اػسفاد ، تاؿذ 16 یا 15 یا 8 زاذ ی

. ویذ اػسفاد 15 ػذد اص اػر تسش تیسی 15 زثذی دلر دی ت. یىذ ظاش خشخی دس سا 65535 زا 5 تی ای داد

: دیدسا ت ااي ثذ اذاصی سا

setup_adc_ports (value)

RA0_RA1_ANALOGRA3_REF یا RA0_RA1_RA3_ANALOG یا ALL_ANALOGیساذ value یـد، اذاصی سا دیدسا ت ااي ثذ تاال دػسس تا

. تاؿذ

. ؿذ ااد اي ػیا دسیافر تشای ؿذ خاسج ػی I/O ضار اص ADC ای خای زای زا یـد تاػث ALL_ANALOG دػسس اص اػسفاد

ػا ت یسا ADC ای خای دیش اص) وذ ی ااد ااي ػیا دسیافر تشای سا A0, A1 A3 ای خای RA0_RA1_RA3_ANALOG دػسس

. اػر ر 5 تا تشاتش شخغ ساط ضار ای دس(. وشد اػسفاد خشخی یا سدی

اػا A3 خای ت شخغ ساط ضار ای دس. وذ ی ااد ااي ػیا دسیافر تشای سا A0 A1 ای خای RA0_RA1_ANALOGRA3_REF دػسس

. یـد

: دیدسا ت ااي ثذ زظیاذ

setup_adc (mode);

mode تاؿذ صیش اسد اص یىی یساذ :

- ADC_OFF :دػسس ای adc یىذ خاؽ سا .

- ADC_CLOCK_INTERNAL :دػسس ای تا adc یىذ اػسفاد طاػثاذ ادا تشای داخی والن اص یـد سؿ .

- ADC_CLOCK_DIV_32 :دػسس ای تا adc یىذ اػسفاد طاػثاذ ادا تشای ، 34 تش زمؼی خاسخی والن اص یـد سؿ .

: adc اص داد خاذ

set_adc_channel( x );

Page 45: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

45

var = Read_ADC();

device# ضار دس. تاؿذ داؿس زاػة سدی داد اذاص تا تایذ var ،سغیش ویذ رخیش var سغیش دس سا x واا داد یسایذ تاال دػسساذ تا

ADC=10 ت ر 5 ساط داد تا ADC ، ت ر كفش ساط اػا تا 1543 ػذد ADC سغیش دس 5ػذد VAR یـد سیخس .

خشط

دسخ ش اصای ت ػؼس ای خشخی ، یثاؿذ خای ػ داسای lm35 ػؼس ، اػر ؿذ ػاخس ػح دا یه lm35 ػؼس اص اػسفاد تا خشط ای دس

( اػر ر 1 خشخی دسخ 155 دای اصای ت كفش 5 خشخی دسخ كفش دای اصای ت. ) یىذ زغییش ر یی د شاد ػاسی

#include <16F877.h>

#device ADC=10

#use delay(clock=2000000)

#define use_portb_lcd TRUE

#include <lcd.c>

void main() {

Page 46: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

46

int d;

lcd_init();

setup_port_a( ALL_ANALOG );

setup_adc( ADC_CLOCK_INTERNAL );

do {

set_adc_channel( 0 );

d = Read_ADC();

d=d/2;

lcd_gotoxy( 1,1);

lcd_putc ("temp is: ");

printf(lcd_putc,"%u",d);

delay_ms(50);

lcd_clear();

} while (1);

}

ىس :

سا تخایذ . 17اهاف ؿذ اػر تشای دسیافر االػاذ تیـسش كفط lcdت كس دػسی ت ذس ;()lcd_clearدػسس

Page 47: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

47

خشط

5 ساط یىذیش اص ؼسم زاذ ی ا سش ر ای ، اػر ؿذ ػاخس سش ر ػذد 2 زؼذاد ماسیط سا زمؼی adc اص اػسفاد تا خشط ای دس

: اػر لث لات یض ساط ؼىع خالسیس زفاهی ذ اص اػسفاد دی ت ، وذ یشی اذاص سا dc ر 155 زا

#include <16F877.h>

#device ADC=10

#use delay(clock=2000000)

#define use_portb_lcd TRUE

#include <lcd.c>

void main() {

float a,b,c,d,e,f,g,h;

lcd_init();

setup_port_a( ALL_ANALOG );

setup_adc( ADC_CLOCK_INTERNAL );

min:

set_adc_channel( 0 );

a = Read_ADC();

set_adc_channel( 1 );

b = Read_ADC();

set_adc_channel( 2 );

c = Read_ADC();

set_adc_channel( 3 );

d = Read_ADC();

set_adc_channel( 4 );

e = Read_ADC();

set_adc_channel( 5 );

f = Read_ADC();

set_adc_channel( 6 );

g = Read_ADC();

set_adc_channel( 7 );

h = Read_ADC();

a=a-b;

c=c-d;

e=e-f;

g=g-h;

a=a/5.12;

Page 48: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

48

c=c/5.12;

e=e/5.12;

g=g/5.12;

lcd_gotoxy( 1,1);

lcd_putc ("a");

printf(lcd_putc,"%f",a);

lcd_gotoxy( 10,1);

lcd_putc ("b");

printf(lcd_putc,"%f",c);

lcd_gotoxy( 1,2);

lcd_putc ("c");

printf(lcd_putc,"%f",e);

lcd_gotoxy( 10,2);

lcd_putc ("d");

printf(lcd_putc,"%f",g);

delay_ms(200);

lcd_clear();

goto min;

}

Page 49: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

49

اػسفاد تا. یثاؿذ ا ساط ای سدی 15 9 ای خای ، 8 7 ای خای ، 5 2 ای خای ، 3 4 ای خای ، ویذ ی ـاذ مـ دس و اس

اص سا ا سدی ، ایذ د ذاس ػاخر ت الذا و كسذ دس ، اػر ر 5 تا تشاتش ا adc ت ؿذ اػا ساط ضذاوثش ماسی ساط زمؼی اص

ذاس شاذ ت لثر ا واا ت اػای ساط ز) یثیذ اػیة adc زغزی ت ا سدی ازلا كسذ دس ، ویذ ایض( vcc gnd) ذاس زغزی

((. ؿد سل شاذ ت ر 155 ساط ثغ R9 ـسشن خای ویذ فشم) اػر 95 زمشیثا ،

) ػا ػاص داخی ( Internal Oscillatorسا اذاصی

31Kzداخی یثاؿذ ، ای ػا ػاص تؼس ت ع یىش یساذ فشواغ سد یاص سا اص rcدض ت یه ػا ػاص picتؼوی اص یىش وسشش ای

ا شزض یشػذ (. 34ای مذاس زا pllزای وذ ) دس یىش وسشش ای داسای Mhz 8 زا

setup_oscillator(mode, finetune)

mode فشواغ زؼیی ؿذ تشای ػا اػر ، ثال ت خایmode یسایذOSC_8MHZ یا OSC_32KHZ یا ػایش مادیشی و زػي یىش خـسیثای

یـذ سا لشاس دیذ .

Finetune یه سغیش اص خغ :signed int . یثاؿذ و تاا یسایذ فشواغ ػا ػاص سا دس ىا ای خسف تشا زغییش دیذ

For PIC18F8722

setup_oscillator(OSC_32MHZ); //sets the internal oscillator to 32MHz (PLL enabled)

فمي تشای تؼوی اص یىش وسشش ا كادق اػر . Finetuneدػسس

: picزهیغ والن دس

Page 50: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

50

wire-2 یا i2c ػشیا اسزثاى

ی تشای wire-2 یا i2c خشزى ا وسشش یىش ا ایؼی دیش دس خشزى ای صا شس ت ، ؿذ سـش شاضی فییدغ ؿشور زػي تاس ا

:اػر صیش ؿشش ت اسزثاى ای ای یظی ، شفر لشاس اػسفاد سد

خای ، یشدد اػسفاد دیسا اسما یـد،تشای ػی زاس دسدع و ، VCC شاذ شا ت SCL SDA خى اص خشزى ای دس -1

SDA خای داد خای SCL یثاؿذ والن خای( .ای خای اص یسایذ لؼ ؿیر دیسا ت شاخؼ تا i2c یاتیذ االع ا: )

. یشػذ یض MHz 1 زا ػشػر pic خاف ای وسشش یىش دس.) اػر شزض وی 255 والن فشواغ زشی تاال -4

.وشد سل ت سا خسف افضاسی ػخر ادسع تا ، خاثی ػی 456 زؼذاد یسا اسزثاى ای دس -3

.اػر سش ػاسی 85 ؿیذ تاػی اسزثای وات ضذاوثش -2

. اػر اتؼس( وشیؼسا فشواغ) ػیؼس والن ت I2C اسزثاى والن -5

.ؿد ی ادا خاثی لؼ ادسع ت زخ تا داد دسیافر اسػا i2c خشزى دس -6

. اػر خاف ادسع یه داسای یـد سل i2c خسذ ت و ای لؼ ش -7

، تاؿذ داؿس شف د اسزثاى تا یساذ تاع ت ؿذ سل لؼاذ زای -8

Page 51: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

51

داخی ادسع داسای و لؼازی ،...( – eeprom) ؼسذ ادسع خای داسای و لؼازی: یـد ادا شیك ػ اص لؼاذ دی ادسع -9

یىش) یـد ـخق تشا دس اا ادسع ؼسذ سیضی تشا لات و لؼازی ،...( ا ػؼس ، rtc ای زشاؿ) ؼسذ خلف

... ( ا وسشش

ػشػر تشای ا وی 15 مار ، ویذ سل vcc ت ا وی 15 یا 4 مار تا سا SCL SDA ای خای تایذ i2c خسذ تا واس تشای -15

. یـد اػسفاد تاال ػشػر تشای وی 4 مار ػادی

: یدشداصی ccs دس خشزى ای تا واس یؼی تشا ط زهیص ت... داد دسیافر اسػا ط زـشیص اص لث

: i2c خشزى تذی خیىش

#use i2c (options)

: اػر صیش ای ضی ؿا options ، یىذ خیىشتذی سا i2c خشزى تاال دػسس

MULTI_MASTER :یىذ خیىشتذی ؼسش ػا ت سا یىش دػسس ای .

SLAVE :یىذ خیىشتذی اػی ػا ت سا یىش دػسس ای .

SCL=pin :والن ػا ت سا دخا خای یسایذ دػسس ای تا i2c اػر اخسیاسی دػسس ای ، ویذ اػسفاد .

SDA=pin :داد خای ػا ت سا دخا خای یسایذ دػسس ای تا i2c اػر اخسیاسی دػسس ای ، ویذ اػسفاد .

ADDRESS=nn :nn زا 5 تی یساذ یـد اسد ض كسذ ت ادسع ، یثاؿذ یىش تاع ادسع ff تاؿذ .

FAST :تاع دػسس ای i2c ذ دس سا FAST یىذ اذاصی سا .

SLOW :تاع دػسس ای i2c ذ دس سا SLOW یىذ اذاصی سا .

Page 52: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

52

RESTART_WDT :ػااذ ؿذ خایذاس زا واس ای تا ، یىذ ـای تاص سا( یـد تطث ا سد دس ادا دس و) داي اذ زایش دػسس ای زػي

یـد ادا خشداصؿی ، وشیؼسا .

FORCE_HW :وادایش ccs ای افضاس ػخر اص زؼذادی اذاصی سا تشای زاتؼی داسای i2c دس دػسس ای تایذ اا اص اػسفاد كسذ دس ، یثاؿذ

( . اػر ؿذ تطث تیـسش سد ای دس ادا دس) تاؿذ داؿس خد تاع خیىشتذی

NOFLOAT_HIGH :ای مار اص اػسفاد دی ت) ییشد ادیذ سدی داد دس سا یه ػش ، دػسس ای اص اػسفاد pull_up 4 فش ، وی 15 یا

.( یثاؿذ می یه ؼی ت ا تد اصاد می كفش ؼی ت تاع ؿذ

SMBUS :افضاس ػخر ، دػسس ای تا i2c یـد ادا دػسی كسذ ت داد دسیافر اسػا یـد خاؽ داخی .

: ىس

255 صیش داد اسما فشواغ slow دػسس تا ، یـد اػسفاد ، داسذ MHz 1 ػشػر و ای وسشش یىش تشای فمي fast slow دػسساذ -

: ویذ زؼیی سا اسما ػشػر یسایذ fast دػسس تا ، اػر شزض وی

fast=450000 // sets the target speed to 450 KBSP

ثای یی زذ تایذ یىش تاتشای ، اػر اتؼس( وشیؼسا فشواغ) ػیؼس والن ت I2C اسزثاى والن ، ؿذ روش لثال و اس -

دس) یـد اػا طاػث خدواس كسذ ت صا ای RESTART_WDT دػسس تا. ؿد خایذاس واال وشیؼسا ػااذ زا ؿد سظش

!!( . اػر ثای یی 155 اص وسش صا ای ؿشایي تذزشی

: ثا

#use I2C(master,address=0xa0,sda=PIN_C4, scl=PIN_C3,restart_wdt )

C4 C3 ای خای زشزیة ت I2C والن داد ای خای سی ، یىذ اذاصی سا ؼسش ذ دس سا PIC16F877 وسشش یىش I2C ، تاال دػسساذ

. یثاؿذ

: I2C واس ؿشع

i2c_start(stream, restart)

ـخق stream ، ؼسذ اخسیاسی stream restart ای ضی ، یـد خاثی ای دػسا تا داد زثاد ااد ؿذ سؿ i2c تاع تاال دػسس تا

خد كسذ ت ؿذ سم داد زذ ش) ویذ ضاك ایا اسػای یا دسیافسی داد كطر اص یسایذ ؿا تیر ای تا ، اػر i2c زاص تیر وذ

تش خد ای داد وی تاع تاصـای تا ، یـد عتا ـای تاص تاػث 4 ػذد. تاؿذ 4 یا 1 یا 5 یساذ یض restart ،( یـد زه تاع زػي واس

. یىذ ـای تاص سا تاع تاس یه ضذال یض كفش ػذد ، یىذ ی سا ػادی سا یىش 1 ػذد تا . یـد خان داد اسػا اص لث ا سی

: تاع ت داد اسػا

Page 53: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

53

i2c_write (stream, data)

ؿد اسػا تاع ت دػسس ی تا سا خاثی افضاس ػخر ادسع تایذ ، داد اسػا اص لث. یىذ اسػا i2c تاع ت سا( ظش سد داد) data تاال دػسس

: ثا ،

....

long cmd;

...

i2c_start(); // Start condition

i2c_write(0xa0);// Device address

i2c_write(cmd);// Low byte of command

. یـد اسػا ا ت اػر long ع اص و cmd سغیش یثاؿذ a0 خاثی افضاس ػخر ادسع تاال تشا دس

: تاع اص داد دسیافر

data = i2c_read(stream, ack);

. ؿد اسخاب سدی داد تا ساػة تایذ data سغیش ع ، یىذ رخیش data سغیش دس سا تاع اص دسیافسی داد تاال دػسس

خشط :

DS1621 سا اذاصی ػؼس دای

ت i2cدسخ ػاسی شاد سا اذاص یشی وذ االػاذ دسیافر د س تا فشر 145زا 55-یه دا ػح یثاؿذ و ی زاذ دای DS1621ػؼس

د ویذ : خشخی تفشػسذ . ؿا یسایذ دیسا ؿیر ای لؼ سا اص ادسع صیش دا

http://www.alldatasheet.com/datasheet-pdf/pdf/58507/DALLAS/DS1621.html

ایؾ داد یـد . lcdدس ای خشط دای طیي زػي ای ػؼس اذاص شفس ؿذ تش سی

#include <16F877.h>

#use delay(clock=2000000)

#use i2c(master,sda=PIN_C4, scl=PIN_C3)

#define use_portb_lcd TRUE

#include <lcd.c>

void init_temp();

int read_temp();

int va;

Page 54: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

54

void main() {

lcd_init();

init_temp();

do {

va = read_temp();

lcd_gotoxy( 1,1);

printf(lcd_putc,"%u",va);

delay_ms(1000);

}while (TRUE); }

void temp_config(byte data) { i2c_start();

i2c_write(0x90);

i2c_write(0xac);

i2c_write(data);

i2c_stop();

delay_ms(11);

}

void init_temp() {

output_high(PIN_ C4);

output_high(PIN_ C3);

i2c_start();

i2c_write(0x90);

i2c_write(0xee);

i2c_stop();

temp_config(8);

}

int read_temp() { ////// Returns degrees F (0-255)

byte datah,datal;

long data; i2c_start();

i2c_write(0x90);

i2c_write(0xaa);

i2c_start();

i2c_write(0x91);

datah=i2c_read();

datal=i2c_read(0);

i2c_stop();

Page 55: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

55

data=datah;

data=data*9;

if((datal&0x80)!=0)

data=data+4;

data=(data/5)+32;

datal=data;

return(datal);

}

زشی :

ی لاتیر سا ت ا اهاف ویذ .دس خشط تاال اىا اذاص یشی دای فی خد ذاسد ، ا

زایش ا :

زایش دضا یثاؿذ ، ای زایش ا یساذ فاك تی صا ؿاس یه زا صا ؿاس د سا تا دلر تاال اذاص 5زا 3داسای picیىش وسشش ای

اؿذ و دس زای یىش وسشش ا خد یث 5ذ ، دس ادا ت تشسػی زایش یشی وذ ، ؿا یسیذ اص اا تشای ایداد زاخیش ... یض اػسفاد وی

«خشداخس ای ، تشسػی تمی زایش ا سا ت تؼذ اص تی اسزثاى ای ػشیا و یىی

: 5زایش

ت 18 دس یىش وسشش ای ػشی رتی 8ت كسذ 16خد داسد ، ای زایش دس یىش وسشش ای ػشی picدس زای یىش وسشش ای 5زایش

تیر خد داسد ، ؼال ای یىش وسشش ا تیـسش 8ای زایش ت كسذ 18زؼذادی اص یىش وسشش ای ػشی ػ یىذ ) دستیر 16كسذ

اص ػ زایش داسذ .(

: ccsدس 5خیىشتذی زایش

Page 56: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

56

setup_timer_0 (mode)

mode : ؿا د سد صیش اػر

RTCC_INTERNAL, RTCC_EXT_L_TO_H or RTCC_EXT_H_TO_L : ای دػسساذ ثغ والن زایش سا زؼیی یىذ ، تاRTCC_INTERNAL والن ،

وی شزض 116675والن زایش سا اص وشیؼسا RTCC_EXT_L_TO_H or RTCC_EXT_H_TO_Lزایش تا زمؼی والن وشیؼسا زای یـد ، دػسساذ

ذ ، زای ی وذ .سل ؿذ ا osc2 osc1یا ػایش وشیؼسا ای و ت د خای ای

RTCC_DIV_2, RTCC_DIV_4, RTCC_DIV_8, RTCC_DIV_16, RTCC_DIV_32, RTCC_DIV_64, RTCC_DIV_128, RTCC_DIV_256 : ای دػسساذ

prescale زایش سا ـخق یىذ ، دس ا واس زایش ، والن زایش ت ػذدprescale زمؼی یـد ، دس ای ضار ؿا یسایذ تا prescale ای

خسف صا ای خسف سا ایداد ویذ .

set_timer0(value) or set_rtcc (value)

مذاس ای یا سغیشی اػر و valueیسایذ مذاس ای ای سا دس ؿاسؽ ش زایش لشاس دیذ . set_rtcc (value) یا set_timer0(value)تا دػسس

دس ا مذاس ای رخیش ؿذ .

value= get_timer0()

لشاس دیذ . valueتا دػسس تاال یسایذ مذاس ؿشد ؿذ زػي زایش سا دس سغیش

تذػر یایذ :تـاسد ، اص سات صیش 455تا زخ ت دػسساذ تاال ذذ صای و یىـذ زا زایش اص كفش زا

صا

وشیؼسا فشواغ

ثا :

#include <16F84.h>

#use delay(clock=1000000)

#define use_portb_lcd TRUE

#include <lcd.c>

void main() {

int m,n;

setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_128 );

set_timer0(60);

lcd_init();

while (1) {

if (get_timer0()==0){

set_timer0(60);

m++;

}

if (m==10){

n++;

lcd_gotoxy( 1, 2);

Page 57: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

57

printf(lcd_putc,"%u",n);

m=0;

}

}

}

.تـاسد ( 455زا 5ثای یىـذ زا زایش اص 56155354ثای اػر ) 56155354ایداد ؿذ زػي زایش تشاتش دس ثا تاال صا

یه اضذ nسػیذ ، مذاس سغیش 15ت mاهاف یـد . ای و سغیش m( یه اضذ ت سغیش 455تا ش تاس ػش سیض ؿذ زایش ) ؿاسؽ اص كفش زا

ت ایؾ دس ی ایذ . lcdافضایؾ یافس تش سی

5

: 5لف زایش

تشا دس دػر اخشا سا cpuسػیذ ، 455داسای لف ػش سیض یثاؿذ ، تا اػسفاد اص ای لف ، ای و مذاس ؿشد ؿذ زػي زایش ت 5زایش

ادا یـد ، تا returnسا یىذ ت صیش تشا لف سفس تشا ای خد دس ادا سا اخشا یایذ ، تاص زؿر اص صیش تشا لف تا دػسس

ت ای دػسس ، تشا اص ىا لثی ادا خیذا یىذ . cpuسػیذ

سا اذاصی لف :

interrupt_active(INT_TIMER0);

تا لشاس داد دػسس تاال ، دس ا ػش سیض ؿذ زایش ، ت ضم صیش خشؽ یـد :

void timer5_isr()

{

تشا

}

تشا ی دس دػر اخشا سا سا وشد ت صیش تشا ی زایش و دس cpuیـاسد ( 456یا ffدس ای ضار لسی و زایش ػشسیض یـد ) زا مذاس

تاال ط ی ـخق وشد ا فس ؿذ ، خشؽ یىذ تشا ی خد دس ادا سا ادا یذذ .

زا ای و زایش فؼا تاؿذ ادا خیذا ت ضم ی اكی خشؽ یىذ تشا ی لثی سا ادا یذذ . ای ػ cpuت } خایای ، cpuتا سػیذ

یىذ .

ثا :

#include <16F84.h>

#use delay(clock=1000000)

Page 58: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

58

#define use_portb_lcd TRUE

#include <lcd.c>

#int_timer0

void Timer0_isr()

{ int i; ++i; if (i%2==0) {

output_high(PIN_B0);

}

else

{

output_low(PIN_B0);

}

}

void main() {

int m,n;

setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_128 );

interrupt_active(INT_TIMER0);

set_timer0(60);

lcd_init();

while (1) {

if (get_timer0()==0){

set_timer0(60);

m++;

}

if (m==10){

n++;

lcd_gotoxy( 1, 2);

printf(lcd_putc,"%u",n);

m=0;

}

}

}

Page 59: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

59

15ت mای و سغیش د اهاف یـ m( یه اضذ ت سغیش 455تا ش تاس ػش سیض ؿذ زایش ) ؿاسؽ اص كفش زا دس تشا ی تاال ػال تش ایى

B.0ذ ، ت صیش تشا ی لف ی زایش یض یض شاخؼ ؿذ دس ادا خی ت ایؾ دس ی ای lcdیه اضذ افضایؾ یافس تش سی nسػیذ ، مذاس سغیش

سؿ خاؽ یـد .

(: analog comparatorx) ااي وذ مایؼ

: یىذ ػ OP-AMP یه اذ PIC ای وسشش یىش دس ااي وذ مایؼ اضذ

مایؼ سدی خای د ساط یا اخسالف خد ، یىیذ ـاذ زلیش دس و اس

. یـد خشخی ساط زغییش تاػث ، وذ

تا ا خشخی AN0 AN1 ضشف تا وذ مایؼ سدی PIC ای وسشش یىش دس

C1OUT ؼال. یـد ـخق AN0 خای A0 AN1 خای A1 خای اص یض خشخی. اػر A3 یا

A4 یـد شفس .

Page 60: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

60

. یشػاذ اػیة وذ مایؼ ت طذد ای اص خاسج ساط ، یثاؿذ ر 5 زا 5 تی وذ مایؼ سدی

: CCS طیي دس analog comparator اذاصی سا

setup_comparator (mode)

: اػر وذ مایؼ خیىشتذی تشای صیش دػسساذ ؿا mode ، یـد سؿ ااي مایؼ تاال دػسس تا

A0_A3_A1_A2 :ؼسذ وذ مایؼ اضذ د داسای و ای وسشش یىش تشای دػسس ای ، یىذ سؿ سا ااي ای وذ مایؼ دػسس ای

. ؼسذ د ؿاس وذ مایؼ ای سدی A1 A2ای خی 1 وذ مایؼ ای سدی A0 A3ای خی ضار ای دس ، ؿد ی اػسفا

NC_NC_A1_A2 :یىذ سؿ سا 1 ؿاس اي وذ مایؼ دػسس ای .

: دػسساذ ػایش

A3_A2_A1_A2 :ای خی ضار ای دسA2 A3 ای خی 1 وذ مایؼ ای سدیA2 A1 ؼسذ د ؿاس وذ مایؼ ای سدی . (

یـد اػسفاد A0 خای اص اػر ـسشن وذ مایؼ د تی A2 خی )

A0_A2_A1_A2 :ای خی ضار ای دسA2 A0 ای خی 1 وذ مایؼ ای سدیA2 A1 ؼسذ د ؿاس وذ مایؼ ای سدی . (

یـد اػسفاد A3 خای اص اػر ـسشن وذ مایؼ د تی A2 خی ) .

NC_NC_NC_NC :ػا ت سدی ای خای اص یسایذ ؿا ، یـد خاؽ ااي وذ مایؼ دػسس ای تا I/O ویذ اػسفاد .

لف ی مایؼ وذ سا فؼا ویذ :تا اػسفاد اص دػسساذ صیش

: خشط

#include <16F877.h>

#use delay(clock=20000000)

#define use_portb_lcd TRUE

#include <lcd.c>

short safe_conditions=TRUE;

lcd_init();

#INT_COMP

void isr() {

safe_conditions=FALSE;

Page 61: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

61

lcd_putc("WARNING!!");

}

main() {

lcd_gotoxy( 1, 2);

lcd_putc("Running v test");

setup_comparator(A1_VR_OUT_ON_A2);

setup_vref(VREF_HIGH|15);

enable_interrupts(INT_COMP);

enable_interrupts(GLOBAL);

while(TRUE)

{

if(safe_conditions)

lcd_gotoxy( 1, 2);

lcd_putc("V is below 3.6 V");

safe_conditions=TRUE;

delay_ms(500);

}

}

: spiخشزى

یر ای ای spiخشزى یه ساتي ػ ػی یثاؿذ و زػي ا یسا زؼذاد ا طذد ػی خاثی سا ت یىش سل د دس صیش ت تشسػی لات

خشزى خشداخس ای :

و ت زشزیة ، خشخی داد، سدی داد والن یثاؿذ ، اػسفاد یىذ . SCK, SI, SOای خشزى اص ػ خي -

( یض افضد یـد ، ش ػی خاثی ت یه خي وسش chip select) csسفاد اص تیؾ یه ػ خاثی ، ت خى تاال خي دس كسذ اػ -

دضا یاص داسد .

اشزض صیاد ؿد. 45یساذ زا تاالی spiػشػر اسما داد دس -

ؼسذ ، والن ) خاغ ضای ( زػي یىش slaveیىی اص یىش وسشش ای دس مؾ ؼسش ػایش لؼاذ دس مؾ spiدس خشزى -

ؼسش زیذ یـد .

Page 62: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

62

ع یىش وسشش ، ضافظ ، ػؼس ، ... اػسفاد یـد . 3555ایداد ؿذ اػر دس تیؾ اص Motorolaای خشزى زػي ؿشور -

:ccsدس spi خیىشتذی خشزى

setup_spi (mode)

setup_spi2 (mode)

سذ د یثاؿذ . ) دس یش وسشش ای داسای ی خسذ تشای خ setup_spi2 (mode)یثاؿذ ، spiداسای د خسذ picتؼوی اص یىش وسشش ای

ا ؼسثش اػر ( . setup_spi2 (mode)دػسس

Mode : ؿا اسد صیش اػر

SPI_MASTER, SPI_SLAVE, SPI_SS_DISABLED یىش وسشش سد ظش یساذ دس ذ :SPI_MASTER یىش دس ذ ؼسش ( ، یا(SPI_SLAVE یىش (

سا غیش فؼا یىذ . spiساتي SPI_SS_DISABLEDدس ذ اػی ( خیىشتذی ؿد ، دػسس

SPI_L_TO_H, SPI_H_TO_L :

SPI_CLK_DIV_4, SPI_CLK_DIV_16, SPI_CLK_DIV_64, SPI_CLK_T2 تا ای دػسساذ فشواغ خي والن ت مادیش دسج ؿذ دس ش دػسس زمؼی :

یـد . ) ای دػسس اخسیاسی اػر ( .

خاذ ؿس :

SPI_WRITE (value)

SPI_WRITE2 (value)

spiخلف یىش وسشش ای و داسای د خسذ SPI_WRITE2 (value)اسػا ویذ . دػسس spiتیسی سا ت تاع 8تا دػسس تاال یسایذ یه سغیش

ؼسذ یثاؿذ .

value = spi_read ()

value = spi_read2 ()

spiای د خسذ خلف یىش وسشش ای و داس() value = spi_read2سا تخایذ ، دػسس spiتا دػسس تاال یسایذ داد خد تش سی تاع

ؼسذ یثاؿذ .

result = spi_data_is_in()

result = spi_data_is_in2()

دس كسذ ػذ خد داد مذاس سغیش تشاتش كفش اػر . 1تشاتش resultسغیش spiدس كسذ خد داد تش سی خي

ادا ت صدی دس :

http://www.iranmicro.ir/forum. ای خسف اصؽتخؾ دسكذ خیـشفر

اصؽ مذازی دسكذ 011

واس تا خسذ ا دسكذ011

واسوسشی Lcd دسكذ011

Page 63: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

63

فل خد

:هائ

cاصؽ صتا دسكذ011

I2C دسكذ011

ADC دسكذ011

Analog Comparator دسكذ01

CAN bus دسكذ 1

CCP1 دسكذ 1

CCP2, CCP3, CCP4, CCP5, CCP6 دسكذ 1

Configuration Memory دسكذ 1

Configuration Memory دسكذ 1

External Memory دسكذ 1

Internal Oscillator دسكذ011

Interrupts دسكذ 1

WDT or Watch Dog Timer دسكذ 1

Low Voltage Detect دسكذ 1

Program Eeprom دسكذ 1

PSP دسكذ 1

RS232 I/O دسكذ 1

RTOS دسكذ 1

SPI دسكذ 01

Timer0 دسكذ011

Timer1-Timer5 دسكذ 1

USB دسكذ 1

Voltage Reference دسكذ 1

خشط ا ثاضث زىیی دسكذ 01

Page 64: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

64

تیـسش ویذ ، picدس ای تخؾ اة زىیی وساب اسد ؿذ اػر ، ؿا یسایذ تا اؼ ای اسد ، داؾ خد سا دس تاب یىش وسشش ای

اػسفاد ی تیـسشی تثشیذ . دس ا تخؾ تشخی اص اة ت كسذ خالك اسد ؿذ تشای االػاذ تیـسش ت یه ای خد دس pic ccs اص

اسای ش هی شاخؼ اییذ

( مذازی اؿایی) خشزع تشا تا pic شوسش یىش ػاصی ؿثی: 3 هی

:ؿد تاص افضاس ش زا ویذ ویه اػساسذ ی دس ا ایى سی خشزع افضاس ش وشد فؼا لة اص تؼذ

: اػر صیش ؿى ت افضاس ش طیي

دس لؼر

Page 65: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

65

ؿا و داسد خد...( ، شتؼی ، ac) خاغ اتغ ، طشازس ػیا ، سسش ػىج،اػی خشیا، ساط، اتغ اص ای دػ ، یشی اذاص اتغ

لؼ زا ویذ ویه دتاس ظش سد م دس اذ كفط ت ػدغ ، ویذ ویه اا سی اتسذا) تزاسیذ كفط دس ویذ اسخاب سا اا یسایذ

.(ؿد زاؿس دسادا

ت سا اا یسایذ یاص كسذ دس و داسد خد.. كفط وشد وزه تضي ... خشیر زی رخیش تشای اتضاسی یشایؾ اتضاس لؼر دس

.تثشیذ واس

داسد خد تشا وشد دیثاي زلف ىث ؿشع تشای ویه 2 ػاصی ؿثی وسش لؼر دس

ؿثی وشد سل ت مـ ثك سا اا ػدغ ویذ اسخاب سا ظشزا سد ذاس دس سفس تىاس لؼاذ یسایذ ؿا ، لؼ اسخاب لؼر دس

:یـد داد زهیص ػ ای ثا یه تا صیش دس ، ویذ ػاسی

ت تشسػی ا خشداخسی : 8ت زـه صی یثاؿذ و دس كفط ی شتى ذاس

: # include <16f84.h> //micro name

#use delay(Clock=20000000) // oscillator frequency

main)(

{

set_tris_b(0x00); //set port b as outputs

while(true)

{

delay_ms(1000); //wait 1

output_high(PIN_B0); //set portb.0 ( turn on led)

delay_ms(1000); //wait 1 output_low(PIN_B0) ; //reset portb.0 ( turn off led)

}

}

. ویذ ویه p ضی سی واس ای تشای ت كفط ی ؿازیه یثاؿذ ، لؼاذ اسد لذ ای

Page 66: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

66

ویه اص تؼذ. ویذ ویه( ـىی ع) Selection modeایى سی اتسذا تایذpick from li... (p ) ایى سی ویه تشای و تاؿیذ داؿس زخ

: یـد تاص الیثشی خدش p ایى سی

فس تؼذا و ط دس زا ویذ اسخاب سا اا ػدغ تیؼیذ زه زه سا یاص دس لؼاذ اػ " لؼ ا ؿس ط " لؼر دس

:یاص سد لؼاذ ؿد، داد ایؾ یـد

PIC16F84: یىش -1

4- LED : led-red

CRYSTAL: وشیؼسا -3

res مار : -2

دتاس ا ا سی( صیش ؿى اذ) یىذ ؼشفی ؿا ت سا لؼ افضاس ش ، ویذ زایح ؿذ فس لؼر دس سا یىش ا تشای

.ؿد افضد ؿذ اسخاب لؼاذ ت ا ا زا ویذ ویه

ؿد تؼس وساتخا زا ویذ ویه OK سی اخش دس دیذ ادا یض لؼاذ دیش تشای سا واس ای

Page 67: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

67

لؼ زا ویذ ویه دتاس كفط اص دخا م دس ػدغ ویذ ویه دس خار لؼاذ اا ا سی ا اكی كفط سی لؼاذ اسما تشای

: دیذ اسما كفط ت سا لؼاذ ، ؿد زاؿس ادا دس

ای ی خا سی تش سا ع ػدغ ویذ ویه( ـىی ع) Selection mode ایى سی اتسذا ا خای تی ای ػی وـیذ تشای

خای ت سا ا ویذ ویه خای سی ، یـد ذاد یه ت ؿثی ع ایى یثیذ و تثشیذ ویذ سل دیش خای ت سا ا یخایذ و

.اییذ زح ویه ا سی دتاس لؼ یه وشد ضزف تشای ، ویذ ویه دتاس دیش خای سی تش وـیذ سا خي ، ویذ سل دیش

.ویذ اسخاب سا POWER GROUND ای ضی ادا دس ویذ ویه terminals mode ایى سی ، شاذ VCC اسد تشای

Page 68: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

68

: تاؿذ صیش ؿى ت تشا ثك تایذ ؿا ذاس

اا تایذ ا ،..... اػر شزض ا 1 وشیؼسا مذاس ثال ، یثاؿذ فشم خیؾ مادیش داسای لؼاذ ویتؼذ اص شاضی ذاس ، ـاذ یىیذ و

ـخلاذ ا دس و یـد تاص ای خدش ویذ، ویه تاس د( اكی كفط دس) لؼ سی واس ای تشای ، دی زغییش خدا دخا مادیش ت سا

ؿس مذاس ت سا وشیؼسا فشواغ تایذ خدش ای دس ، ؿذ تاص صیش خدش وشد ساػر ویه تاس د وشیؼسا سی تش ، یثاؿذ خد لؼ

:ویذ زایح ؿذ داد ایؾ لؼر دس سا خذیذ فشواغ واس ای تشای ، داد زغییش تشا دس ؿذ

Page 69: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

69

تؼذ اص سػ وا ذاس زغییش داد مذاس لؼاذ ، تر ت تشا سیضی یىش یشػذ .

تش سی ایى ـخق ؿذ ویذ اییذ . ؿذ تاص خدش دس ، ویذ زح ویه دتاس ا سی ، یىش سی ض وذ سیخس تشای

: دیذ زغییش شزض ا 45 ت سا وشیؼسا فشواغ سی ، دسخدش ی خذیذ ت ط رخیش ی وذ ض سفس ا سا تاص ویذ

وذ.. ویذ وادای سا ا وشد ودی CCS طیي دس سا اػر خد تاال دس و ای تشا ، اػر ؿذ رخیش hex. خؼذ تا ض وذ

.ویذ یىش اسد سا ض

ؿشع ت زـه صد یىذ : LED و یىیذ ذـا ، ویذ ویه ػاصی ؿثی ؿشع ایى سی ایر دس

تشای دسیافر اصؽ وا ش افضاس خشزع + اخشی ؼخ ی ا ت ادسع صیش شاخؼ ویذ :

http://www.iranmicro.ir/forum/showthread.php?t=2645

Page 70: PIC شِشسٙو ٚشىیٔ ؽصٛٔا - nonlinear.ir · رػاػ 42 سد PIC شِشسٙو ٚشىیٔ ؽصٛٔا-IN 24 HOURS c ٖاتص ٝت یؼیٛ٘ ٝٔا٘شت ُٔاو ؽصٛٔا

70

: فل ؿؾ

ثاضث زىیی ػی وساب :

خشط ی خاغ واستشدی خشداخس ای ، دس ای خشط ا اص اوثش دػسسازی و لثال تشسػی وشدی اػسفاد ؿذ اػر 01دس ای تخؾ ت تشسػی

ؿثی ػاصی ویذ ػدغ زهیطاذ خد سا تخایذ . .تشای یادیشی تسش اتسذا خشط سا

:اخز اتغ

HELP افضاس ش

یاس ػداع سها ؿس AVR ای وسشش یىش ػشیغ اصؽ

An introduction to programming the microchip pic in c by nigel gardner

www.microchip.com

Microchip Master's conference