Professional Documents
Culture Documents
آﺷﻨﺎﻳﻲ ﺑﺎ ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮﻫﺎي
اﻣﻴﺮ ره اﻓﺮوز
٣
در ﺻﻮرﺗﯽ ﮐﻪ ﻋﻼﻗﻪ ﻣﻨﺪﯾﺪ ﺗﺎ اﻃﻼﻋﺎت ﺟﺎﻣﻌﺘﺮی را در ﻣﻮرد ﻣﯿﮑﺮوﮐﻨﺘﺮوﻟﺮﻫﺎی AVRﺑﺪﺳﺖ آورﯾﺪ ﻣﯽ ﺗﻮاﻧﯿﺪ ﮐﺘﺎب زﯾﺮ
را ﺗﻬﯿﻪ ﮐﻨﯿﺪ:
ﻣﻮﻓﻖ ﺑﺎﺷﯿﺪ.
ﻓﺼﻞ اول
آﺷﻨﺎﻳﻲ ﺑﺎ AVR
AVRﻫﺎ ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮﻫﺎي ٨ﺑﻴﺘﻲ از ﻧﻮع CMOSﺑﺎ ﺗﻮان ﻣﺼﺮﻓﻲ ﭘﺎﻳﻴﻦ ﻫﺴﺘﻨﺪ ﻛﻪ ﺑــﺮ اﺳـﺎس ﺳـﺎﺧﺘﺎر ﭘﻴﺸـﺮﻓﺘﻪ
RISCﺳﺎﺧﺘﻪ ﺷﺪهاﻧﺪ .ﭘﺲ از ﺳﺎﺧﺖ اوﻟﻴﻦ ﻧﺴﺨﻪﻫﺎي AVRدر ﺳـﺎل ،١٩٩٦اﻳـﻦ ﺳـﺮي از ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮﻫـﺎ ﺗﻮاﻧﺴـﺖ ﻧﻈـﺮ
ﻋﻼﻗﻤﻪﻣﻨﺪان اﻟﻜﺘﺮوﻧﻴﻚ را ﺑﻪ ﺧﻮد ﺟﺬب ﻛﻨﺪ ﺑﻪ ﻃﻮري ﻛﻪ اﻣﺮوزه ﻳﻜﻲ از ﭘﺮﻣﺼﺮﻓﺘﺮﻳﻦ اﻧﻮاع ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮﻫﺎ ﺑﻪ ﺣﺴــﺎب ﻣﻲآﻳـﺪ.
ﻫﻤﺎن ﻃﻮر ﻛﻪ ﻣﻲ داﻧﻴﺪ ﻧﻤﻲﺗﻮان ﻫﻴﭻ ﻧﻮع ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮي را ﺑﻪ ﻋﻨﻮان ﺑﻬﺘﺮﻳﻦ ﻣﻌﺮﻓﻲ ﻛﺮد ﭼﺮا ﻛﻪ ﻫﺮ ﻣﻴﻜﺮوﻛﻨــﺘﺮوﻟﺮ ،ﻛﺎرﺑﺮﻫـﺎي
٤
ﺧﺎص ﺧﻮد را دارد و ﺑﺮ اﺳﺎس ﺧﺼﻮﺻﻴﺎت داﺧﻠﻲ ،ﻣﻲﺗﻮاﻧﺪ ﺗﻨﻬﺎ ﺑﺮاي ﻣﻮارد وﻳﮋهاي ﺑﻪ ﻋﻨﻮان ﺑﻬﺘﺮﻳﻦ اﻧﺘﺨــﺎب ﮔﺮدد ،وﻟـﻲ ﺑـﺎ اﻳـﻦ
ﺣﺎل ﺑﺎ ﻣﻄﺎﻟﻌﺔ ﺻﻔﺤﺎت ﺑﻌﺪي و آﺷﻨﺎﻳﻲ ﺑﺎ اﻣﻜﺎﻧﺎت و ﻧﺮم اﻓﺰارﻫﺎي ﺟﺎﻧﺒﻲ AVRﻣﺘﻮﺟــﻪ ﺧﻮاﻫﻴـﺪ ﺷـﺪ ﻛـﻪ در ﻛـﻞ اﺳـﺘﻔﺎده از
AVRﻫﺎ ﺑﺎ ﺳﺎﺧﺘﺎر ،RISCدﺳﺘﻮرات را ﺗﻨﻬﺎ در ﻳﻚ ﭘﺎﻟﺲ ﺳﺎﻋﺖ اﺟﺮا ﻣﻲﻧﻤﺎﻳﻨﺪ و ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ ﻣﻲﺗﻮاﻧﻴﻢ ﺗﺎ ﺑـﻪ ازاي
ﻫﺮ ﻳﻚ ﻣﮕﺎﻫﺮﺗﺰ ،ﻳﻚ ﻣﮕﺎدﺳﺘﻮر را در ﺛﺎﻧﻴﻪ) (MIPSاﺟﺮا ﻛﺮده و ﺑﺮﻧﺎﻣﻪ را از ﻟﺤﺎظ ﺳﺮﻋﺖ ﭘﺮدازش و ﻧﻴﺰ ﻣﺼﺮف ﺗﻮان ﺑﻬﻴﻨﻪ ﻛﻨﻴﻢ.
AVRﻫﺎ ٣٢ ،رﺟﻴﺴﺘﺮ ﻫﻤﻪ ﻣﻨﻈﻮره ) (R0..R31و ﻣﺠﻤﻮﻋﻪ دﺳﺘﻮرات ﻗﺪرﺗﻤﻨﺪي را ﺷﺎﻣﻞ ﻣﻲﮔﺮدﻧﺪ .ﺗﻤــﺎم اﻳـﻦ ٣٢
رﺟﻴﺴﺘﺮ ﻣﺴﺘﻘﻴﻤ ﹰﺎ ﺑﻪ ALUﻣﺘﺼﻞ ﺷﺪهاﻧﺪ ،ﺑﻨﺎﺑﺮاﻳﻦ دﺳﺘﺮﺳﻲ ﺑﻪ دو رﺟﻴﺴﺘﺮ در ﻳﻚ ﺳﻴﻜﻞ ﺳﺎﻋﺖ ﻫــﻢ اﻣﻜـﺎنﭘﺬﻳـﺮ اﺳـﺖ .اﻳـﻦ
ﺳﺎﺧﺘﺎر ﻣﻮﺟﺐ ﻣﻲﮔﺮدد ﺗﺎ ﺳﺮﻋﺖ آﻧﻬﺎ ﻧﺴﺒﺖ ﺑﻪ ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮﻫﺎي CISCﺑﺘﻮاﻧﺪ ﺗﺎ ١٠ﺑﺮاﺑﺮ ﻫﻢ اﻓﺰاﻳﺶ ﻳﺎﺑﺪ.
ﺧﺎﻧﻮاده ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮﻫﺎي ، AVRﺗﺮاﺷﻪﻫﺎﻳﻲ ﭘﻴﺸﺮﻓﺘﻪ ﺑﺎ اﻣﻜﺎﻧﺎت ﺟﺎﻧﺒﻲ ﻛﺎﻣﻞ ﻫﺴﺘﻨﺪ .زﻣﺎﻧﻲ ﻛﻪ ﺷﺮوع ﺑﻪ ﻳــﺎدﮔﻴـﺮي
ﻣﻔﺎﻫﻴﻢ اﺻﻠﻲ آﻧﻬﺎ ﻧﻤﺎﻳﻴﺪ ،ﻟﺬت ﻓﺮاﮔﻴﺮي ﺗﻤﺎم ﺟﺰﺋﻴﺎﺗﺸﺎن آﻏﺎز ﻣﻲﺷﻮد.
٥
ﺷﻜﻞ ٢ -١اﻧﻮاع ﻣﺨﺘﻠﻒ ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮﻫﺎي AVRاز ٨ﭘﺎﻳﻪ ﺗﺎ ١٦ﭘﺎﻳﻪ
Tiny AVR-
AVR(classic AVR)-
Mega AVR-
ﺗﻔﺎوت ﺑﻴﻦ اﻳﻦ ﺳﻪ ﻧﻮع ﺑﻪ اﻣﻜﺎﻧﺎت ﻣﻮﺟﻮد در آﻧﻬﺎ ﻣﺮﺑﻮط ﻣﻲﺷﻮد Tiny AVR.ﻫﺎ ﻏﺎﻟﺒ ﹰﺎ ﺗﺮاﺷﻪﻫﺎﻳﻲ ﺑﺎ ﺗﻌﺪاد ﭘﻴﻦ و ﻣﺠﻤﻮﻋﻪ
دﺳﺘﻮرات ﻛﻤﺘﺮي ﻧﺴﺒﺖ ﺑﻪ Mega AVRﻫﺎ ﻣﻲﺑﺎﺷــﻨﺪ و ﺑـﻪ ﻋﺒـﺎرﺗﻲ از ﻟﺤـﺎظ ﭘﻴﭽﻴـﺪﮔﻲ ﺣﺪاﻗـﻞ اﻣﻜﺎﻧـﺎت را دارﻧـﺪMaga .
AVRﻫﺎ ﺣﺪاﻛﺜﺮ اﻣﻜﺎﻧﺎت را داﺷﺘﻪ و )AVR(classic AVRﻫﺎ در ﺑﻴﻦ اﻳﻦ دو ﻧﻮع ﻗﺮار ﻣﻲﮔﻴﺮﻧﺪ.
ﺗﻤﺎم ﺗﺮاﺷﻪﻫﺎي AVRﻣﺠﻤﻮﻋﻪ دﺳﺘﻮرات و ﺳﺎﺧﺘﺎر ﺣﺎﻓﻈﺔ ﻣﺸﺎﺑﻬﻲ دارﻧﺪ و از اﻳﻦ رو ﺗﻐﻴﻴﺮ از ﻳﻚ ﺗﺮاﺷﻪ ﺑﻪ ﺗﺮاﺷــﺔ دﻳـﮕﺮ
٦
-ﺑﺮﻧﺎﻣﻪرﻳﺰي ﺗﺮاﺷﻪ در داﺧﻞ ﻣﺪار ﻣﻮردﻧﻈﺮ ﺑﺪون اﺣﺘﻴﺎج ﺑﻪ ﭘﺮوﮔﺮاﻣﺮ).١(ISP
-ﻗﺎﺑﻠﻴﺖ ﺗﻨﻈﻴﻢ ﻧﻮﺳﺎﻧﮕﺮ ﺑﺮاي ﻛﺎر ﺗﻮﺳﻂ ﻛﺮﻳﺴﺘﺎل ﺧﺎرﺟﻲ ،ﻛﺮﻳﺴﺘﺎل ﻓﺮﻛﺎﻧﺲ ﭘﺎﻳﻴﻦ ﺧﺎرﺟﻲ ،ﻧﻮﺳﺎﻧﮕﺮ RC
-ﻣﺠﻬﺰ ﺑﻪ ﭘﺮوﺗﻜﻞ JTAGﺑﺮاي اﻧﺠﺎم ﻋﻤﻞ دﻳﺒﺎگ ،ﺗﺴــﺖ واﺳـﻜﻦ ﻛـﺮدن وﺳـﺎﻳﻞ ﺟـﺎﻧﺒﻲ ﺗﺮاﺷـﻪ و ﻧـﻴﺰ
-ﻛﺎﻧﺎﻟﻬﺎي ) PWMﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﻳﻤﺮﻫﺎ ﺑﻪ ﺻﻮرت ٨ﺑﻴﺘﻲ و ١٦ﺑﻴﺘﻲ ﺑﺮاي ﺗﻮﻟﻴﺪ ( PWM
٤ADC -ﻫﺎي ١٠ﺑﻴﺘﻲ ﺑﺎ ﻳﻚ ورودي و ﻳﺎ ورودي ﺗﻔﺎﺿﻠﻲ ﺑﺎ ﺑﻬﺮة ﻗﺎﺑﻞ ﺗﻨﻈﻴﻢ .٢٠٠ ،١٠ ،١
١
In System Programming
٢
Real Time Clock
٣
Clear Timer On Compare Match
٤
Analog to Digital Converter
٥
Inter-IC bus
٦
Two wire Interface
٧
Universal Synchronous and Asynchronous serial Receiver and Transmitter
٨
Serial peripheral Interface
٩
Watch Dog Timer
١٠
Power On Reset
٧
-ﻣﻨﺎﺑﻊ وﻗﻔﻪ داﺧﻠﻲ و ﺧﺎرﺟﻲ.
-ﻛﺎر ﺑﺎ وﻟﺘﺎژﻫﺎي ٥,٥-٤,٥در ﻣﺪﻟﻬﺎي ﺑﺪون ﭘﺴــﻮﻧﺪ Lﻣﺜـﻞ ، ATMega32و ٥,٥-٢,٧در ﻣﺪﻟـﻬﺎي ﺑـﺎ
ﻣﻤﻜﻦ اﺳﺖ ﺑﻌﻀﻲ از اﻣﻜﺎﻧﺎت ذﻛﺮ ﺷﺪه در ﺑﻌﻀﻲ از اﻧﻮاع ﺳﺎده AVRوﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ و ﺣﺠﻢ ﻓﻀﺎﻫــﺎي Sram,Eeprom,
Flashﻫﻢ در آﻧﻬﺎ ﻣﺘﻔﺎوت ﺑﺎﺷﺪ .ﻟﺬا ﺑﺮاي اﻧﺘﺨﺎب ﺻﺤﻴﺢ AVRاﮔﺮ ﺷﻤﺎ از ﻟﺤﺎظ ﻣﺎﻟﻲ ﻣﺤﺪودﻳﺖ دارﻳﺪ ﺑﺎﻳﺪ ﻧﻮﻋﻲ از AVRرا
اﻧﺘﺨﺎب ﻛﻨﻴﺪ ﻛﻪ ﺗﻨﻬﺎ اﻣﻜﺎﻧﺎت ﻣﻮرد ﻧﻴﺎز ﺷﻤﺎ را داﺷﺘﻪ ﺑﺎﺷﺪ .وﻟﻲ در ﺻﻮرﺗﻲ ﻛﻪ ﻣﺤﺪوﻳﺘﻲ ﻧﺪارﻳﺪ ،ﻣﺴﻠﻤ ﹰﺎ ﺑــﺎﻳﺪ ﻗﻮﻳـﺘﺮﻳﻦ AVR
ﻣﻤﻜﻦ اﺳﺖ از ﺧﻮد ﺑﭙﺮﺳﻴﺪ ،ﭼﮕﻮﻧﻪ ﺑﺎﻳﺪ ﻳﺎد ﺑﮕﻴﺮﻳﻢ ﺗﺎ ﻛﺪﻫﺎي AVRرا ﺑﻨﻮﻳﺴﻴﻢ!
ﻳﺎدﮔﻴﺮي ﻳﻚ ﻣﻮﺿﻮع ﺟﺪﻳﺪ ﺟﺎﻟﺐ اﺳﺖ وﻟﻲ ﻣﻲﺗﻮاﻧﺪ ﻛﻤﻲ ﻫﻢ ﻣﺄﻳﻮس ﻛﻨﻨﺪه ﺑﺎﺷﺪ .ﺑﺎ اﻳﻦ وﺟﻮد اﻣﻜﺎن ﻓــﺮاﮔﻴـﺮي AVRﺗﻨـﻬﺎ از
ﻃﺮﻳﻖ ﻣﻄﺎﻟﻌﻪ ﺑﺮﮔﻪ ﻫﺎي اﻃﻼﻋﺎﺗﻲ آن اﻣﻜﺎنﭘﺬﻳﺮ ﻣﻲﺑﺎﺷﺪ ﻛﻪ روﺷﻲ وﻗﺘﮕﻴﺮ و ﭘﻴﭽﻴﺪه اﺳﺖ.
زﻣﺎﻧﻲ ﻛﻪ ﺑﻪ ﺑﺮﮔﻪ ﻫﺎي اﻃﻼﻋــﺎﺗﻲ AVRﻧـﮕﺎه ﻛﻨﻴـﺪ اﺣﺘﻤـﺎ ﹰﻻ ﺧﻮاﻫﻴـﺪ ﺗﺮﺳـﻴﺪ ،ﺑـﺮاي ﻣﺜـﺎل ﺑـﺮﮔﻪ اﻃﻼﻋـﺎﺗﻲ ﻣﺮﺑـﻮط ﺑـﻪ)(L
ATMega128ﺗﻘﺮﻳﺒ ﹰﺎ ٣٥٠ﺻﻔﺤﻪ اﺳﺖ و ﻣﻄﺎﻟﻌﺔ ﻛﻞ آن و ﺑﻪ ﻳﺎد ﺳﭙﺮدن ﻣﺤﺘــﻮاي آن ﻛـﺎر ﻣﺸـﻜﻠﻲ اﺳـﺖ .ﺧﻮﺷـﺒﺨﺘﺎﻧﻪ ﻻزم
ﻧﻴﺴﺖ ﺗﺎ اﻳﻦ ﻛﺎر را اﻧﺠﺎم دﻫﻴﺪ .ﺑﺮﮔﻪ ﻫﺎي اﻃﻼﻋﺎﺗﻲ ،ﻣﺠﻤﻮﻋﻪاي از اﻃﻼﻋﺎت ﻛﺎﻣﻞ و ﺣﺮﻓﻪاي ﻣﻲﺑﺎﺷﻨﺪ و ﺷﻤﺎ ﻣﻲﺗﻮاﻧﻴﺪ در زﻣــﺎﻧﻲ
ﻛﻪ ﻧﺴﺒﺖ ﺑﻪ ﻋﻤﻠﻜﺮد اﻣﻜﺎﻧﺎت AVRو ﻳﺎ وﺳﺎﻳﻞ ﺟﺎﻧﺒﻲ ﻣﻄﻤﺌﻦ ﻧﻴﺴﺘﻴﺪ از آﻧﻬﺎ ﺑﻪ ﻋﻨﻮان ﻣﺮﺟﻊ اﺳﺘﻔﺎده ﻛﻨﻴﺪ.
زﻣﺎﻧﻲ ﻛﻪ ﺷﻤﺎ ﻳﻚ ﺑﺮﮔﻪ ﻫﺎي اﻃﻼﻋﺎﺗﻲ ﻣﺮﺑﻮط ﺑﻪ ﻳﻜﻲ از اﻧﻮاع AVRرا ﻣﺸﺎﻫﺪه ﻧﻤﺎﻳﻴﺪ ،ﻣﻲﺗﻮاﻧﻴﺪ آن را ﺑﻪ ﻗﺴﻤﺘﻬﺎي زﻳــﺮ
ﺗﻘﺴﻴﻢ ﻛﻨﻴﺪ.
٨
٤ـ ﺑﺮﻧﺎﻣﻪرﻳﺰي ﺣﺎﻓﻈﻪ.
زﺑﺎن ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲC
اﻣﺮوزه زﺑﺎن ﺳﻄﺢ ﺑﺎﻻي Cﻫﺮ ﭼﻪ ﺑﻴﺸﺘﺮ ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮﻫﺎ ﻋﻤﻮﻣﻴﺖ ﻳﺎﻓﺘﻪ اﺳﺖ .ﻣﺰاﻳﺎي اﺳﺘﻔﺎده از زﺑﺎن C
ﺑﻪ ﺟﺎي زﺑﺎن اﺳﻤﺒﻠﻲ زﻳﺎدﻧﺪ :ﻛﺎﻫﺶ زﻣﺎن ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ،ﻧﮕﻬﺪاري ﺳﺎدهﺗﺮ و ﻗﺎﺑﻠﻴﺖ ﺣﻤﻞ ﺑﻴﺸﺘﺮ ،اﺳﺘﻔﺎده ﻣﺠﺪد ازﻛﺪﻫﺎ و ﺳــﺎدهﺗﺮ
ﺷﺪن ﻓﻬﻢ ﺑﺮﻧﺎﻣﻪ .ﻋﻴﺐ آن ﻫﻢ اﻓﺰاﻳﺶ ﺣﺠﻢ ﻛﺪﻫﺎ و در ﻧﺘﻴﺠﻪ ﻛﺎﻫﺶ ﺳﺮﻋﺖ ﺑﺮﻧﺎﻣﻪ ﻣﻲﺑﺎﺷﺪ .ﺑﺮاي ﻛــﺎﻫﺶ ﻳـﺎ رﻓـﻊ اﻳـﻦ ﻣﻌـﺎﻳﺐ
ﺳﺎﺧﺘﺎر AVRﺑﻪ ﮔﻮﻧﻪاي ﻃﺮاﺣﻲ ﺷﺪه ﺗﺎ دﺳﺘﻮرات ﺗﻮﻟﻴﺪ ﺷﺪه ﺗﻮﺳﻂ ﻛﺎﻣﭙﺎﻳﻠﺮ Cرا ﺑﻪ ﺻﻮرت ﻣﺆﺛﺮ دﻳﻜﺪ و اﺟﺮ ﻧﻤﺎﻳﺪ.
ﻃﺮاﺣﻲ ﻛﺎﻣﭙﺎﻳﻠﺮ Cﻗﺒﻞ از ﺗﻜﻤﻴﻞ ﺳﺎﺧﺘﺎر و ﻣﺠﻤﻮﻋﻪ دﺳﺘﻮرات AVRﺻﻮرت ﮔﺮﻓﺘﻪ اﺳﺖ .ﻧﺘﻴﺠﻪ اﻳﻦ ﻋﻤﻠﻜﺮد ﻫﻤﺰﻣﺎن ﺑﻴﻦ
ﺗﻴﻤﻬﺎي ﻛﺎﻣﭙﺎﻳﻠﺮ و ،AVRﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮي ﺑﺎ ﻛﺪﻫﺎي ﺗﻮﻟﻴﺪ ﺷﺪه ﺟﻬﺖ اﺳﺘﻔﺎده ﺑﻬﻴﻨﻪ و ﻛﺎراﻳﻲ ﺑﺎﻻ ﻣﻲﺑﺎﺷﺪ.
در اﻳﻦ ﻛﺘﺎب ﺑﺮ آﻧﻴﻢ ﺗﺎ اﺑﺘﺪا ﺑﺎ ﻧﺮم اﻓﺰار CodevisionAVRﺑﺮاي ﻛﺎﻣﭙــﺎﻳﻞ ﻛـﺮدن ﺑﺮﻧﺎﻣـﻪ ﻫـﺎي Cآﺷﻨﺎﺷـﺪه ،و ﭼﻨـﺪ ﺑﺮﻧﺎﻣـﻪ
ﻛﺎرﺑﺮدي را ﺗﻮﺿﻴﺢ داده و اﺟﺮا ﻛﻨﻴﻢ.در اﻳﻨﺠﺎ از ﺗﺮاﺷﻪ ATMega32اﺳﺘﻔﺎده ﻣﻲ ﻛﻨﻴﻢ .در ﺷﻜﻞ) (٣-١ﻛﻠــﻲ ﺗﺮاﺷـﻪ و ﻋﻤﻠﻜـﺮد
ﭘﺎﻳﻪ ﻫﺎي ﻣﺨﺘﻠﻒ اﻳﻦ ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮ را ﻣﻲ ﺑﻴﻨﻴﺪ .در ﻣﻮرد ﺳﺨﺖ اﻓﺰار ﻻزم ﺑﺮاي راه اﻧﺪازي ﺗﺮاﺷﻪ در ﻓﺼــﻞ دوم ﺗﻮﺿﻴـﺢ ﺧﻮاﻫﻴـﻢ
داد.
٩
ﺷﮑﻞ ٣ -١
١٠
ﻓﺼﻞ دوم
ﻣﻘﺪﻣﻪ
دو روش ﻣﺨﺘﻠﻒ ﺟﻬﺖ ﺑﺮﻧﺎﻣﻪرﻳﺰي ﺗﺮاﺷﻪﻫﺎي AVRوﺟﻮد دارد ﻛﻪ ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻣﻮازي و ﺳﺮﻳﺎل)ﺣــﺎﻟﺖ (ISPﻧـﺎﻣﻴﺪه
ﻣﻲﺷﻮﻧﺪ .در ﺣﺎﻟﺖ ﻣﻮازي ﺗﺮاﺷﺔ ﻣﻮردﻧﻈﺮ در ﺳﻮﻛﺖ ﭘﺮوﮔﺮاﻣﺮ ﻗﺮار داده ﻣﻲﺷﻮد .در اﻳﻦ روش ﻻزم اﺳﺖ ﺗﺎ وﻟﺘﺎژ +١٢وﻟﺖ ﺑﻪ ﭘﺎﻳـﻪ
RESETاﻋﻤﺎل ﮔﺮدد .ارﺗﺒﺎط ﺑﻴﻦ ﭘﺮوﮔﺮاﻣﺮ و ﺗﺮاﺷﻪ ﻣﻮردﻧﻈــﺮ ﻧـﻴﺰ ﻫﻤـﺎن ﻃـﻮر ﻛـﻪ از اﺳـﻤﺶ ﭘﻴﺪاﺳـﺖ ﺑـﻪ ﻛﻤـﻚ دﺳـﺘﻮرات
ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﻣﻮازي ﺑﺮﻗﺮار ﻣﻲﺷﻮد و ﺑﻪ ﻫﻤﻴﻦ دﻟﻴﻞ ﺳــﺮﻋﺖ ﺑﺮﻧﺎﻣـﻪرﻳﺰي در اﻳـﻦ روش دو ﺑﺮاﺑـﺮ ﺳـﺮﻳﻌﺘﺮ از ﺣـﺎﻟﺖ ISPاﺳـﺖ.
ﺑﺮﺧﻼف روش ISPﻛﻪ ﺑﻌﻀﻲ از اﻧﻮاع AVRاز آن ﭘﺸﺘﻴﺒﺎﻧﻲ ﻧﻤﻲﻛﻨﻨﺪ ،روش ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻣﻮازي ﻣﻲﺗﻮاﻧﺪ ﺑﺮاي اﻧــﻮاع AVRﺑـﻪ
ﻛﺎر ﺑﺮده ﺷﻮد .ﺑﻨﺎﺑﺮاﻳﻦ ﺑﻪ ﻃﻮر ﻛﻠﻲ از اﻳﻦ روش در ﻣﻮاردي ﻛﻪ ﺗﻮﻟﻴﺪ اﻧﺒﻮه ﻣﻮردﻧﻈﺮ اﺳﺖ اﺳﺘﻔﺎده ﻣﻲﮔﺮدد ،اﻣﺎ آﻧﭽﻪ در اﻳﻦ ﺑﺨﺶ
١١
ﺷﻜﻞ ١ -٢روﺷﻬﺎي ﻣﺨﺘﻠﻒ ﺑﺮﻧﺎﻣﻪ رﻳﺰي ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮﻫﺎي AVR
روش ١ISPﻣﻲﮔﻮﻳﻨﺪ .ﻗﺒﻞ از اﻳﻨﻜﻪ ﺑﻪ ﺗﻮﺿﻴﺢ ﻗﺴﻤﺘﻬﺎي ﻣﺨﺘﻠﻒ در اﻳﻦ روش ﺑﭙﺮدازﻳﻢ ﻻزم اﺳﺖ ﻗﺴﻤﺘﻲ از ﺣﺎﻓﻈــﻪ ،AVRﺑـﻪ
١
In system programming
١٢
ﻧﺎم Boot Loaderرا ﻣﻌﺮﻓﻲ ﻧﻤﺎﻳﻴﻢ .در اﻧﻮاﻋﻲ از AVRﻛﻪ از روش ISPﺣﻤﺎﻳﺖ ﻣﻲﻛﻨﻨﺪ .ﺣﺎﻓﻈﻪ ،FLASHﺑــﻪ دو ﻗﺴـﻤﺖ
ﺗﻘﺴﻴﻢ ﻣﻲﺷﻮد ﻛﻪ اوﻟﻴﻦ ﻗﺴﻤﺖ ﻫﻤﺎن Boot Loaderاﺳﺖ .ﻛﺪﻫﺎي ﻣﻮﺟــﻮد در اﻳـﻦ ﻗﺴـﻤﺖ اﻣﻜـﺎن ISPرا ﺑـﺮاي ﻣـﺎ اﻳﺠـﺎد
ﻣﻲﻧﻤﺎﻳﻨﺪ .ﺑﻪ ﻋﺒﺎرﺗﻲ ﺳﺎدهﺗﺮ ﺑــﻪ ﻛﻤـﻚ ﺑﺮﻧﺎﻣـﻪ ﻣﻮﺟـﻮد در اﻳـﻦ ﻗﺴـﻤﺖ AVR،ﻛﺪﻫـﺎي ﺑﺮﻧﺎﻣـﻪ را از PCﮔﺮﻓﺘـﻪ و ﺧـﻮدش را
ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻣﻲﻛﻨﺪ .ﺟﺎﻟﺐ اﺳﺖ ﺑﺪاﻧﻴﺪ ﻛﻪ اﻳﻦ ﻗﺴﻤﺖ) (Boot Loaderﻣﻲﺗﻮاﻧﺪ ﺧﻮدش را ﻫﻢ ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻣﺠﺪد ﻧﻤﺎﻳﺪ.
ﻫﺪف ﻣﺎ در اﻳﻦ ﻗﺴﻤﺖ ﺗﻮﺿﻴﺢ و ﺳﺎﺧﺖ ﺳﺨﺖ اﻓﺰار واﺳﻄﻲ اﺳﺖ ﻛﻪ اﻣﻜﺎن ﺑﺮﻗﺮاي ارﺗﺒﺎط ﺑﻴﻦ PCو ﺑﺮﻧــﺎﻣﻪBoot
Loaderﺑﺮ روي AVRرا اﻳﺠﺎد ﻣﻲﻛﻨﺪ .اﻳﻦ وﺳﻴﻠﻪ Programming adapterﻧﺎﻣﻴﺪه ﻣﻲﺷﻮد.
ﺑﻪ ﻃﻮر ﻛﻠﻲ در اﻳﻦ ﺑﺨﺶ دو ﭘﺮوﺗﻮﻛﻞ ﻣﺨﺘﻠﻒ وﺟﻮد دارﻧﺪ ،ﻛﻪ ﺟﻬﺖ ﺑﺮﻧﺎﻣﻪرﻳﺰي ﺑﻪ ﻛﺎر ﻣﻲروﻧﺪ .اوﻟﻴﻦ ﭘﺮوﺗﻜﻞ ١SPIو
دوﻣﻲ JTAGﻧﺎم دارﻧﺪ .در ﻋﻤﻞ آﻧﭽﻪ ﺑﻴﺸﺘﺮ ﺑﻪ ﻛﺎر ﻣﻲرود ﻫﻤﺎن SPIاﺳﺖ .اﻟﺒﺘﻪ ﺑﻪ ﻛﻤﻚ ﭘﺮوﺗﻮﻛﻞ JTAGﻧﻪ ﺗﻨﻬﺎ ﻗﺎدرﻳﻢ ﺗــﺎ
ﺗﺮاﺷﻪ ﻣﻮردﻧﻈﺮ را ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻛﻨﻴﻢ ،ﺑﻠﻜﻪ ﺑﺎ ﺗﺄﻣﻴﻦ ﺳﺨﺖاﻓﺰار و ﻧﺮماﻓﺰار ﻛﺎﻓﻲ ﻣﻲﺗﻮاﻧﻴﻢ ﻋﻤﻞ Debuggingرا ﻫﻢ اﻧﺠﺎم دﻫﻴــﻢ و
ﺑﻨﺎﺑﺮاﻳﻦ ﺑﻪ وﺳﺎﻳﻞ ﺑﺮﻧﺎﻣﻪرﻳﺰي ﭘﻴﭽﻴﺪهﺗﺮ ﺑﺎ ﻗﻴﻤﺘﻲ ﺑﺴﻴﺎر ﺑﻴﺸﺘﺮ از ﻳﻚ ارﺗﺒﺎط ﺳﺎده SPIﻧﻴﺎز ﺧﻮاﻫﺪ ﺑﻮد ،ﺑﻪ اﻳﻦ ﺗﺮﺗﻴــﺐ ﺑـﻪ دﻟﻴـﻞ
ﻋﻼوه ﺑﺮ دو روش ﻗﺒﻞ ،روش ﺑﺮﻧﺎﻣﻪرﻳﺰي ﺳﺮﻳﺎﻟﻲ ﺑﺎ اﺳﺘﻔﺎده از وﻟﺘﺎژ ١٢وﻟﺖ ﻫﻢ وﺟﻮد دارد ﻛﻪ روش ﺑﺮﻧﺎﻣﻪرﻳﺰي ﺳــﺮﻳﺎل
وﻟﺘﺎژ ﺑﺎﻻ ﻧﺎﻣﻴﺪه ﻣﻲﺷﻮد .از آﻧﺠﺎﻳﻲ ﻛﻪ اﻳﻦ روش ﺗﻨﻬﺎ ﺑﺮاي ﺗﺮاﺷﻪﻫﺎي ٨ﭘﺎﻳﻪ ﺑﻪ ﻛﺎر ﻣﻲرود ،در اﻳﻨﺠﺎ ﺑﻪ آن اﺷﺎره ﻧﻤﻲﻛﻨﻴﻢ.
در روش ،ISPﺑﺎ اﺳﺘﻔﺎده از ﭘﺮوﺗﻜﻞ SPIﻣﻲﺗﻮاﻧﻴﻢ ﻋﻼوه ﺑــﺮ ﺑﺮﻧﺎﻣـﻪرﻳﺰي ﺗﺮاﺷـﻪ ،ﺻﺤـﺖ ﺑﺮﻧـﺎﻣﻪ ﻧﻮﺷـﺘﻪ ﺷـﺪه را ﻫـﻢ
ﺗﺸﺨﻴﺺ دﻫﻴﻢ) .(verifyدر اﻳﻦ روش ﺗﻨﻬﺎ ﺑﻪ ﺳﻪ ﺳﻴﮕﻨﺎل اﺣﺘﻴﺎج دارﻳــﻢ ،ﻳـﻚ ﺧـﻂ ورودي ،ﻳـﻚ ﺧـﻂ ﺧﺮوﺟـﻲ و ﻳـﻚ ﺧـﻂ
.Clockﻋﻼوه ﺑﺮ اﻳﻦ ،ﭘﻴﻦ RESETدر ﺗﺮاﺷﻪ ﻫﻢ ﺑﺎﻳﺪ در ﺣﻴﻦ ﺑﺮﻧﺎﻣﻪرﻳﺰي ﭘﺎﻳﻴﻦ)ﺻﻔﺮ ﻣﻨﻄﻘﻲ( ﻧﮕﻪ داﺷﺘﻪ ﺷﻮدﺿﻤﻨﺎ ﺑــﻪ وﻟﺘـﺎژ
ﻼ از ﻗـﺎﺑﻠﻴﺖ
١٢وﻟﺖ ﻫﻢ ﻧﻴﺎزي ﻧﺪارﻳﻢ .ﺑﺎ اﻳﻦ ﺣﺎل در ﺑﻌﻀﻲ از ﺗﺮاﺷﻪﻫﺎ اﻣﻜﺎن ﺗﻨﻈﻴﻢ ﻓﻴﻮزﻫﺎ را ﻧﺪارﻳﻢ و ﺣﺘــﻲ ﺑﻌﻀـﻲ از آﻧـﻬﺎ اﺻـ ﹰ
واﺳﻄﻪﻫﺎي ISP
١
Serial Peripheral Interface
١٣
ﺷﮑﻞ ٢ -٢ﺑﺮﻧﺎﻣﻪ رﻳﺰى ﺑﻪ روش ISP
ﻋﺒﺎراﺗﻲ ﻣﺜﻞ “واﺳﻄﻪﻫﺎي ﺑﺮﻧﺎﻣﻪرﻳﺰي ﺳﺮﻳﺎل و ﻣﻮازي” ﻛﻪ اﻏﻠﺐ ﺑﻪ ﻛﺎر ﻣﻲروﻧﺪ ﻣﻤﻜﻦ اﺳﺖ ﻣﻌﻨــﻲ ﻧﺎدرﺳـﺘﻲ ﺑـﺮاي ﻣـﺎ
داﺷﺘﻪ ﺑﺎﺷﺪ ،ﭼﺮا ﻛﻪ ﺑﻌﻀﻲ از ﻣﻮﻟﺪﻫﺎي واﺳﻂ ،ISPاز ﭘﻮرت ﻣﻮازي ﻛﺎﻣﭙﻴﻮﺗﺮ اﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ در ﺻﻮرﺗﻲ ﻛــﻪ ﺑﻘﻴـﻪ ﺑـﻪ ﭘﻮرﺗـﻬﺎي
ﺳﺮﻳﺎل ﻛﺎﻣﭙﻴﻮﺗﺮ) (COMﻣﺘﺼﻞ ﻣﻲﺷﻮﻧﺪ ،وﻟﻲ ﻫﺮ دوي آﻧﻬﺎ از روش ﺑﺮﻧﺎﻣﻪرﻳﺰي ﺳﺮﻳﺎل اﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ).ﺷﻜﻞ (٢-٢
واﺳﻄﻪﻫﺎي ISPﺑﺮاي ﭘﻮرت ﻣﻮازي ﺑﺴﻴﺎر ﺳﺎدهﺗﺮ ﻫﺴﺘﻨﺪ .ﺑﻌﻀﻲ از اﻧﻮاع آﻧﻬﺎ ﺣﺘﻲ ﻫﻴﭻ اﺣﺘﻴﺎﺟﻲ ﺑﻪ ﻋﻨــﺎﺻﺮ ﻓﻌـﺎل ﻫـﻢ
ﻧﺪارﻧﺪ وﻟﻲ ﺷﻤﺎ ﻣﻲﺗﻮاﻧﻴﺪ ﺗﺼﻮر ﻛﻨﻴﺪ ﻛﻪ اﺗﺼﺎل ﻣﺴﺘﻘﻴﻢ ﻣﺪار ﺑﻪ ﭘﻮرت ﻣﻮازي ﻣﻤﻜﻦ اﺳﺖ ﺑﺎﻋﺚ اﻳﺠﺎد ﻣﺸﻜﻞ ﺷﻮد .ﺑﻨﺎﺑﺮاﻳﻦ اﻛــﺜﺮ
واﺳﻄﻪﻫﺎ از ﻳﻚ دراﻳﻮ ﺧﻂ اﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ .وﻟﻲ ﺑﺎ اﻳﻦ ﺣﺎل ﻫﻨﻮز ﻫﻢ ﭼﻨﺪان اﻳﻤﻦ ﻧﻴﺴﺖ .ﭘﻮرت ﻣﻮازي در ﻣﻘﺎﺑﻞ اﺗﺼﺎل ﻛﻮﺗــﺎه و
ﻳﺎ اﺿﺎﻓﻪ ﺑﺎر ﭼﻨﺪان ﻣﻘﺎوم ﻧﻴﺴﺖ و ﻣﻤﻜﻦ اﺳﺖ ﺑﺎ ﻗﻄﻊ و وﺻﻞ ﺗﻐﺬﻳﻪ ﺑﻮرد ،ﭘﻮرت آﺳﻴﺐ ﺑﺒﻴﻨﺪ.
در ﻣﻘﺎﺑﻞ ﭘﻮرت ﻣﻮازي ،ﭘﻮرت ﺳﺮﻳﺎل ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﻪ ﺧﻮﺑﻲ ﺣﻔﺎﻇﺖ ﻣﻲﮔﺮدد .دو ﻧﻮع ﻣﺪار واﺳﻂ ﺑﺮاي ﭘﻮرت COMوﺟـﻮد
دارد .ﻧﻮع ﺳﺎدهﺗﺮ ﺑﺎ اﺳﺘﻔﺎدة ﻣﺴﺘﻘﻴﻢ از ﺧﻄﻮط ﭘﻮرت ،ﭘﺎﻟﺴﻬﺎي ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻻزم را اﻳﺠﺎد ﻣﻲﻛﻨﺪ .ﻧﻮع دوم ،دﺳﺘﻮرات ﺑﺮﻧﺎﻣﻪرﻳﺰي و
اﻃﻼﻋﺎت ﺑﺮﻧﺎﻣﻪ را ﺑﻪ ﻣﺪار واﺳﻄﻪاي ﻣﻲﻓﺮﺳﺘﺪ ،ﻛﻪ ﻣﺪار واﺳﻂ آﻧﻬﺎ را ﺗﻐﻴﻴﺮ داده و ﭘﺎﻟﺴﻬﺎي ﻻزم را ﺗﻮﻟﻴﺪ ﻣﻲﻛﻨﺪ .اﻳﻦ ﻧﻮع از ﻣــﺪار
واﺳﻂ ﺑﻪ ﻧﻮﻋﻲ ﺗﻮاﻧﺎﻳﻲ ﭘﺮدازش ﻫﻢ ﻧﻴﺎز دارد ﻛﻪ اﺻﻮ ﹰﻻ ﺑﻪ ﻛﻤﻚ ﻳﻚ ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮ ﺗﺄﻣﻴﻦ ﻣﻲﮔﺮدد.
از آﻧﺠﺎﻳﻲ ﻛﻪ ﺻﻨﻌﺖ ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﻪ ﺳﻤﺖ ١USBﺣﺮﻛﺖ ﻣﻲﻛﻨﺪ ﺑﺎ ﻛﺎﻣﭙﻴﻮﺗﺮﻫــﺎي ﻛﻴﻔـﻲ ﻛـﻪ ﺣﺘـﻲ ﺑـﻪ ﭘﻮرﺗـﻬﺎي
ﺳﺮﻳﺎل و ﻣﻮازي ﻣﺠﻬﺰ ﻧﺸﺪهاﻧﺪ ،اﻳﻦ ارﺗﺒﺎط ﺑﺴﻴﺎر ﻣﻬﻢ ﺧﻮاﻫﺪ ﺑﻮد .ﺳﺨﺖاﻓﺰار آﻣﺎده ﺑﺮاي ﺑﺮﻧﺎﻣﻪرﻳﺰي ﺑﻪ ﻛﻤــﻚ USBﻧـﻴﺰ وﺟـﻮد
ﺷﺮﻛﺖ ،Atmelﭘﺲ از ﺗﻮﻟﻴﺪ ،AVRﻛﻴﺘﻬﺎي آﻣﺎدهاي را ﺑﺮاي اﻓﺮاد ﺗﺎزه ﻛﺎري ﻛﻪ ﻗﺼــﺪ دارﻧـﺪ ﻛـﺎر ﺑـﺎ AVRرا ﻓـﺮا
ﮔﻴﺮﻧﺪ ﻃﺮاﺣﻲ ﻧﻤﻮد .اﻳﻦ ﻛﻴﺘﻬﺎ ﺑﻪ ﮔﻮﻧﻪاي ﻃﺮاﺣﻲ ﺷﺪهاﻧﺪ ﺗﺎ ﻓﺮد ﺑﻪ ﻛﻤﻚ اﻳﻦ ﻛﻴﺘﻬﺎ ،اﻣﻜﺎن ﺑﻪ ﻛﺎرﮔﻴﺮي ﺗﻤــﺎم اﻣﻜﺎﻧـﺎت AVRرا
داﺷﺘﻪ ﺑﺎﺷﺪ .وﻟﻲ آﻧﭽﻪ در ﻣﻮرد اﻳﻦ ﻛﻴﺘﻬﺎ ﺑﺮاي ﻣﺎ ﻣﻬﻢ اﺳﺖ ،ﺗﻨﻬﺎ ﺷﻴﻮه اﺗﺼﺎل آﻧﻬﺎ ﺑﻪ ﻛﺎﻣﭙﻴﻮﺗﺮ اﺳﺖ .اﻳﻦ ﻛﻴﺘــﻬﺎ ﺑـﻪ ﭼﻨـﺪ دﺳـﺘﻪ
ﺗﻘﺴﻴﻢ ﻣﻲﺷﻮﻧﺪ ﻛﻪ ﻫﺮ ﻳﻚ ﺗﻨﻬﺎ ﺑﺮاي ﻛﺎر ﺑﺎ ﺗﻌﺪادي از اﻧﻮاع ﺗﺮاﺷﻪﻫﺎ ﻃﺮاﺣﻲ ﺷﺪهاﻧﺪ .در اداﻣﻪ ﭼﻨﺪ ﻣﻮرد از آﻧﻬﺎ را ذﻛﺮ ﻣﻲﻛﻨﻴﻢ:
١
Universal Serial Bus
١٤
Atmel STK500/AVRISP
Dentronics DT006
Vogel Elektronik VTEC-ISP
Futurlec JRAVR
Microtronics ATCPU/Mega2000
آﻧﭽﻪ در اﻳﻨﺠﺎ ﻣﺪﻧﻈﺮ ﻣﺎﺳﺖ ﻣﺪار واﺳﻂ ﺑﺮاي ﺑﺮﻗﺮاري ارﺗﺒﺎط ،ISPدر ﻧــﻮع STK200/STK300اﺳـﺖSTK200 .
ﺑﺮاي ﻛﺎر ﺑﺎ ﭘﺮدازﻧﺪهﻫﺎي AVRو STK300ﺑﺮاي ﻛﺎر ﺑﺎ ﭘﺮدازﻧﺪهﻫﺎي ATMegaﻃﺮاﺣﻲ ﺷﺪهاﻧﺪ .اﻳﻦ دو ﺑﻮرد ﺳــﺎﺧﺘﺎر ﺑﺴـﻴﺎر
ﻣﺸﺎﺑﻬﻲ دارﻧﺪ و ﺗﻨﻬﺎ ﺗﻔﺎوت ﺑﻴﻦ آﻧﻬﺎ در ﻣﺤﻞ ﻗﺮارﮔﻴﺮي ﺳﻴﻢ ﻣﺮﺑﻮط ﺑﻪ ﺷﻨﺎﺳﺎﻳﻲ ﺑﻮرد ﻣﻲﺑﺎﺷﺪ .ﻣﺪار ﻣﺮﺑﻮط ﺑﻪ اﻳﻦ ﻣﺪﻟﻬﺎ در ﺷﻜﻞ
) (٣-٢ﻧﺸﺎن داده ﺷﺪه اﺳﺖ ﻛﻪ اﻟﺒﺘﻪ ﭼﻨﺪان ﻫﻢ ﭘﻴﭽﻴﺪه ﻧﻴﺴﺖ .ﻣﻤﻜﻦ اﺳﺖ در اوﻟﻴﻦ ﻧﮕﺎه ﻓﺮﻳﺒﻨﺪه ﺑﺎﺷﺪ ،ﭼﺮا ﻛﻪ ﺷــﻜﻞ ﺑﻴـﺶ از
VCC=+5v
100k
SW1
0.1u
0
Reset Circuit
اﻳﻦ واﺳﻄﻪ ﺣﺘﻲ ﻣﻲﺗﻮاﻧﺪ ﺑﺪون ﻫﻴﭻ ﻗﻄﻌﻪ اﻟﻜﺘﺮوﻧﻴﻜﻲ ﻫﻢ ﺳﺎﺧﺘﻪ ﺷﻮد ،وﻟﻲ اﮔﺮ آي ﺳﻲ ﺑﺎﻓﺮ وﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷــﺪ ﺑـﺎﻳﺪ
ﻣﺮاﻗﺐ ﺑﺎﺷﻴﻢ ﺗﺎ ﭘﻴﻨﻬﺎي ﻣﺮﺑﻮط ﺑﻪ ﺑﺮﻧﺎﻣﻪرﻳﺰي را ﺑﻪ ﻣﺪار دﻳﮕﺮي ﻣﺘﺼﻞ ﻧﻜﻨﻴﻢ .اﻟﺒﺘﻪ در ﺻﻮرت اﺳﺘﻔﺎده از اﻳﻦ ﻣﺪار ،ﻫﻨﻮز ﻫﻢ ﺑــﺎﻳﺪ
١٥
در ﻣﻮرد ﭘﻴﻨﻬﺎي ٢ MISO، ١MOSIو ٣ SCKاﺣﺘﻴﺎط ﻧﻤﺎﻳﻴﻢ .واﺿﺢ اﺳﺖ ﻛﻪ ﻣﺎ ﺑﺎﻳﺪ در زﻣﺎن ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻣﻄﻤﺌــﻦ ﺷـﻮﻳﻢ ﻛـﻪ
اﻳﻦ ﭘﻴﻨﻬﺎ ﺗﻮﺳﻂ وﺳﻴﻠﻪﻫﺎي ﺧﺎرﺟﻲ دﻳﮕﺮ ﺑﻪ GNDﻳﺎ Vccﻣﺘﺼﻞ ﻧﺸﺪه ﺑﺎﺷﻨﺪ.
در زﻣﺎﻧﻲ ﻛﻪ AVRدر ﺣﺎﻟﺖ ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻧﻴﺴﺖ 74HC244 ،ﺑﻪ ﻋﻨﻮان ﻳﻚ ﻣﺪار اﻳﺰوﻟﻪ ﻛﻨﻨﺪه ﻋﻤﻞ ﻣﻲﻛﻨــﺪ .در اﻳـﻦ
ﺣﺎﻟﺖ ﺗﻤﺎم ﺧﺮوﺟﻲﻫﺎ اﻣﭙﺪاﻧﺲ ﺑﺎﻻ ﻣﻲﺷﻮﻧﺪ ،ﺑﻪ ﻃﻮري ﻛﻪ ﺑﺮ ﻋﻤﻠﻜﺮد ﺗﺮاﺷﻪ ﺗﺄﺛﻴﺮ ﻧﺨﻮاﻫﻨﺪ ﮔﺬاﺷﺖ.
زﻣﺎﻧﻲ ﻛﻪ ﺣﺎﻟﺖ ISPاﻧﺘﺨﺎب ﮔﺮدد ،ﻧﻴﻤﺔ ﭘﺎﻳﻴﻦ 74HC244ﻓﻌﺎل ﻣﻲﺷــﻮد و ﺧـﻂ RESETاز ﺳﻴﺴـﺘﻢ ﻣﻮردﻧﻈـﺮ را
زﻣﻴﻦ ﻣﻲﻛﻨﺪ .اﻳﻦ ﻋﻤﻞ ﺗﻮﺳﻂ ﺳﻪ ﺑﺎﻓﺮ ﺻﻮرت ﻣﻲﮔﻴﺮد و از آﻧﺠﺎﻳﻲ ﻛﻪ ﺑﺎﻳﺪ ﺧﺎزن ﻣﺮﺑﻮط ﺑــﻪ ﻣـﺪار RESETدر ﺗﺮاﺷـﻪ دﺷـﺎرژ
ﮔﺮدد ،اﻳﻦ ﻛﺎر ﺑﻪ ﺧﻮﺑﻲ اﻧﺠﺎم ﻣﻲﺷﻮد .زﻣﺎﻧﻲ ﻛﻪ ﺗﺮاﺷﻪ در ﺣﺎﻟﺖ RESETﻗﺮار ﮔﺮﻓﺖ ،ﺑﺎ ﻓﺮض اﻳﻦ ﻛﻪ ﺧﻄﻮط MOSI, ،SCK
MISOدر ﺗﺮاﺷﻪ ،ﺗﺤﺖ ﺗﺄﺛﻴﺮ ﻫﻴﭻ ﻣﺪار ﺟﺎﻧﺒﻲ ﻗﺮار ﻧﺪاﺷﺘﻪ ﺑﺎﺷﻨﺪ ،زﻣــﺎن آن اﺳـﺖ ﺗـﺎ ﻧﻴـﻤﻪ ﺑـﺎﻻﻳﻲ 74HC244ﻓﻌـﺎل ﮔﺮدد و
دو اﺗﺼﺎل ﻛﻮﺗﺎه ﻣﻮﺟﻮد درﻛﺎﻧﻜﺘﻮر ﭘﻮرت ﭘﺮﻳﻨﺘﺮ ﺗﻮﺳﻂ ﻛﺎﻣﭙﻴﻮﺗﺮ،ﺟﻬﺖ ﺷﻨﺎﺳﺎﻳﻲ ﭘﺮوﮔﺮاﻣﺮ اﺳﺘﻔﺎده ﻣﻲﺷﻮﻧﺪ .اﺗﺼﺎل ﻛﻮﺗﺎه
ﭘﻴﻨﻬﺎي ٢و ١٢ﺑﻪ ﻋﻨﻮان ﺧﻂ ﺗﺸﺨﻴﺺ ﺑﺮاي STK200و اﺗﺼﺎل ﻛﻮﺗﺎه ﭘﻴﻨﻬﺎي ٣و ١٣ﺑﻪ ﻋﻨﻮان ﺧﻂ ﺗﺸﺨﻴﺺ ﺑﺮاي STK300
ﺑﻪ ﻛﺎر ﻣﻲروﻧﺪ و ﻫﺮ دوي آﻧﻬﺎ ﻣﻲﺗﻮاﻧﻨﺪ ﺑﻪ ﻃﻮر ﻫﻤﺰﻣﺎن ﺑﺎ ﻳﻜﺪﻳﮕﺮ ﻫﻢ وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﻨﺪ.
ﻻزم ﺑﻪ ذﻛﺮ اﺳﺖ ،در ﺻﻮرﺗﻲ ﻛﻪ ﻗﺼﺪ دارﻳﺪ ﺗﺎ ﺑﻪ ﺟﺎي Atmega32Lاز ﺗﺮاﺷﻪ دﻳــﮕﺮي اﺳـﺘﻔﺎده ﻛﻨﻴـﺪ،ﺑـﺮاي ﺑﺮﻧﺎﻣـﻪ
رﻳﺰي آن ﺗﻨﻬﺎ ﻛﺎﻓﻲ اﺳﺖ ﺗﺎ ﭘﺎﻳﻪ ﻫﺎي MOSI, MISO, SCK, RESETرا ﻫﻤﺎﻧﻨﺪ ﻣﺪار ﻗﺒﻞ ﺑﻪ ﻛﺎﺑﻞ ISPﻣﺘﺼﻞ ﻧﻤﺎﻳﻴﺪ.
ﻼ ﻫﻢ ﮔﻔﺘﻪ ﺷﺪ ،زﻣﺎﻧﻲ ﻛﻪ ﻗﺮار اﺳﺖ از AVRدر ﻣﺪ ISPاﺳﺘﻔﺎده ﺷــﻮد ،ﺑـﻮرد ﻣـﻮرد ﻧﻈـﺮ ﺑـﺎﻳﺪ ﺑـﻪ
ﻫﻤﺎن ﻃﻮر ﻛﻪ ﻗﺒ ﹰ
ﮔﻮﻧﻪاي ﻃﺮاﺣﻲ ﺷﻮد ﺗﺎ ﭘﻴﻨﻬﺎي (MOSI, MISO, SCK, RESET) ISPﺑﺮاي اﻳﻦ ﻋﻤﻞ ذﺧﻴﺮه ﮔﺮدﻧﺪ ،ﺑﺎ اﻳﻦ ﺣــﺎل ﻣﻤﻜـﻦ
در ﺻﻮرﺗﻲ ﻛﻪ ﻣﻮارد ﻻزم رﻋﺎﻳﺖ ﮔﺮدد ﭘﻴﻨﻬﺎي ISPﻣﻲﺗﻮاﻧﻨﺪ ﺑﻪ ﺻﻮرت ﻣﺸﺘﺮك ﺑﺮاي ﻋﻤﻞ ISPو ﻧﻴﺰ ﺑﻪ ﻋﻨﻮان I/Oﺑﻪ
ﻛﺎر روﻧﺪ .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر درﻧﻈﺮ ﮔﺮﻓﺘﻦ ﻣﻮارد زﻳﺮ ﺿﺮوري اﺳﺖ).ﺷﻜﻞ (٤-٢
-١ﻗﺮار دادن ﻳﻚ ﻣﻘﺎوﻣﺖ ﺑﻴﻦ ﭘﻴﻦ RESETو ﻣﺪار ،RESETدر اﻳﻦ ﺻﻮرت ﻣﺪار RESETاﺧﺘﻼﻟــﻲ
١
Master Out Slave In
٢
Master In Slave Out
٣
Serial Clock
١٦
ﺷﻜﻞ ٤ -٢ﻣﻼﺣﻈﺎت ﻻزم ﺑﺮاي ﻣﺪار ISP
-٢ﻣﻄﻤﺌﻦ ﺷﻮﻳﺪ ﻛﻪ ﻋﻤﻞ ،ISPﻫﻴﭻ ﻋﻤﻞ دﻳﮕﺮي را ﺗﺤﺖ ﺗﺄﺛﻴﺮ ﻗﺮار ﻧﻤﻲدﻫﺪ.
-٣در ﺣﻴﻦ ﻋﻤﻞ ،ISPاز دراﻳﻮ ﻛﺮدن ﻣﺪارﻫﺎي ﺧﺮوﺟﻲ ﺧﻮدداري ﻛﻨﻴﺪ و ﻳﺎ ﺑﺎﻳﺪ ازﻳﻚ ﻣﻘــﺎوﻣﺖ اﺳـﺘﻔﺎده
ﻧﻤﺎﻳﻴﺪ.
-٤از اﺗﺼﺎل ﺑﺎرﻫﺎي ﺳﻨﮕﻴﻦ ﻛﻪ ﺑﺮ روي ﻋﻤﻞ ISPﺗﺄﺛﻴﺮ ﻣﻲﮔﺬارﻧﺪ ﺧﻮدداري ﻛﻨﻴﺪ.
ﻻزم ﺑﻪ ذﻛﺮ اﺳﺖ ،در ﺻﻮرﺗﻲ ﻛﻪ ﻗﺼﺪ دارﻳﺪ ﺗﺎ ATMega128را ﺑــﻪ روش ISPﺑﺮﻧﺎﻣـﻪرﻳﺰي ﻧﻤـﺎﻳﻴﺪ از آﻧﺠـﺎﻳﻲ ﻛـﻪ
ﺧﻄﻮط ورودي و ﺧﺮوﺟﻲ SPIﺑﺎ ﺧﻄﻮط ارﺳﺎل و درﻳﺎﻓﺖ اوﻟﻴﻦ UARTدر ﺗﺮاﺷﻪ ﻣﺸﺘﺮك ﻫﺴــﺘﻨﺪ .ﺑـﺮاي ﺟﻠـﻮﮔﻴـﺮي از ﺑـﺮوز
ﻣﺸﻜﻞ از ﺳﺨﺖاﻓﺰار ﺑﻴﺸﺘﺮي اﺳﺘﻔﺎده ﻣﻲﺷﻮد و ﭘﻴﻨﻬﺎي آن ﻫﻢ ﺗﻔﺎوت ﻣﻲﻛﻨﺪ ﻛﻪ اﻳﻦ ﻣﻄﻠﺐ ﺑﻪ ﺧﻮاﻧﻨﺪه واﮔﺬار ﻣﻲﺷﻮد.
در ﭘﺎﻳﺎن ﻻزم اﺳﺖ ﺑﻪ اﻳﻦ ﻧﻜﺘﻪ ﻫﻢ ﺗﻮﺟﻪ ﻛﻨﻴﺪ؛ در ﺻﻮرﺗﻲ ﻛﻪ ﺷﻤﺎ ﻓﻴﻮزﻫﺎي AVRرا ﺑﻪ ﻃﻮر ﻏــﻴﺮﺻﺤﻴﺢ ﺑﺮﻧﺎﻣـﻪرﻳﺰي
ﻧﻤﺎﻳﻴﺪ ﻣﻤﻜﻦ اﺳﺖ ﻛﺮﻳﺴﺘﺎل و ﻧﻮﺳﺎﻧﮕﺮ داﺧﻠﻲ از ﻛﺎر ﺑﻴﻔﺘﺪ .ﻳﻜﻲ از ﺑﺪﺗﺮﻳﻦ ﻛﺎرﻫﺎﻳﻲ ﻛﻪ ﺷﻤﺎ ﻣﻲﺗﻮاﻧﻴﺪ اﻧﺠــﺎم دﻫﻴـﺪ ﺑﺮﻧﺎﻣـﻪرﻳﺰي
ﻏﻴﺮﺻﺤﻴﺢ ﻓﻴﻮزﻫﺎ و ﻏﻴﺮﻓﻌﺎل ﻛﺮدن اﻣﻜﺎن JTAG, ISPاﺳﺖ .در اﻳﻦ ﺣﺎﻟﺖ ﻫﻴﭻ راﻫﻲ ﺟﺰ ﺗﻌﻮﻳﺾ ﺗﺮاﺷﻪ AVRوﺟــﻮد ﻧـﺪارد،
اﻟﺒﺘﻪ ﺷﻤﺎ ﻫﻨﻮز ﻫﻢ ﻣﻲﺗﻮاﻧﻴﺪ آن را ﺑﻪ ﺣﺎﻟﺖ اول ﺑﺎزﮔﺮداﻧﻴﺪ وﻟﻲ اﻳﻦ ﻛﺎر ﺗﻨﻬﺎ از ﻃﺮﻳﻖ ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻣﻮازي ﻣﻴﺴــﺮ ﺧﻮاﻫـﺪ ﺑـﻮد ﻛـﻪ
١٧
ﻓﺼﻞ ﺳﻮم
Codevision AVRﻳﻚ ﻛﺎﻣﭙﺎﻳﻠﺮ ،Cﻣﺤﻴﻂ ﺗﻮﺳﻌﻪ ﻳﺎﻓﺘﻪ ﻳﻜﭙﺎرﭼــﻪ) (١IDEو ﺗﻮﻟﻴﺪﻛﻨﻨـﺪة ﺧﻮدﻛـﺎر ﻛﺪﻫـﺎي
ﺑﺮﻧﺎﻣﻪ اﺳﺖ ﻛﻪ ﺑﺮاي ﻛﺎر ﺑﺎ ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮﻫﺎي AVRﺳﺎﺧﺖ ﺷﺮﻛﺖ ATMELﻃﺮاﺣﻲ ﺷﺪه اﺳﺖ.
ﺑﺮﻧﺎﻣﻪ ﻃﻮري ﻃﺮاﺣﻲ ﺷﺪه ﻛﻪ در وﻳﻨﺪوزﻫﺎي Xp,2000,NT, Me, 98, 95ﻗﺎﺑﻞ اﺟﺮا ﺑﺎﺷﺪ.
اﻳﻦ ﺑﺮﻧﺎﻣﻪ ﻳﻚ ﭘﺮوﮔﺮاﻣﺮ ISPرا ﻫﻢ ﺷﺎﻣﻞ ﻣﻲﺷﻮد ﻛﻪ اﻣﻜﺎن اﻧﺘﻘﺎل ﻛﺪﻫﺎي ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﻣﻴﻜﺮوﻛﻨﺘﺮوﻟﺮﻫــﺎ را ﺑﻌـﺪ از اﻧﺠـﺎم
اﻳﻦ ﻧﺮم اﻓﺰار ﻋﻼوه ﺑﺮ ﻛﺘﺎﺑﺨﺎﻧﻪﻫﺎي Cاﺳﺘﺎﻧﺪارد ،داراي ﻛﺘﺎﺑﺨﺎﻧﻪﻫﺎي دﻗﻴﻘﻲ ﺑﺮاي ﻛﺎر ﺑﺎ LCDﻫــﺎي ﻛـﺎرﻛﺘﺮي ،ﺗﻮﻟﻴـﺪ
وﻗﻔﻪ ،ﺗﻨﻈﻴﻢ اﻧﺮژي ﻣﺼﺮﻓﻲ ﺗﺮاﺷﻪ ،ﻗﺎﺑﻠﻴﺖ ، SPIﻗﺎﺑﻠﻴﺖ ،I2Cارﺗﺒﺎط ﻳﻚ ﺳﻴﻤﻪ ،ﻛﺎر ﺑﺎ ﺳﻨﺴﻮرﻫﺎي دﻣــﺎي DS1820 ،LM75
١
Integrated Development Environment
١٨
ﺷﻜﻞ ١ -٣ﻧﺮم اﻓﺰار CodevisionAVR
ﻋﻼوه ﺑﺮ اﻳﻦ ،CodewizardAVR, CodevisionAVRﺗﻮﻟﻴﺪﻛﻨﻨﺪه ﺧﻮدﻛﺎر ﺑﺮﻧﺎﻣــﻪ را ﻫـﻢ ﺷـﺎﻣﻞ ﻣﻲﺷـﻮد .اﻳـﻦ
ﺑﺮﻧﺎﻣﻪ اﻳﻦ اﻣﻜﺎن را ﺑﻪ ﻣﺎ ﻣﻲدﻫﺪ ﺗﺎ ﺑﺮاي ﺗﻨﻈﻴﻢ اﻣﻜﺎﻧﺎت ﻣﺨﺘﻠﻒ ﺗﺮاﺷﻪ از ﻗﺒﻴﻞ ﺗﺎﻳﻤﺮﻫﺎ TWI, SPI, ADC ،و ...ﺑﺪون ﻧﻴــﺎز ﺑـﻪ
ﻧﻮﺷﺘﻦ ﻛﺪ ﺑﺮاي آﻧﻬﺎ ﺑﻪ ﺻﻮرت ﮔﺮاﻓﻴﻜﻲ ﺗﻨﻈﻴﻤﺎت اوﻟﻴﻪ ﻣﻮرد ﻧﻴﺎز را اﻧﺠﺎم دﻫﻴﻢ در اﻳﻦ ﺻــﻮرت Codewizardﻛﺪﻫـﺎي ﻻزم را
ﺑﺮاي ﻣﺎ ﺗﻮﻟﻴﺪ ﻣﻲﻛﻨﺪ و ﺑﻪ اﻳﻦ ﺻﻮرت ﻣﻲﺗﻮاﻧﻴﻢ در ﻛﻤﺘﺮﻳﻦ زﻣﺎن ﻣﻤﻜﻦ ﺑﺮﻧﺎﻣﻪﻫﺎي ﺧﻮد را ﺑﻨﻮﻳﺴﻴﻢ.
در اﻳﻦ ﺑﺨﺶ ﻗﺼﺪ دارﻳﻢ ﺗﺎ اوﻟﻴﻦ ﺑﺮﻧﺎﻣﻪ ﺧﻮد را ﺑﻨﻮﻳﺴﻴﻢ و آن را اﺟﺮا ﻛﻨﻴﻢ ،ﺗﺎ اﻳﻨﺠﺎ ﺷﻤﺎ ﺑﺎﻳﺪ ﻛﺎﺑﻞ ذﻛﺮ ﺷﺪه در ﺑﺨــﺶ
ﻗﺒﻞ را ﺳﺎﺧﺘﻪ و ﺣﺪاﻗﻞ ﻣﺪار ﻻزم را ﻧﻴﺰ آﻣﺎده ﻛﺮده ﺑﺎﺷﻴﺪ).ﺷــﻜﻞ (٣-٢ﻋـﻼوه ﺑـﺮ اﻳـﻦ ﺑـﺎﻳﺪ ﻧـﺮم اﻓـﺰار CodevisionAVRو
AVRstudioرا ﻫﻢ ﻧﺼﺐ ﻛﺮده ﺑﺎﺷﻴﺪ.ﺿﻤﻨﺎ ﻣﻲ ﺗﻮاﻧﻴﺪ ﻧﺴﺨﻪ راﻳﮕﺎن ﻧﺮم اﻓﺰار CodevisionAVRرا از آدرس اﻳﻨــﺘﺮﻧﺘﻲ زﻳـﺮ
درﻳﺎﻓﺖ ﻛﻨﻴﺪ:
http://www.hpinfotech.ro
http://www.atmel.com
در اﻳﻦ ﻗﺴﻤﺖ ﻣﻲﺧﻮاﻫﻴﻢ ﺗﺎ ﻛﺎر را ﺑﺎ ﻧﻮﺷﺘﻦ ﻳﻚ ﺑﺮﻧﺎﻣﺔ ﺳﺎده آﻏﺎز ﻛﻨﻴﻢ و ﻳﻚ LEDرا ﺑﺎ ﻓﺮﻛﺎﻧﺲ 2Hz
١٩
اﻳﺠﺎد ﻳﻚ ﭘﺮوژه ﺟﺪﻳﺪ
اوﻟﻴﻦ ﻛﺎر اﻳﺠﺎد ﭘﺮوژه ﺟﺪﻳﺪي ﺑﺮاي ﺑﺮﻧﺎﻣﺔ ﻣﻮردﻧﻈﺮ اﺳﺖ .ﻣﻲﺗﻮاﻧﻴﺪ اﻳﻦ ﻛـﺎر را ﺑـﺎ اﺳـﺘﻔﺎده از ﻣﻨـﻮي File|Newو ﻳـﺎ
ﻓﺸﺎر دادن دﻛﻤﺔ Create New Fileدر ﻧﻮار اﺑﺰار اﻧﺠﺎم دﻫﻴﺪ.
ﺑﺎ اﻧﺠﺎم اﻳﻦ ﻛﺎر ﭘﻨﺠﺮهاي ﺑﺎز ﻣﻲﺷﻮد)ﺷﻜﻞ ،(٢-٣ﺷﻤﺎ ﺑﺎﻳﺪ File type|Projectرا اﻧﺘﺨﺎب ﻧﻤﻮده و دﻛﻤﻪ OKرا
ﻓﺸﺎر دﻫﻴﺪ.
ﺣﺎﻻ ﭘﻨﺠﺮه دﻳﮕﺮي ﺑﺎز ﻣﻲﺷﻮد)ﺷﻜﻞ (٣-٣و از ﺷﻤﺎ ﺳــﺆال ﻣـﻲﮔﺮدد ﻛـﻪ آﻳـﺎ ﻣﻲﺧﻮاﻫﻴـﺪ ﭘـﺮوژه ﺟﺪﻳـﺪ را ﺑـﻪ ﻛﻤـﻚ
CodewizardAVRاﻧﺠﺎم دﻫﻴﺪ.
در اﻳﻦ ﻗﺴﻤﺖ دﻛﻤﻪ Noرا اﻧﺘﺨﺎب ﻛﻨﻴﺪ .ﺑﺎ اﻳﻦ ﻛﺎر ﭘﻨﺠﺮه Create New Projectﺑﺎز ﺧﻮاﻫﺪ ﺷﺪ)ﺷــﻜﻞ (٤-٣ﻛـﻪ
ﺑﺎﻳﺪ در آن ﻧﺎم ﻓﺎﻳﻞ ﭘﺮوژه و ﻣﺤﻞ آن را ﻣﺸﺨﺺ ﻧﻤﺎﻳﻴﺪ .ﻓﺎﻳﻞ ﭘﺮوژه ﺑﺎ ﭘﺴﻮﻧﺪ ،prjذﺧﻴﺮه ﺧﻮاﻫﺪ ﺷﺪ.
٢٠
ﺷﻜﻞ ٤ -٣ﭘﻨﺠﺮه Create New Project
ﺣﺎﻻ ﭘﻨﺠﺮه ﺟﺪﻳﺪي ﺑﺎز ﻣــﻲ ﺷـﻮد ﻛـﻪ ﻣﺮﺑـﻮط ﺑـﻪ ﺗﻨﻈﻴﻤـﺎت ﻛﺎﻣﭙـﺎﻳﻠﺮ اﺳـﺖ)ﺷـﻜﻞ ،(٥-٣اﺑﺘـﺪا در ﻗﺴـﻤﺖ C
،Compiler|Code Generationﮔﺰﻳﻨــﺔ ،Chipﻧـﻮع ﺗﺮاﺷـﺔ AVRرا ﺑﺮاﺑـﺮ Atmega32Lﻗـﺮار داده ،ﺳـﭙﺲ در ﮔﺰﻳـﻨﻪ
Clockﻣﻘﺪار ﻛﺮﻳﺴﺘﺎل ﻣﺘﺼﻞ ﺑﻪ ﺗﺮاﺷﻪ را ﺑﺮاﺑﺮ 4MHzاﻧﺘﺨﺎب ﻧﻤﺎﻳﻴﺪ و دﻛﻤﻪ OKرا ﻓﺸﺎر دﻫﻴﺪ).ﺷﻜﻞ (٦-٣
٢١
Files ﻗﺴﻤﺖConfigure Project ﭘﻨﺠﺮه٥ -٣ ﺷﻜﻞ
٢٢
ﺷﮑﻞ ٦ -٣ﭘﻨﺠﺮه Configure Projectﻗﺴﻤﺖ C Compiler
ﺣﺎﻻ ﺑﺎﻳﺪ ﻓﺎﻳﻞ اﺻﻠﻲ ﭘﺮوژه ﻛﻪ ﻛﺪﻫﺎي ﺑﺮﻧﺎﻣﻪ در آن ﻗﺮار دارد را اﻳﺠﺎد ﻛﻨﻴﺪ).ﺷﻜﻞ (٧-٣ﺑــﺮاي اﻳـﻦ ﻛـﺎر دوﺑـﺎره ﻣﻨـﻮي
File|Newو ﻳﺎ دﻛﻤﻪ Create New Fileدر ﻧﻮار اﺑﺰار را اﻧﺘﺨﺎب ﻧﻤﻮده و ﮔﺰﻳﻨﻪ File Type|Sourceرا اﻧﺘﺨـﺎب و دﻛـﻤﻪ
٢٣
ﺑﺮاي ﻓﺎﻳﻞ ﺟﺪﻳﺪ اﻳﺠﺎد ﺷﺪه ﭘﻨﺠﺮه ﺟﺪﻳﺪي ﻇﺎﻫﺮ ﻣﻲﮔﺮدد .ﻧﺎم ﻓﺎﻳﻞ ﺟﺪﻳﺪ untitled.cاﺳﺖ .ﺑﺎ اﺳﺘﻔﺎده از ﻣﻨﻮي
ﺣﺎﻻ ﺑﺎﻳﺪ ﻛﺪﻫﺎي ﺑﺮﻧﺎﻣﻪ زﻳﺮ را در آن وارد ﻧﻤﺎﻳﻴﺪ .ﺑﻌﺪ از اﻧﺠﺎم اﻳﻦ ﻛﺎر ﻣﺤﺘﻮﻳﺎت آن را ذﺧﻴﺮه ﻛﻨﻴﺪ.
>#include <mega32.h
>#include <delay.h
/*This is a test program written to flashes
the LED on PORTA.0 with a period of 0.5 second*/
)(main
{
while(1){/*loop forever*/
;PORTA.0=1
;)delay_ms(250
;PORTA.0=0
;)delay_ms(250
}
}
دﺳﺘﻮر > #include <mega32.hﻓﺎﻳﻞ ﺳﺮآﻣﺪ mega32.hرا ﻛــﻪ ﺷـﺎﻣﻞ ﺗﻌﺮﻳـﻒ رﺟﻴﺴـﺘﺮﻫﺎي ATMega32L
اﺳﺖ ،ﺑﻪ ﭘﺮوژه اﺿﺎﻓﻪ ﻣﻲ ﻛﻨﺪ.زﻣﺎﻧﻲ ﻛﻪ ﺑﺨﻮاﻫﻴﻢ در ﺑﺮﻧﺎﻣﻪ ﺗﺎﺧﻴﺮي اﻳﺠﺎد ﻛﻨﻴﻢ .اﺑﺘــﺪا ﺑـﺎﻳﺪ ﻓـﺎﻳﻞ delay.hرا ﺑـﻪ ﻛﻤـﻚ دﺳـﺘﻮر
> #include <delay.hﺑﻪ ﭘﺮوژه اﺿﺎﻓﻪ ﻧﻤﺎﻳﻴﻢ.ﻗﺴﻤﺖ اﺻﻠﻲ ﻫﺮ ﺑﺮﻧﺎﻣﻪ ﺑﺎ )( mainآﻏﺎز ﻣﻲ ﺷﻮد.دﺳﺘﻮر ) while(1ﺣﻠﻘﻪ اي را
ﺗﻌﺮﻳﻒ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﺷﺮط آن ﻫﻤﻮاره درﺳﺖ اﺳﺖ ودﺳﺘﻮرات داﺧــﻞ آن ﻣـﺪام ﺗﻜـﺮار ﻣـﻲ ﺷـﻮد.دﺳـﺘﻮر ) delay_ms(250ﻧـﻴﺰ
در ﺻﻮرﺗﻲ ﻛﻪ ﺳﺨﺖ اﻓﺰار ﻣﻮﺟﻮد در ﻓﺼﻞ ﻗﺒﻞ را آﻣــﺎده ﻛـﺮده اﻳـﺪ ﺗﻨـﻬﺎ ﻛـﺎﻓﻲ اﺳـﺖ اﻟﻤﺎﻧـﻬﺎي زﻳـﺮ را ﺑـﻪ آن اﺿﺎﻓـﻪ
ﻛﻨﻴﺪ).ﺷﻜﻞ (٨-٣
ATMega32L LED
40
)PA0(ADC0
39 330
)PA1(ADC1
38
)PA2(ADC2
٢٤
ﺣﺎﻻ ﺑﺎﻳﺪ اﻳﻦ ﻓﺎﻳﻞ را ﺑﻪ ﭘﺮوژه اﺿﺎﻓﻪ ﻛﻨﻴﺪ .ﺑﺮاي اﻳﻦ ﻛﺎر از ﻣﻨﻮي ،Projectﮔﺰﻳﻨﺔ Configureرا اﻧﺘﺨﺎب ﻛﻨﻴﺪ .در
ﻗﺴﻤﺖ ،Filesدﻛﻤﻪ Addرا ﻓﺸﺎر دﻫﻴﺪ و از ﭘﻨﺠﺮه ﺑﺎز ﺷﺪه ﻓﺎﻳﻞ main.cﻛﻪ ﻛﺪﻫﺎي ﺑﺮﻧﺎﻣﻪ را ﻗﺒ ﹰ
ﻼ در آن وارد ﻛﺮدهاﻳﺪ،
اﻧﺘﺨﺎب ﻧﻤﻮده و دﻛﻤﻪ Openرا ﻓﺸﺎر دﻫﻴﺪ .ﺣﺎﻻ ﻓﺎﻳﻞ main.cﺑﻪ ﭘﺮوژه اﺿﺎﻓﻪ ﺷﺪه اﺳﺖ).ﺷﻜﻞ (٩-٣
٢٥
ﺷﮑﻞ ١١ -٣ﻗﺒﻞ از اﺿﺎﻓﻪ ﻛﺮدن ﻓﺎﻳﻞ ﺑﻪ ﭘﺮوژه
ﺗﻨﻈﻴﻢ ﻛﺎﻣﭙﺎﻳﻠﺮ
ﺗﻨﻈﻴﻢ ﭘﺎراﻣﺘﺮﻫﺎي ﻛﺎﻣﭙﺎﻳﻠﺮ Cﺑــﺮاي ﺑﺮﻧـﺎﻣﻪ ﺟـﺎري ﺗﻮﺳـﻂ ﻣﻨـﻮي ،Projectﮔﺰﻳـﻨﻪ ،Configareﻗﺴـﻤﺖ C
Compilerاﻧﺠـﺎم ﻣﻲﺷـﻮد .اﺑﺘـﺪا در ﻗﺴــﻤﺖ ،Code Generationﮔﺰﻳــﻨﻪ ،Chipﻧــﻮع ﺗــﺮاﺷﻪ AVRرا ﺑﺮاﺑــﺮ
Atmega32Lﻗﺮار داده ،ﺳﭙﺲ در ﮔﺰﻳﻨﺔ Clockﻣﻘﺪار ﻛﺮﻳﺴﺘﺎل ﻣﺘﺼﻞ ﺑﻪ ﺗﺮاﺷﻪ را ﺑﺮاﺑﺮ 4MHzاﻧﺘﺨﺎب ﻛﻨﻴﺪ .ﻻزم ﺑﻪ
ذﻛﺮ اﺳﺖ در ﺻﻮرﺗﻲ ﻛﻪ ﻣﻘﺪار آن درﺳﺖ ﺗﻨﻈﻴﻢ ﻧﺸﻮد ﺗﻮاﺑﻊ ﺗﺄﺧﻴﺮ ﻛﺎر ﺧﻮد را درﺳﺖ اﻧﺠﺎم ﻧﺨﻮاﻫﺪ داد .اﺣﺘﻴﺎﺟﻲ ﺑﻪ ﺗﻐﻴــﻴﺮ
ﺑﻘﻴﻪ ﻣﺪار ﻧﻴﺴﺖ .ﺑﺪ ﻧﻴﺴﺖ ﺑﺪاﻧﻴﺪ در ﺻﻮرﺗﻲ ﻛﻪ ﭘﺮوژه ﺷﻤﺎ از ﺑﻴﺶ از ﻳﻚ ﻓﺎﻳﻞ ﺗﺸﻜﻴﻞ ﺷﺪه ،ﻣﻲﺗﻮاﻧﻴﺪ ﺗﻌﺎرﻳﻒ ﺳﺮاﺳﺮي ١را
١
Global
٢٦
ﺷﻜﻞ ١٢ -٣ﭘﻨﺠﺮه Configure Projectﻗﺴﻤﺖ Globally#define
در ﻗﺴﻤﺖ pathsﻫﻢ ﻣﻲﺗﻮاﻧﻴﺪ ﻣﺴﻴﺮﻫﺎي ﺟﺪﻳﺪي را ﺑﺮاي ﻓﺎﻳﻠﻬﺎي ﺳﺮآﻣﺪ و ﻛﺘﺎﺑﺨﺎﻧﻪاي ﺗﻌﺮﻳﻒ ﻛﻨﻴﺪ).ﺷﻜﻞ (١٣-٣
٢٧
ﺷﻜﻞ ١٣ -٣ﭘﻨﺠﺮه Configure Projectﻗﺴﻤﺖ Paths
در اﻳﻨﺠﺎ ﺗﻨﻈﻴﻢ ﻛﺎﻣﭙﺎﻳﻠﺮ ﻫﻢ ﺑﻪ ﭘﺎﻳﺎن رﺳﻴﺪه اﺳﺖ ،وﻟﻲ ﻗﺒﻞ از اﻳﻦ ﻛــﻪ ﭘﻨﺠـﺮه را ﺑﺒﻨﺪﻳـﺪ ﻗﺴـﻤﺖ After Makeرا
٢٨
ﺷﻜﻞ ١٤ -٣ﭘﻨﺠﺮه Configure Projectﻗﺴﻤﺖ After Makeﻗﺒﻞ از ﻓﻌﺎل ﻛﺮدن ﺑﺮﻧﺎﻣﻪ رﻳﺰي ﺗﺮاﺷﻪ
و در آن ﮔﺰﻳﻨﻪ Program the Chipرا ﻋﻼﻣﺖ ﺑﺰﻧﻴﺪ .اﻳﻦ ﻛﺎر ﺑﺎﻋﺚ ﻣﻲﺷﻮد ﺗﺎ ﭘﺲ از ﻛﺎﻣﭙﺎﻳﻞ و اﺳﻤﺒﻞ ﻛﺮدن ﺑﺮﻧﺎﻣــﻪ ﺑﺘﻮاﻧﻴـﺪ،
ﻣﺴﺘﻘﻴﻤ ﹰﺎ ﻛﺪﻫﺎ را ﺑﻪ ﺗﺮاﺷﻪ ﺑﻔﺮﺳﺘﻴﺪ و آن را ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻛﻨﻴﺪ).ﺷﻜﻞ (١٥-٣ﺑﻪ ﻛﻤﻚ ﮔﺰﻳﻨﻪﻫﺎي دﻳﮕﺮ ﻫﻢ ﻣﻲﺗﻮاﻧﻴــﺪ ﺣﺎﻓﻈـﻪﻫﺎ را
ﻗﻔﻞ ﻧﻤﻮده و ﻓﻴﻮزﻫﺎي ﻣﻮردﻧﻈﺮﺗﺎن در روي ﺗﺮاﺷﻪ را ﻫﻢ ﺗﻨﻈﻴﻢ ﻛﻨﻴﺪ ،در ﭘﺎﻳﺎن ﺑﺎ ﻓﺸﺎر دﻛﻤﺔ OKﭘﻨﺠﺮه را ﺑﺒﻨﺪﻳﺪ.
٢٩
ﺷﻜﻞ ١٥ -٣ﭘﻨﺠﺮه Configure Projectﻗﺴﻤﺖ After Makeﺑﻌﺪ از ﻓﻌﺎل ﻛﺮدن ﺑﺮﻧﺎﻣﻪ رﻳﺰي ﺗﺮاﺷﻪ
از آﻧﺠﺎﻳﻲ ﻛﻪ اﻳﻦ اوﻟﻴﻦ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎ Codevisionﻣﻲﺑﺎﺷﺪ ﺑﺎﻳﺪ ﻗﺴﻤﺘﻬﺎي ﻣﺨﺘﻠﻒ آن را ﻧﻴﺰ ﺑﻪ درﺳﺘﻲ ﺗﻨﻈﻴﻢ ﻛﻨﻴﺪ.
ﺗﻨﻈﻴﻤﺎت ﻻزم ﺷﺎﻣﻞ ﺗﻌﻴﻴﻦ Debuggerو آدرس آن ،ﺑﺮاي ﺷﺒﻴﻪ ﺳﺎزي ﺑﺮﻧﺎﻣﻪ و ﺗﻨﻈﻴﻢ ﻧﻮع ﭘﺮوﮔﺮاﻣﺮ و آدرس ﭘﻮرت ﻣﺮﺑــﻮط ﺑـﻪ
آن ﻣﻲﺑﺎﺷﺪ.
ﺑﺮاي ﺗﻨﻈﻴﻢ دﻳﺒﺎﮔﺮ از ﻣﻨﻮي ،Settingsﮔﺰﻳﻨﻪ Debuggerرا اﻧﺘﺨﺎب ﻛﻨﻴﺪ .در ﭘﻨﺠﺮة ﺑﺎز ﺷﺪه)ﺷﻜﻞ (١٦-٣در
ﻗﺴﻤﺖ Atmel AVR Studio4 , Debuggerرا اﻧﺘﺨﺎب ﻛﻨﻴﺪ و در ﻗﺴﻤﺖ Directory and Filenameآدرس ﻧﺮماﻓــﺰار
٣٠
ﺷﻜﻞ ١٦ -٣ﭘﻨﺠﺮه Debugger Settings
ﺑﺮاي ﺗﻨﻈﻴﻢ ﭘﺮوﮔﺮاﻣﺮ ،از ﻣﻨــﻮي ،Settingsﮔﺰﻳـﻨﻪ Programmerرا اﻧﺘﺨـﺎب ﻛﻨﻴـﺪ .در اﻳـﻦ ﭘﻨﺠـﺮه)ﺷـﻜﻞ (١٧-٣
ﻣﻲﺗﻮاﻧﻴﺪ ﻧﻮع ﭘﺮوﮔﺮاﻣﺮ ISPو آدرس ﭘﻮرﺗﻲ را ﻛﻪ ﭘﺮوﮔﺮاﻣﺮ از ﻃﺮﻳﻖ آن ﺑﻪ ﻛﺎﻣﭙﻴﻮﺗﺮ ﻣﺘﺼــﻞ ﺷـﺪه اﺳـﺖ را ﻣﺸـﺨﺺ ﻧﻤـﺎﻳﻴﺪ .در
ﻗﺴﻤﺖ Kanda Systems STK200+/300, AVR Chip Programmer Typeو در ﻗﺴـﻤﺖ ، Printer Port
١ـ ﻛﺎﻣﭙﺎﻳﻞ ﻛﺮدن ﻓﺎﻳﻞ اﺻﻠﻲ ﭘﺮوژه ﺑﺎ ﭘﺴﻮﻧﺪ .cو ﺗﻮﻟﻴﺪ ﻓﺎﻳﻞ اﺻﻠﻲ ﺑﻪ زﺑﺎن اﺳﻤﺒﻠﻲ.
٢ـ اﺳﻤﺒﻞ ﻛﺮدن ﻓﺎﻳﻞ اﺳﻤﺒﻠﻲ اﻳﺠﺎد ﺷﺪه ﺑﻪ ﻛﻤﻚ اﺳﻤﺒﻠﺮ . AVRASM32
٣١
ﺑﺮاي اﻧﺠﺎم ﻣﻮرد ١ﻣﻲﺗﻮاﻧﻴﺪ از ﻣﻨﻮي Projectﮔﺰﻳﻨﻪ Compile Fileرا اﻧﺘﺨﺎب ﻧﻤﻮده ،ﻛﻠﻴﺪ F9را ﻓﺸــﺎر داده و ﻳـﺎ
دﻛﻤﺔ Compileدر ﻧﻮار اﺑﺰار را ﻓﺸﺎر دﻫﻴﺪ .ﺑﻌﺪ ازﻛﺎﻣﭙﺎﻳﻞ،ﻓﺎﻳﻠﻲ ﺑﺎ ﭘﺴﻮﻧﺪ .asmﺗﻮﻟﻴﺪ ﻣﻲ ﺷــﻮد و ﭘﻨﺠـﺮه Informationﻛـﻪ
در ﺻﻮرﺗﻲ ﻛﻪ ﺑﺨﻮاﻫﻴﻢ ﻣﻮارد ١و ٢را اﻧﺠﺎم دﻫﻴﻢ ﺑﺎﻳﺪ از ﻣﻨﻮي ، Projectﮔﺰﻳﻨﻪ Make Fileرا اﻧﺘﺨﺎب ﻧﻤﻮده،
ﻛﻠﻴﺪ F9را ﻓﺸﺎر داده و ﻳﺎ دﻛﻤﺔ Makeدر ﻧﻮار اﺑﺰار را ﻓﺸﺎر دﻫﻴﺪ .ﭘﺲ از اﺗﻤﺎم اﻳﻦ ﻣﺮﺣﻠﻪ ﭘﻨﺠﺮه Informationﺑﺎز ﻣﻲﺷﻮد
ﻛﻪ اﻳﻦ ﺑﺎر از ﺳﻪ ﻗﺴﻤﺖ ﺗﺸﻜﻴﻞ ﺷﺪه اﺳﺖ .در ﻗﺴﻤﺖ ) Compileﺷﻜﻞ ،(١٩-٣ﺗﻨﻈﻴﻤﺎت ﻣﺮﺑﻮط ﺑﻪ ﻛﺎﻣﭙﺎﻳﻠﺮ و ﻣﻴﺰان اﺳﺘﻔﺎده
ﺑﺮﻧﺎﻣﻪ از ﺣﺎﻓﻈﻪﻫﺎي ﺗﺮاﺷﻪ ﻣﺸﺨﺺ ﺷﺪه اﺳﺖ .در ﻗﺴﻤﺖ ) Assemblerﺷﻜﻞ (٢٠-٣ﻓﺎﻳﻠﻬﺎي اﻳﺠﺎد ﺷﺪه و ﻣﻴﺰان ﺣﺎﻓﻈﻪ ﻛﺪﻫﺎ
ﻧﺸﺎن داده ﺷﺪه و ﻗﺴﻤﺖ ) Programmerﺷﻜﻞ (٢١-٣ﺗﻨﻬﺎ از ﻳﻚ ﺷﻤﺎرﻧﺪه ﺗﺸﻜﻴﻞ ﺷﺪه ﻛﻪ ﺗﻌﺪاد دﻓﻌﺎت ﺑﺮﻧﺎﻣﻪرﻳﺰي ﺗﺮاﺷﻪ
٣٢
Compile ﻗﺴﻤﺖInformation ﭘﻨﺠﺮه١٩ -٣ ﺷﮑﻞ
٣٣
Assembler ﻗﺴﻤﺖInformation ﭘﻨﺠﺮه٢٠ -٣ ﺷﻜﻞ
٣٤
ﺷﻜﻞ ٢١ -٣ﭘﻨﺠﺮه Informationﻗﺴﻤﺖ Programmer
در ﺻﻮرﺗﻲ ﻛﻪ ﭘﺮوژه ﺑﺪون اﻳﺠﺎد ﺧﻄﺎ ﻛﺎﻣﭙﺎﻳﻞ و اﺳﻤﺒﻞ ﺷﺪه ﺑﺎﺷﺪ ،ﻛﺎﺑﻞ ISPو ﻣﻨﺒــﻊ ﺗﻐـﺬﻳﻪ آن ﻫـﻢ وﺻـﻞ ﺑﺎﺷـﻨﺪ،
ﻣﻲﺗﻮاﻧﻴﺪ دﻛﻤﻪ Programرا ﻓﺸﺎر دﻫﻴﺪ .ﺑﺎ اﻧﺠﺎم اﻳﻦ ﻛﺎر ﺑﺮﻧﺎﻣﻪرﻳﺰي ﺗﺮاﺷﻪ ﺑﻪ ﺳﺮﻋﺖ آﻏﺎزﻣﻲﮔﺮدد .اﺑﺘــﺪا ﺣﺎﻓﻈـﻪ ﻫـﺎي ﺗﺮاﺷـﻪ
٣٥
ﺷﻜﻞ ٢٣ -٣ﭘﻨﺠﺮه Verifyﺑﺮاي اﻃﻤﻴﻨﺎن از ﺻﺤﺖ ﻛﺪﻫﺎي ﻧﻮﺷﺘﻪ ﺷﺪه
در ﺻﻮرﺗﻲ ﻛﻪ ﺑﺨﻮاﻫﻴﻢ ﺗﺎ ﻗﺒﻞ از ﺑﺮﻧﺎﻣﻪ رﻳﺰي ﺗﺮاﺷﻪ ﺑﻪ ﻛﻤﻚ ﺷﺒﻴﻪ ﺳﺎزي ﺑﺮﻧﺎﻣﻪ ازﺻﺤﺖ ﻋﻤﻠﻜﺮد آن ﻣﻄﻤﺌﻦ ﺷــﻮﻳﻢ از
ﻧﺮم اﻓﺰار AVRStudioاﺳﺘﻔﺎده ﻣﻲ ﻛﻨﻴﻢ.در ﺣﻘﻴﻘﺖ ﭘﺲ از اﻧﺠﺎم اﻋﻤﺎل ﻛﺎﻣﭙﺎﻳﻞ واﺳــﻤﺒﻞ ﻛـﺮدن ﺑﺮﻧﺎﻣـﻪ Codevisionﻳـﻚ
ﻓﺎﻳﻞ objectﺑﺎ ﭘﺴﻮﻧﺪ COFFﺗﻮﻟﻴﺪ ﻣﻲ ﻛﻨﺪ.ﻧﺴﺨﻪ AVRStudio 4.06ﻳﺎ ﻧﺴﺨﻪ ﻫــﺎي ﺑﻌـﺪ از آن ﺑـﺎ اﺳـﺘﻔﺎده از اﻳـﻦ ﻓـﺎﻳﻞ
ﺑﺮاي اﺟﺮاي اﻳﻦ ﻧﺮم اﻓﺰار در ﻣﻨﻮي Debbugger , Toolsرا اﻧﺘﺨــﺎب ﻛﻨﻴـﺪ و ﻳـﺎ در ﻧـﻮار اﺑـﺰار دﻛﻤـﻪ Run the
ﺑﺎ اﺟﺮاي ﻧﺮم اﻓﺰار , AVRStudioﭘﻨﺠﺮه Welcome to AVR Studio 4ﻣﻄﺎﺑﻖ ﺷﻜﻞ) (٢٥-٣زﻳﺮ ﺑﺎز ﻣﻲ ﺷﻮد.
٣٦
ﺷﻜﻞ ٢٥ -٣ﭘﻨﺠﺮه Welcom toAVR Studio 4ﺑﺮاي ﺑﺎز ﻛﺮدن ﻓﺎﻳﻞ object
در اﻳﻦ ﭘﻨﺠﺮه ﺑﺮ روي دﻛﻤﻪ Openﻛﻠﻴﻚ ﻧﻤﺎﻳﻴﺪ.ﺑﺎ اﻧﺠﺎم اﻳﻦ ﻛﺎر ﭘﻨﺠﺮه دﻳﮕﺮي ﺑﺎز ﻣﻲ ﺷﻮد).ﺷﻜﻞ (٢٦-٣
ﺷﻤﺎ ﺑﺎﻳﺪ در اﻳﻦ ﻗﺴﻤﺖ ﻓﺎﻳﻞ ﺑﺎ ﭘﺴﻮﻧﺪ COFFﻛﻪ ﺑﻪ آن اﺷﺎره ﺷﺪ را ﺑﺎز ﻧﻤﺎﻳﻴﺪ.ﺑﻨﺎﺑﺮاﻳﻦ ﻛﺎﻓﻲ اﺳﺖ ﺗﺎ روي اوﻟﻴﻦ ﻓـﺎﻳﻞ
ﻛﻠﻴﻚ ﻛﻨﻴﺪ.
ﭘﺲ از اﻧﺘﺨﺎب ﻓﺎﻳﻞ COFFﺣﺎﻻ وﻗﺖ آن اﺳﺖ ﻛﻪ روش ﺷﺒﻴﻪ ﺳﺎزي و ﻧﻮع ﺗﺮاﺷﻪ را اﻧﺘﺨﺎب ﻛﻨﻴﻢ.
٣٧
ﺷﻜﻞ ٢٧ -٣ﭘﻨﺠﺮه Welcom to AVR Studio 4ﺑﺮاي اﻧﺘﺨﺎب روش ﺷﺒﻴﻪ ﺳﺎزي و ﻧﻮع ﺗﺮاﺷﻪ
ﺷﮑﻞ ٢٨ -٣ﭘﻨﺠﺮه Welcom to AVR Studio 4ﺑﻌﺪ از اﻧﺘﺨﺎب روش ﺷﺒﻴﻪ ﺳﺎزي و ﻧﻮع ﺗﺮاﺷﻪ
٣٨
ددر اﻳﻦ ﻣﺮﺣﻠﻪ , AVRStudioﻓﺎﻳﻞ COFFرا ﺑﺎز ﻣﻲ ﻛﻨﺪ و ﺑﺮاي اﻧﺠﺎم ﻋﻤﻞ ﺷﺒﻴﻪ ﺳﺎزي آﻣﺎده ﻣﻲ ﺷﻮد).ﺷﻜﻞ
(٢٩-٣
ﺣﺎﻻ ﻣﻲ ﺗﻮاﻧﻴﺪ ﺑﺎ ﻗﺮار دادن ﻧﻘﺎط ﺷﻜﺴﺖ ) (Break Pointsدر ﻗﺴﻤﺘﻬﺎي ﻣﻮرد ﻧﻈﺮ ﺑﺮﻧﺎﻣــﻪ و ﻣﺸـﺎﻫﺪه رﺟﻴﺴـﺘﺮﻫﺎي
ﻣﺨﺘﻠﻒ در ﭘﻨﺠﺮه Workspaceو ﺗﻐﻴﻴﺮ آﻧﻬﺎ از ﺻﺤﺖ ﺑﺮﻧﺎﻣﻪ ﺧﻮد ﻣﻄﻤﺌﻦ ﺷﻮﻳﺪ ﻛﻪ ﺑﻪ دﻟﻴﻞ ﺳﺎدﮔﻲ اﻳﻦ ﻛــﺎر را ﺑـﻪ ﺷـﻤﺎ واﮔﺰار
ﻣﻲ ﻛﻨﻴﻢ.
٣٩
ﻓﺼﻞ ﭼﻬﺎرم
آﺷﻨﺎﻳﻲ ﺑﺎ CodewizardAVR
ﺑﻪ دﻟﻴﻞ ﺗﻨﻮع اﻣﻜﺎﻧﺎت و وﺳﺎﻳﻞ ﺟﺎﻧﺒﻲ ،AVRﺗﻨﻈﻴﻤﺎت ﻣﺮﺑﻮط ﺑﻪ آﻧﻬﺎ ﻣﻤﻜﻦ اﺳﺖ ﻛﺎر ﺑﺴﻴﺎر ﻣﺸﻜﻠﻲ ﺑــﻪ ﻧﻈـﺮ ﺑﺮﺳـﺪ.
ﻧﺮم اﻓﺰار Codewizardاﻳﻦ اﻣﻜﺎن را ﺑﻪ ﻣﺎ ﻣﻲ دﻫﺪ ﺗﺎ در اﺑﺘﺪاي ﺑﺮﻧﺎﻣﻪ ﺗﻨﻈﻴﻤﺎت اوﻟﻴﻪ ﻗﺴﻤﺘﻬﺎي ﻣﺨﺘﻠﻒ را ﺑﻪ ﺻﻮرت ﮔﺮاﻓﻴﻜــﻲ
اﻧﺠﺎم دﻫﻴﻢ .ﭘﺲ از آن ،اﻳﻦ ﻧﺮم اﻓﺰار ﺑﻪ ﺻﻮرت ﺧﻮد ﻛﺎر ﻛﺪﻫﺎي ﻣﺮﺑﻮط را ﺑﺮاي ﻣﺎ اﻳﺠﺎد ﻣﻲ ﻛﻨﺪ .ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ ﻋﻼوه ﺑــﺮ ﺻﺮﻓـﻪ
ﺑﺮاي اﻳﻦ ﻛﻪ در ﻋﻤﻞ ﺑﺎ اﻳﻦ ﻧﺮم اﻓﺰار ﺑﻴﺸﺘﺮ آﺷﻨﺎ ﺷﻮﻳﺪ .ﻛﺎر را ﺑﺎ ﻳﻚ ﻣﺜﺎل اداﻣﻪ ﻣــﻲ دﻫﻴـﻢ .ﻣـﻲ ﺧﻮاﻫﻴـﻢ ﺑﺮﻧﺎﻣـﻪ اي
ﺑﻨﻮﻳﺴﻴﻢ ﻛﻪ ﻣﻮﻗﻌﻴﺖ ﻛﻠﻴﺪﻫﺎ ،در ﭘﻮرت Aرا ﺧﻮاﻧﺪه و LEDﻫﺎي ﻣﺘﻨﺎﻇﺮ در ﭘﻮرت Bرا ﺗﻨﻈﻴﻢ ﻧﻤﺎﻳﺪ).ﺷﻜﻞ (١-٤
+5v
10K
ATMega32L
220
1 40 1 16
)PB0(XCK-T0 )PA0(ADC0
2 39 2 15
)PB1(T1 )PA1(ADC1
3 37 3 14
)PB2(INT2-AIN0 )PA3(ADC3
4 38 4 13
)PB3(OC0-AIN1 )PA2(ADC2
5 36 5 12
)PB4(SS )PA4(ADC4
6 35 6 11
)PB5(MOSI )PA5(ADC5
7 34 7 10
)PB6(MISO )PA6(ADC6
8 33 8 9
)PB7(SCK )PA7(ADC7
SW DIP-8
ﺷﻜﻞ ١ -٤ﭼﮕﻮﻧﮕﻲ اﺗﺼﺎل ﻫﺸﺖ ﻛﻠﻴﺪ ﺑﻪ ﭘﻮرت Aو ﻫﺸﺖ LEDﺑﻪ ﭘﻮرت B
٤٠
ﺑﺮاي اﻳﺠﺎد ﻳﻚ ﭘﺮوژه ﺟﺪﻳﺪ ﻫﻤﺎﻧﻨﺪ ﻗﺒﻞ از ﻣﻨﻮي Fileﻗﺴﻤﺖ Newرا ﻛﻠﻴﻚ ﻛﺮده و در ﭘﻨﺠﺮه Create،Project
از آﻧﺠﺎﻳﻲ ﻛﻪ ﻗﺼﺪ دارﻳﻢ ﺗﺎ ﭘﺮوژه را ﺑﻪ ﻛﻤﻚ CodewizardAVRاﻧﺠﺎم دﻫﻴﻢ ،در ﭘﻨﺠــﺮه Cofirmدﻛﻤـﻪ Yesرا
ﺷﮑﻞ ٣ -٤
ﻗﺒﻞ از ﻫﺮ ﭼﻴﺰ در ﻗﺴﻤﺖ ، Chipﻧﻮع ﺗﺮاﺷﻪ ) (Atmega32Lو ﻓﺮﻛﺎﻧﺲ ﻛﺮﻳﺴــﺘﺎل ﻣـﻮرد اﺳـﺘﻔﺎده ) (4 MHzرا
٤١
ﺷﻜﻞ ٤ -٤ﭘﻨﺠﺮه CodewizardAVRﻗﺴﻤﺖ Chip
ﺣﺎﻻ ﻣﻲ ﺗﻮاﻧﻴﻢ ﺑﻪ ﻛﻤﻚ ﻗﺴﻤﺖ ،Portsوﺿﻌﻴﺖ اوﻟﻴﻪ ﺗﻤﺎﻣﻲ ﭘﻮرﺗﻬﺎ ﺑﻪ ﺻﻮرت ورودي _ ﺧﺮوﺟﻲ و ﻣﻘﺪار اوﻟﻴــﻪ آﻧـﻬﺎ را
ﺗﻨﻈﻴﻢ ﻧﻤﺎﻳﻴﻢ.
اﺑﺘﺪا ﺑﺎﻳﺪ ﭘﻮرت Aرا ﺑﻪ ﺻﻮرت ورودي در آورﻳﻢ .ﻫﻤﺎن ﻃﻮر ﻛﻪ در ﻗﺴﻤﺖ Port Aﻣﻲ ﺑﻴﻨﻴﺪ ﺗﻤﺎم ﺑﻴﺘﻬﺎ ورودي اﻧــﺪ .
در ﺟﻠﻮي ﻫﺮ ﻳﻚ از ﺑﻴﺘﻬﺎ ﺣﺮف Tﻧﻮﺷﺘﻪ ﺷﺪه اﺳﺖ).ﺷﻜﻞ (٥-٤ﺑﺎﻳﺪ ﺑﺮ روي آﻧﻬﺎ ﻛﻠﻴﻚ ﻛﻨﻴﺪ ،ﺗﺎ ﺑﻪ ﺣﺮف (Pull up) Pﺗﺒﺪﻳﻞ
ﺷﻮﻧﺪ).ﺷﻜﻞ (٦-٤
٤٢
ﺷﻜﻞ ٥-٤ﭘﻨﺠﺮه ،Codewizardﭘﻮرت Aدر ﺣﺎﻟﺖ ﭘﻴﺶ ﻓﺮض
٤٣
ﺷﻜﻞ ٦ -٤ﭘﻨﺠﺮه ،Codewizardﭘﻮرت Aﺑﻌﺪ از ﺗﻨﻈﻴﻢ
ﺣﺎﻻ ﺑﺎﻳﺪ ﭘﻮرت Bرا ﺑﻪ ﺻﻮرت ﺧﺮوﺟﻲ درآورﻳﻢ .ﺑﺎ اﻧﺘﺨﺎب ﻗﺴﻤﺖ Port Bو ﻛﻠﻴﻚ ﺑﺮ روي ﺣﺮف ،Inدر ﻣﻘــﺎﺑﻞ ﻫـﺮ
ﻳﻚ از ﺑﻴﺘﻬﺎ اﻳﻦ ﻋﺒﺎرت ﺑﻪ Outﺗﺒﺪﻳﻞ ﻣﻲ ﺷﻮد .ﺿﻤﻨﺎ ﻣﻲ ﺗﻮاﻧﻴﺪ ﻣﻘﺪار اوﻟﻴﻪ ﭘﻮرت را ﺑﻪ ﺻﻮرت 0و 1ﺗﻨﻈﻴﻢ ﻛﻨﻴﺪ).ﺷﻜﻞ (٧-٤
٤٤
ﺷﮑﻞ ٧ -٤ﭘﻨﺠﺮه ،Codewizardﺗﻨﻈﻴﻤﺎت ﭘﻮرت B
در اﻳﻨﺠﺎ ﺗﻨﻈﻴﻤﺎت اوﻟﻴﻪ ﺑﻪ ﭘﺎﻳﺎن رﺳﻴﺪه اﺳﺖ و ﺑﺎﻳﺪ ﻛﺪﻫﺎي ﻣﺮﺑﻮﻃﻪ ﺗﻮﻟﻴﺪ ﺷﻮﻧﺪ .ﺑﺮاي اﻳﻦ ﻛﺎر از ﻣﻨــﻮي Fileﻗﺴـﻤﺖ
ﺑﺎ اﻧﺠﺎم اﻳﻦ ﻋﻤﻞ ﭘﻨﺠﺮه اي ﺑﺎز ﻣﻲ ﺷﻮد و از ﺷﻤﺎ ﻣﻲ ﺧﻮاﻫﺪ ﺗﺎ ﻓﺎﻳﻞ اﺻﻠﻲ ﭘﺮوژه ﺧﻮد را ﻧﺎم ﮔﺬاري ﻛﺮده و آن را ذﺧﻴﺮه
٤٥
ﺷﻜﻞ ٩ -٤ذﺧﻴﺮه ﻛﺮدن ﻓﺎﻳﻞ اﺻﻠﻲ ﭘﺮوژه ﺑﻪ زﺑﺎن C
ﺣﺎﻻ ﭘﻨﺠﺮه دﻳﮕﺮي ﺑﺎز ﻣﻲ ﺷﻮد ﻛﻪ ﻓﺎﻳﻞ ﭘﺮوژه را ذﺧﻴﺮه ﺧﻮاﻫﺪ ﻛﺮد ﻧﺎم آن را ﻫﻢ ioاﻧﺘــﺨﺎب ﻛﻨﻴـﺪ و دﻛﻤـﻪ Saveرا
ﭘﻨﺠﺮه ﺑﻌﺪي ﻓﺎﻳﻞ ﭘﺮوژه ﻣﺮﺑﻮط ﺑﻪ CodewizardAVRرا ذﺧﻴﺮه ﻣﻲ ﻛﻨﺪ .ﻧﺎم آن را ﻧﻴﺰ ioﻗﺮار دﻫﻴﺪ و آن را ذﺧﻴﺮه
ﻛﻨﻴﺪ).ﺷﻜﻞ (١١-٤
٤٦
ﺷﻜﻞ ١١ -٤ذﺧﻴﺮه ﻛﺮدن ﻓﺎﻳﻞ ﭘﺮوژه ﻣﺮﺑﻮط ﺑﻪ CodewizardAVR
ﺑﺎ اﻧﺠﺎم اﻳﻦ ﻛﺎر CodewizardAVRﻛﺪﻫﺎي ﺑﺮﻧﺎﻣﻪ را ﺗﻮﻟﻴﺪ ﻛﺮده و آﻧﻬﺎ را در ﻓﺎﻳﻞ اﺻﻠﻲ ﭘﺮوژه ﻗﺮار ﻣﻲ دﻫــﺪ و آن
ﻫﻤﺎن ﻃﻮر ﻛﻪ ﻣﻲ ﺑﻴﻨﻴﺪ ﻋﻼوه ﺑﺮ ﻛﺪﻫﺎ ،در ﻫﺮ ﻗﺴﻤﺖ ﺗﻮﺿﻴﺤﺎﺗﻲ ﻫﻢ اﺿﺎﻓﻪ ﺷﺪه اﻧﺪ ﻛﻪ ﺑﺎﻋﺚ ﺳﺎده ﺗﺮ ﺷﺪن ﻓﻬﻢ ﺑﺮﻧﺎﻣﻪ
ﻣﻲ ﺷﻮﻧﺪ .ﺣﺎﻻ ﻛﺎﻓﻲ اﺳﺖ ﺗﺎ ﻛﺪﻫﺎي ﺧﻮد را ﺑﻌﺪ از ﻗﺴﻤﺖ //Place your code hereاﺿﺎﻓﻪ ﻛﻨﻴﺪ .از آﻧﺠﺎﻳﻲ ﻛﻪ اﻳﻦ ﺑﺮﻧﺎﻣــﻪ
ﺳﺎده اﺳﺖ ﻛﺎﻓﻲ اﺳﺖ ﺗﺎ در اﻳﻦ ﻗﺴﻤﺖ دﺳﺘﻮر زﻳﺮ را اﺿﺎﻓﻪ ﻧﻤﺎﻳﻴﺪ .
;PORTB = PINA
ﺣﺎﻻ ﻓﺎﻳﻞ را ذﺧﻴﺮه و ﻛﺎﻣﭙﺎﻳﻞ ﻧﻤﻮده و ﺗﺮاﺷﻪ را ﭘﺮوﮔﺮام ﻛﻨﻴﺪ و ﻧﺘﻴﺠﻪ را ﺑﺒﻴﻨﻴﺪ.
٤٧
PWM
ﻣﻲ ﺧﻮاﻫﻴﻢ ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﻳﻤﺮ ﺻﻔﺮ در ﻣﺪ Fast mode PWMﻳﻚ ﻣﻮج PWMﺗﻮﻟﻴــﺪ ﻛﻨﻴـﻢ .ﭘـﻬﻨﺎي اﻳـﻦ ﻣـﻮج
٢٥٥اﺳﺖ و ﻣﺎ ﻣﻲ ﺧﻮاﻫﻴﻢ ﺗﺎ ﻃﻮل ﻗﺴﻤﺖ ﻣﻮﺛﺮ ﺑﻪ ﺻﻮرت ﻣﺘﻨﺎوب از ٠ﺗﺎ ١٠٠و از ١٠٠ﺗﺎ ٠ﺑﺎ ﺗﺎﺧﻴﺮ ٢٠ﻣﻴﻠﻲ ﺛﺎﻧﻴﻪ ﺑﻴﻦ ﻫﺮ دو
ﻋﺪد ﻣﺘﻮاﻟﻲ ﺗﻐﻴﻴﺮ ﻛﻨﺪ .در اﻳﻦ ﺻﻮرت اﮔﺮ ﻣﻮج PWMرا ﺑﻪ ﻳﻚ LEDﺑﺪﻫﻴﻢ ﻧﻮر آن ﺑﻪ ﺻﻮرت ﺗﺪرﻳﺠﻲ ﻛﻢ و زﻳﺎد ﻣــﻲ ﺷـﻮد و
ﺑﺮاي ﻧﻮﺷﺘﻦ اﻳﻦ ﺑﺮﻧﺎﻣﻪ ﻫﻤﺎﻧﻨﺪ ﻣﺜﺎل ﻗﺒﻞ ﻳﻚ ﭘﺮوژه اﻳﺠﺎد ﻛﺮده و ﻧﺮم اﻓﺰار CodewizardAVRرا اﺟﺮا ﻛﻨﻴﺪ ﭘــﺲ از ﺗﻨﻈﻴـﻢ
ﻧﻮع ﺗﺮاﺷﻪ و ﻓﺮﻛﺎﻧﺲ ﻛﺮﻳﺴﺘﺎل ﻣﻮرد اﺳﺘﻔﺎده )ﻫﻤﺎﻧﻨﺪ ﻗﺒﻞ( ،در ﻗﺴﻤﺖ , Portsﺑﻴﺖ ﭼﻬﺎرم از ﭘﻮرت Bرا ﺑﻪ ﺻﻮرت ﺧﺮوﺟــﻲ در
آورﻳﺪ).ﺷﻜﻞ (١٢-٤
٤٨
اﻳﻦ ﺑﻴﺖ ﻫﻤﺎن ١OC0اﺳﺖ ﻛﻪ ﺑﺮاي ﺗﻮﻟﻴﺪ PWMﺗﻮﺳﻂ ﺗﺎﻳﻤﺮ ﺻﻔﺮ اﺳﺘﻔﺎده ﻣﻲ ﺷﻮد .ﺳﭙﺲ در ﻗﺴﻤﺖ ،Timers
ﺑﺨﺶ ،Timer 0ﻗﺴﻤﺖ System clock , clock sourceرا اﻧﺘﺨﺎب ﻛﻨﻴــﺪ و ﺑﻘﻴـﻪ ﻗﺴـﻤﺘﻬﺎ را ﻫـﻢ ﻣﻄـﺎﺑﻖ ﺷـﻜﻞ)(١٣-٤
در اﻳﻦ ﺗﻨﻈﻴﻤﺎت CodewizardAVRﺑﻪ ﭘﺎﻳﺎن ﻣﻲ رﺳﺪ و ﺑﺎﻳﺪ آن را ﺑﻪ ﺻﻮرﺗﻲ ﻛﻪ در ﻣﺜﺎل ﻗﺒﻞ ﮔﻔﺘﻪ ﺷــﺪ ﺑـﻪ ﻛـﺪ
در اﻳﻦ ﻗﺴﻤﺖ ﺑﺎﻳﺪ اﺑﺘﺪا ﺑﻌﺪ از دﺳﺘﻮر > ، # include <mega32.hدﺳﺘﻮر > #include <delay.hرا اﺿﺎﻓﻪ ﻛﻨﻴﺪ
ﺳﭙﺲ ﺑﻌﺪ از ﺧﻂ ﺗﻮﺿﻴﺢ //place your code hearدﺳﺘﻮرات زﻳﺮ را وارد ﻧﻤﺎﻳﻴﺪ.
١
Output Compare 0
٤٩
;)delay_ms(20
}
)for(i=100;i>1;i--
{
;OCR0=i
;)delay_ms(20
}
ﺣﺎﻻ ﺑﺮﻧﺎﻣﻪ را ﻛﺎﻣﭙﺎﻳﻞ ﻧﻤﻮده و ﺗﺮاﺷﻪ را ﭘﺮوﮔﺮام ﻛﻨﻴﺪ .ﻣﻮج PWMدر ﺧﺮوﺟﻲ OC0را ﻣــﻲ ﺗﻮاﻧﻴـﺪ ﺑـﻪ ﻛﻤـﻚ ﻳـﻚ
ADC
در اﻳﻦ ﻗﺴﻤﺖ ﻗﺼﺪ دارﻳﻢ ،ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﻳﺴﻴﻢ ﺗﺎ ورودي آﻧﺎﻟﻮگ در ﭘﺎﻳــﻪ ) PORTA (ADC0را ﺧﻮاﻧـﺪه و آن را ﺑـﻪ
ﺻﻮرت ١٦ﺑﻴﺘﻲ در ﭘﻮرت Bو دو ﺑﻴﺖ ﻛﻢ ارزش ﭘﻮرت Dﺑﻪ ﻛﻤﻚ LEDﻧﺸﺎن دﻫﺪ .
ATMega32L
220 Vcc
1 40
)PB0(XCK-T0 )PA0(ADC0
2
)PB1(T1
3
)PB2(INT2-AIN0
20k
4
)PB3(OC0-AIN1
5
)PB4(SS 32
6 AREF
)PB5(MOSI 31 0.1u
7 GND
)PB6(MISO
8
)PB7(SCK
14
)PD0(RXD
15
)PD1(TXD
ﻣﻴﻜﺮوﻓﺎراد ﺑﻴﻦ ﭘﺎﻳﻪ AREFو زﻣﻴﻦ ،ﻳﻚ ﭘﺘﺎﻧﺴﻮﻣﺘﺮ ٢٠ﻛﻴﻠﻮ اﻫﻢ در ADC0و ١٠ﻋــﺪد LEDو ﻣﻘـﺎوﻣﺖ ٢٢٠اﻫـﻢ ﻛـﻪ در
٥٠
در اﺑﺘﺪا ﺑﺎﻳﺪ ﻳﻚ ﭘﺮوژه ﺟﺪﻳﺪ اﻳﺠﺎد ﻛﻨﻴﺪ و ﻫﻤﺎﻧﻨﺪ ﻣﺜﺎﻟﻬﺎي ﻗﺒﻞ ﻧﺮم اﻓﺰار CodewizardAVRرا اﺟﺮا ﻧﻤــﺎﻳﻴﺪ .ﺑﻌـﺪ
از ﺗﻨﻈﻴﻢ ﻧﻮع ﺗﺮاﺷﻪ و ﻓﺮﻛﺎﻧﺲ ﻛﺮﻳﺴﺘﺎل ،در ﻗﺴﻤﺖ ، Portsﭘﻮرت Bو دو ﺑﻴﺖ ﻛــﻢ ارزش ﭘـﻮرت Dرا ﺑـﻪ ﺻـﻮرت ﺧﺮوﺟـﻲ در
٥١
ﺷﻜﻞ ١٦ -٤ﺗﻨﻈﻴﻢ ﭘﻴﻨﻬﺎي ﺻﻔﺮ و ﻳﻚ از ﭘﻮرت Dﺑﻪ ﻋﻨﻮان ﺧﺮوﺟﻲ
ﺳﭙﺲ در ﻗﺴﻤﺖ ) ،ADCﺷﻜﻞ (١٧-٤اﺑﺘﺪا ADC Enabledرا ﻋﻼﻣﺖ ﺑﺰﻧﻴﺪ .ﺑﺎ اﻧﺠﺎم اﻳﻦ ﻛﺎر ﺗﻨﻈﻴﻤﺎت ﻣﺮﺑﻮط ﺑــﻪ
ADCﻧﻤﺎﻳﺎن ﻣﻲ ﺷﻮﻧﺪ ).ﺷﻜﻞ (١٨-٤ﺳﭙﺲ Interrupt ADCرا ﻧﻴﺰ ﻋﻼﻣـﺖ زده Volt. Ref ،را ﺑﺮاﺑـﺮ Int, Cap.on
٥٢
ﺷﻜﻞ ١٧ -٤ﻗﺴﻤﺖ ADCﻗﺒﻞ از ﻓﻌﺎل ﻛﺮدن آن
٥٣
ﺷﻜﻞ ١٨ -٤ﻗﺴﻤﺖ ADCو ﺗﻨﻈﻴﻤﺎت آن
در اﻳﻦ ﻣﻮﻗﻊ ﻛﻞ ﺗﻨﻈﻴﻤﺎت اوﻟﻴﻪ ﺑﻪ ﭘﺎﻳﺎن رﺳﻴﺪه اﺳﺖ و ﺑﺎﻳﺪ ﻛﺪﻫﺎي ﺑﺮﻧﺎﻣﻪ را ﺗﻮﻟﻴﺪ ﻧﻤﺎﻳﻴﺪ .
ﺣﺎﻻ ﺑﺎﻳﺪ دﺳﺘﻮراﺗﻲ را ﺑﻪ ﻓﺎﻳﻞ ﺗﻮﻟﻴﺪ ﺷﺪه اﺿﺎﻓﻪ ﻛﻨﻴﺪ .اﺑﺘﺪا در ﺗﺎﺑﻊ interruptﺑﻌﺪ از ﻗﺴﻤﺖ // place your code
;PORTB=ADCL
;PORTD.0=ADCH.0
;PORTD.1=ADCH.1
;ADCSRA|=0x40
ﺳﭙﺲ ﺑﻌﺪ از دﺳﺘﻮر )" ، # asm("seiدﺳﺘﻮر ; ADCSRA|= ox40را ﺑﻨﻮﻳﺴﻴﺪ .ﺣﺎﻻ ﻣﻲ ﺗﻮاﻧﻴﺪ ،ﭘﺮوژه را ذﺧــﻴﺮه
٥٤
ﻓﺼﻞ ﭘﻨﺠﻢ
ارﺗﺒﺎط ﺳﺮﻳﺎل و LCD
در اﻳﻦ ﻗﺴﻤﺖ ﻣﻲﺧﻮاﻫﻴﻢ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﻢ ﻛﻪ اﻃﻼﻋﺎت را ﺑﻪ ﺻﻮرت ﺳﺮﻳﺎل از ﺗﺮاﺷﻪ ﺑﻪ ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﻔﺮﺳﺘﺪ .ﻣﻲﺧﻮاﻫﻴﻢ
ﻋﺒﺎرت ” ، “Hello Worldﺑﺎ ﻧﺮخ ارﺳﺎل ،9600 bit/secﺑﺪون ،parityﺑﺎ ﻳﻚ ﺑﻴﺖ ﺗﻮﻗﻒ و ﻫﺸﺖ ﺑﻴﺖ دﻳﺘﺎ ﻓﺮﺳﺘﺎده ﺷﻮد.
ﺗﺮﺟﻴﺤ ﹰﺎ ﺑﻬﺘﺮ اﺳﺖ ،اﺑﺘﺪا در ﻣﻮرد ﺳﺨﺖاﻓﺰار ﻻزم ﺑﺮاي ﺑﺮﻗﺮاري ارﺗﺒﺎط ﺳﺮﻳﺎل ﺻﺤﺒﺖ ﻛﻨﻴــﻢ .ﻣـﺪار آن در ﺷـﻜﻞ)(١-٥
٥٥
+5v
ATMega32L
ﺣﺎﻻ ﺑﺎﻳﺪ ﺑﻪ ﺳﺮاغ ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ ﺑﺮوﻳﻢ .اﺑﺘﺪا ﭘﺮوژه ﺟﺎري را ﺑﺎ اﻧﺘﺨﺎب ﮔﺰﻳﻨﻪ Close Projectاز ﻣﻨﻮي Fileﺑﺒﻨﺪﻳــﺪ.
ﺣﺎﻻ ﺑﺎﻳﺪ ﭘﺮوژه ﺟﺪﻳﺪي اﻳﺠﺎد ﻛﻨﻴﺪ .ﺑﺮاي اﻧﺠﺎم اﻳﻦ ﻛﺎر از ﻣﻨﻮي CodewizardAVR ،Toolsرا اﻧﺘﺨﺎب ﻛﻨﻴﺪ .ﻫﻤــﺎﻧﻨﺪ ﻗﺒـﻞ
در اوﻟﻴﻦ ﻣﺮﺣﻠﻪ ﻧﻮع ﺗﺮاﺷﻪ و ﻓﺮﻛﺎﻧﺲ ﻛﺮﻳﺴﺘﺎل ﻣﻮرد اﺳﺘﻔﺎده را ﻣﺸﺨﺺ ﻛﺮده ،ﺳﭙﺲ ﻗﺴﻤﺖ USARTرا اﻧﺘﺨﺎب ﻛﻨﻴﺪ).ﺷــﻜﻞ
(٢-٥
٥٦
ﺷﻜﻞ ٢ -٥ﭘﻨﺠﺮه CodewizardAVRﻗﺴﻤﺖ USART
از آﻧﺠﺎﻳﻲ ﻛﻪ ﻗﺼﺪ دارﻳﻢ در اﻳﻦ ﺑﺮﻧﺎﻣﻪ از ﺗﺮاﺷﻪ ﺑﻪ ﻋﻨﻮان ﻓﺮﺳــﺘﻨﺪه اﺳـﺘﻔﺎده ﻛﻨﻴـﻢ ،ﮔﺰﻳﻨـﻪ Transmiterرا ﻋﻼﻣـﺖ
ﺑﺰﻧﻴﺪ .ﺑﺎ اﻧﺠﺎم اﻳﻦ ﻛﺎر ﻣﻮارد دﻳﮕﺮي ﺑﻪ ﺻﻔﺤﻪ اﺿﺎﻓﻪ ﻣﻲﺷﻮﻧﺪ ،ﻛﺎﻓﻲ اﺳﺖ ﺗﺎ Baudrateرا ﺑﺮاﺑـﺮ Communication ،9600
Parametersرا ﺑﺮاﺑﺮ 8 Data, 1 Stop, No Parityو Modeرا ﺑﺮاﺑﺮ Asynchronousاﻧﺘﺨﺎب ﻧﻤﺎﻳﻴﺪ).ﺷﻜﻞ (٣-٥
٥٧
ﺷﻜﻞ ٣ -٥ﺗﻨﻈﻴﻢ USARTﺑﻪ ﺻﻮرت ﻓﺮﺳﺘﻨﺪه
در اﻳﻦ ﺟﺎ ﺗﻨﻈﻴﻤﺎت اوﻟﻴﻪ ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﭘﺎﻳﺎن رﺳﻴﺪه اﺳﺖ و ﺑﺎﻳﺪ ﭘﺮوژه اﻳﺠﺎد و ﻛﺪﻫﺎي ﻣﻮردﻧﻈﺮ ﺗﻮﻟﻴﺪ ﺷﻮﻧﺪ.
ﺣﺎﻻ ﺑﺎﻳﺪ دﺳﺘﻮرات زﻳﺮ را ﺑﻪ اﻳﻦ ﻓﺎﻳﻞ اﺻﻠﻲ ﭘﺮوژه اﺿﺎﻓﻪ ﻛﻨﻴﺪ .ﺑﻌﺪ از ﻋﺒﺎرت ///Declar your local Variables
;int i
اﻳﻦ دو دﺳﺘﻮر ،دو ﻣﺘﻐﻴﺮ را ﺗﻌﺮﻳﻒ ﻣﻲﻛﻨﻨﺪ ،اوﻟﻲ ﻣﺘﻐﻴﺮ messageﻛﻪ ﻳﻚ آراﻳﺔ رﺷﺘﻪاي اﺳﺖ و ﻫﻤﺎن ﭘﻴﻐــﺎﻣﻲ اﺳـﺖ
ﻛﻪ ﻣﻲﺧﻮاﻫﻴﻢ ﺑﻪ ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﻔﺮﺳﺘﻴﻢ و ﻣﺘﻐﻴﺮ دوم ، i ،ﻳﻚ ﺷﻤﺎرﻧﺪه اﺳﺖ .ﺣﺎﻻ ﺑﺎﻳــﺪ ﻗﺒـﻞ از ﺣﻠﻘـﻪ ) ،while(1دﺳـﺘﻮرات زﻳـﺮ را
)for (i=0;i<12;i++
{
;)]putchar(message[i
}
٥٨
در اﻳﻨﺠﺎ ﻧﻮﺷﺘﻦ ﻛﺪﻫﺎي ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﭘﺎﻳﺎن رﺳﻴﺪه اﺳﺖ .ﺣﺎﻻ در ﻣﻨﻮي ،Projectﻗﺴﻤﺖ Configureرا اﻧﺘﺨﺎب ﻛــﺮده و
از ﻗﺴﻤﺖ After makeﮔﺰﻳﻨﻪ Program the Chipرا اﻧﺘﺨﺎب ﻛﻨﻴﺪ و ﺑﺎ ﻓﺸﺎر دادن دﻛﻤــﻪ OKﭘﻨﺠـﺮه را ﺑﺒﻨﺪﻳـﺪ .در اﻳـﻦ
ﻗﺴﻤﺖ ﺑﺎﻳﺪ ﺗﻨﻈﻴﻤﺎت ﻣﺮﺑﻮط ﺑﻪ ﺑﺮﻧﺎﻣﻪ Terminalرا اﻧﺠﺎم دﻫﻴﺪ .اﻳﻦ ﺑﺮﻧﺎﻣﻪ اﻣﻜﺎن ﻣﺸــﺎﻫﺪه اﻃﻼﻋـﺎت رﺳـﻴﺪه از ﭘـﻮرت ﺳـﺮﻳﺎل
از ﻣﻨﻮي Settingsﻗﺴــﻤﺖ Terminalرا اﻧﺘﺨـﺎب ﻛﻨﻴـﺪ .ﺑـﺎ اﻧﺠـﺎم اﻳـﻦ ﻛـﺎر ﭘﻨﺠـﺮه Terminal Settingsﺑـﺎز
ﻣﻲﺷﻮد).ﺷﻜﻞ (٤-٥
در ﻗﺴﻤﺖ Portﺑﺎﻳﺪ ﻧﺎم ﭘﻮرت ﺳﺮﻳﺎﻟﻲ را ﻛﻪ ﺗﺮاﺷﻪ ﺑﻪ آن ﻣﺘﺼﻞ اﺳﺖ اﻧﺘﺨﺎب ﻛﻨﻴﺪ .در ﻗﺴﻤﺖ ،9600 ،Baud rate
در ،Data bitsﻋﺪد 8و در ،Stopbitsﻋﺪد 1را اﻧﺘﺨﺎب ﻧﻤﺎﻳﻴﺪ و دﻛﻤﺔ OKرا ﻓﺸﺎر دﻫﻴﺪ .در اداﻣﻪ ﺑﺮﻧﺎﻣﻪ را ﻛﺎﻣﭙﺎﻳﻞ ﻛـﺮده و
ﺣﺎﻻ ﺑﺎﻳﺪ ﺑﺮﻧﺎﻣﻪ Terminalرا اﺟﺮا ﻛﺮده و ﭼﮕﻮﻧﮕﻲ اﺟﺮا ﺷﺪن ﺑﺮﻧﺎﻣﻪ را ﻣﺸﺎﻫﺪه ﻧﻤﺎﻳﻴﺪ .ﺑﺮاي اﻧﺠﺎم اﻳﻦ ﻛــﺎر از ﻣﻨـﻮي
Terminal ،Toolsرا اﻧﺘﺨﺎب ﻛﻨﻴﺪ و ﻳﺎ از ﻧﻮار اﺑﺰار دﻛﻤﻪ Run the Terminalرا ﻓﺸﺎر دﻫﻴﺪ .ﻫﻤﺎن ﻃﻮر ﻛﻪ اﻧﺘﻈﺎر داﺷــﺘﻴﻢ
ﻋﺒﺎرت” “Hello Worldﻳﻚ ﺑﺎر روي ﺻﻔﺤﻪ ﻧﻮﺷﺘﻪ ﻣﻲﺷﻮد).ﺷﻜﻞ (٥-٥ﺗﻮﺳﻂ اﻳﻦ ﺑﺮﻧﺎﻣــﻪ ﻣﻲﺗﻮاﻧﻴـﺪ ﺻﻔﺤـﻪ را ﭘـﺎك ﻛـﺮده و
ﺗﺮاﺷﻪ را RESETﻛﻨﻴﺪ.
٥٩
ﺷﻜﻞ ٥ -٥ﺑﺮﻧﺎﻣﻪ Terminal
ﺣﺎﻻ اﮔﺮ ﺑﺨﻮاﻫﻴﻢ اﻳﻦ ﻋﺒﺎرت ﺑﻪ ﺻﻮرت ﻣﺘﻮاﻟﻲ ﺑﻪ ﻛﺎﻣﭙﻴﻮﺗﺮ ﻓﺮﺳﺘﺎده ﺷﻮد ﺑﺎﻳﺪ ﺣﻠﻘﻪ) (Forﻧﻮﺷﺘﻪ ﺷﺪه در ﻗﺴﻤﺖ ﻗﺒﻞ را
در داﺧﻞ ﺣﻠﻘﺔ whileﺑﻨﻮﻳﺴﻴﻢ .اﻳﻦ ﻛﺎر را اﻧﺠﺎم دﻫﻴﺪ و ﻧﺘﻴﺠﻪ را ﺑﺒﻴﻨﻴﺪ.
ﻫﻤﺎﻧﻄﻮر ﻛﻪ دﻳﺪﻳﺪ ﺑﺮﻗﺮاري ارﺗﺒﺎط ﺳﺮﻳﺎل در ﻧﺮم اﻓﺰار CodevisionAVRﺑﺴﻴﺎر ﺳﺎده اﺳﺖ.
LCD
در اﻳﻦ ﻗﺴﻤﺖ ﻗﺼﺪ دارﻳﻢ ﺗﺎ ﻛﺎر ﺑﺎ LCDرا ﺑﻴﺎﻣﻮزﻳﻢ .ﻣﻲﺧﻮاﻫﻴﻢ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﻢ ﻛﻪ ﺑﻪ ﺻﻮرت ﻣﺪاوم از ﺷﻤﺎرة ١ﺗﺎ
١٠٠را ﺑﺎ ﻓﺎﺻﻠﺔ ٠,٢ﺛﺎﻧﻴﻪ ﺑﺸﻤﺎرد و ﻫﺮ ﺑﺎر ﺑﺎ رﺳﻴﺪن ﺑﻪ ﻣﻘﺪار ٢ ،١٠٠ﺛﺎﻧﻴﻪ ﺻﺒﺮ ﻛﺮده و دوﺑﺎره از ﻋــﺪد ١ﺷـﺮوع ﻛﻨـﺪ .در اﻳـﻦ
اﺑﺘﺪا ﭘﺮوژه ﺟﺎري را ﺑﺒﻨﺪﻳﺪ و ﻧﺮم اﻓﺰار CodewizardAVRرا اﺟﺮا ﻛﻨﻴﺪ .ﺑﻌﺪ از ﺗﻨﻈﻴﻢ ﻧﻮع ﺗﺮاﺷﻪ و ﻛﺮﻳﺴــﺘﺎل ﻣـﻮرد
اﺳﺘﻔﺎده ،ﻗﺴﻤﺖ LCDرا اﻧﺘﺨﺎب ﻧﻤﺎﻳﻴﺪ)ﺷﻜﻞ (٦-٥و در ﻟﻴﺴﺖ اﻧﺘﺨﺎﺑﻲ PORTC ،LCD Portرا اﻧﺘﺨﺎب ﻛﻨﻴﺪ.
٦٠
ﺷﮑﻞ ٦ -٥
٦١
ﺷﻜﻞ ٧ -٥ﺗﻨﻈﻴﻤﺎت ﻣﺮﺑﻮط ﺑﻪ LCD
در ﻗﺴﻤﺖ Chars./Lineﻫﻢ ﻋﺪد ١٦را اﻧﺘﺨﺎب ﻛﻨﻴﺪ .ﻋﺪد ١٦ﺑﻪ اﻳﻦ ﻣﻌﻨــﺎ اﺳـﺖ ﻛـﻪ LCDﻣـﻮرد اﺳـﺘﻔﺎده ﻳـﻚ
LCDﻛﺎرﻛﺘﺮي 2 × 16اﺳﺖ .ﻫﻤﺎن ﻃﻮر ﻛﻪ در ﻗﺴﻤﺖ ﭘﺎﻳﻴﻦ ﭘﻨﺠﺮه ﻣﻲﺑﻴﻨﻴــﺪ)،ﺷـﻜﻞ (٧-٥ﻃﺮﻳﻘـﻪ اﺗﺼـﺎل ﭘﺎﻳـﻪﻫﺎي ﻣﺨﺘﻠـﻒ
LCDﺑﻪ ﭘﻴﻨﻬﺎي ﭘﻮرت Cﻣﺸﺨﺺ ﺷﺪهاﻧﺪ .اﻟﺒﺘﻪ ﻋﻼوه ﺑﺮ اﻳﻦ ﭘﺎﻳﻪﻫﺎ ،در ﻋﻤﻞ ﺣﺪاﻗﻞ ﺳﻪ ﭘﺎﻳﻪ دﻳﮕﺮ از LCDﻫــﻢ ﺑـﺎﻳﺪ ﺗﻨﻈﻴـﻢ
ﭘﺎﻳﻪ اول ﺑﻪ زﻣﻴﻦ ،ﭘﺎﻳﻪ دوم ﺑﻪ ﻣﻨﺒﻊ ﺗﻐﺬﻳﻪ +٥وﻟﺖ و ﭘﺎﻳﻪ ﺳﻮم ﻫﻢ ﻛﻪ ﺑﺮاي ﻛﻨﺘﺮل ﻛﻨﺘﺮاﺳﺖ اﺳﺘﻔﺎده ﻣﻲﺷﻮد ﺑــﺎﻳﺪ ﺑـﻪ
٦٢
2x16 LCD
16 1
+5v
29
28
27
26
25
24
23
22
21
ATMega32L
)PC5(TDI
)PC4(TDO
)PC1(SDA
)PD7(OC2
)PC3(TMS
)PC7(TOSC2
)PC6(TOSC1
)PC2(TCK
)PC0(SCL
در اﻳﻨﺠﺎ ﺗﻨﻈﻴﻤﺎت اوﻟﻴﻪ ﺑﻪ ﭘﺎﻳﺎن رﺳﻴﺪه اﺳﺖ .ﺑﻨﺎﺑﺮاﻳﻦ ﺑﺎﻳﺪ ﭘﺮوژة ﺟﺪﻳﺪي اﻳﺠﺎد و ﻛﺪﻫﺎي ﻣﻮردﻧﻈﺮ را ﺗﻮﻟﻴﺪ ﻛﻨﻴﺪ.
ﺣﺎﻻ ﻛﺎﻓﻲ اﺳﺖ ﺗﺎ ﻛﺪﻫﺎﻳﻲ را ﺑﺮاي اﻧﺠﺎم ﻋﻤﻞ ﺷﻤﺎرش و ﻧﻤــﺎﻳﺶ آﻧـﻬﺎ ﺑـﺮ روي LCDﺑـﻪ ﺑﺮﻧﺎﻣـﻪ اﺿﺎﻓـﻪ ﻛﻨﻴـﻢ .ﺑﻌـﺪ
> ≠ include < delag.hو > ≠ include < stdio.hرا اﺿﺎﻓـﻪ ﻛﻨﻴـﺪ. ازدﺳﺘﻮر ، ≠ include < mega32.h > ،دﺳﺘﻮرات
ﺳﭙﺲ در اول ﺗﺎﺑﻊ ،mainﺑﻌﺪ از ﻋﺒﺎرت //Declare your local vaniables hereدو ﻣﺘﻐﻴﺮ را ﺑﻪ ﺻﻮرت زﻳﺮ ﺗﻌﺮﻳﻒ ﻛﻨﻴﺪ.
;int i=0
;]char lcd_buffer[20
ﻣﺘﻐﻴﺮ iﻳﻚ ﺷﻤﺎرﻧﺪه اﺳﺖ و ﻣﺘﻐﻴﺮ lcd_bufferﻋﺒﺎرﺗﻲ را ﻛــﻪ ﺑـﺎﻳﺪ در LCDﻧﺸـﺎن داده ﺷـﻮد در ﺑـﺮ ﻣـﻲ ﮔﻴـﺮد.
ﻛﺪﻫﺎي اﺻﻠﻲ ﺑﺮﻧﺎﻣﻪ را در درون ﺣﻠﻘﻪ whileو ﺑﻌﺪ از ﻋﺒﺎرت //place your code hereﺑﻨﻮﻳﺴﻴﺪ:
)for(i=0;i<101;i++
{
;)(lcd_clear
;)lcd_puts(lcd_buffer
;)delay_ms(200
٦٣
}
;)delay_ms(2000
ﺣﺎﻻ ﺑﺮﻧﺎﻣﻪ را ﻛﺎﻣﭙﺎﻳﻞ ﻛﺮده ،ﺗﺮاﺷﻪ را ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻛﻨﻴﺪ و ﻧﺘﻴﺠﻪ را ﻣﺸﺎﻫﺪه ﻧﻤﺎﻳﻴﺪ.
ﻻزم ﺑﻪ ذﻛﺮ اﺳﺖ ﻛﻪ در ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ ،ﻫــﺮ ﺑـﺎر ﺗﻮﺳـﻂ دﺳـﺘﻮر) ( LCD, lcd_clearﭘـﺎك ﺷـﺪه و ﺑـﻪ ﻛﻤـﻚ دﺳـﺘﻮر
) ( ، lcd_putsﻋﺒﺎرﺗﻲ را در آن ﻣﻲﻧﻮﻳﺴﻴﻢ.
در اﻳﻦ ﺑﺨﺶ ﻣﻲﺧﻮاﻫﻴﻢ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﻢ ﻛﻪ در آن ﺗﺮاﺷﻪ اﻃﻼﻋﺎت را از ﭘﻮرت ﺳﺮﻳﺎل ﺑﮕﻴﺮد و آﻧﻬﺎ را ﺑــﺮ روي LCD
ﻣﺘﺼﻞ ﺷﺪه ﺑﻪ ﭘﻮرت Cﻧﺸﺎن دﻫﺪ .ﺳﺨﺖ اﻓﺰار ﻻزم ﺑﺮاي اﻳﻦ ﺑﺮﻧﺎﻣﻪ در دو ﺑﺮﻧﺎﻣﻪ ﻗﺒﻞ ﻣﻮرد ﺗﻮﺟﻪ ﻗــﺮار ﮔﺮﻓـﺖ)،ﺷـﻜﻠﻬﺎي ١-٥و
ﻫﻤﺎﻧﻨﺪ ﺑﺮﻧﺎﻣﻪﻫﺎي ﻗﺒﻞ اﺑﺘﺪا ﺑﺮﻧﺎﻣﺔ CodewizardAVRرا اﺟﺮا ﻛﻨﻴﺪ ،ﭘﺲ از ﺗﻨﻈﻴﻢ ﻧــﻮع ﺗﺮاﺷـﻪ و ﻣﻘـﺪار ﻛﺮﻳﺴـﺘﺎل
ﻣﻮرد اﺳﺘﻔﺎده در ﻗﺴﻤﺖ ،Chipﻗﺴﻤﺖ LCDرا اﻧﺘﺨﺎب ﻛﺮده و در ﻟﻴﺴﺖ اﻧﺘﺨﺎب PORTC ،LCD Portرا اﻧﺘﺨـﺎب ﻛﻨﻴـﺪ.
ﺳـﭙﺲ ﻗﺴـﻤﺖ USARTرا اﻧﺘﺨـﺎب ﻧﻤـﺎﻳﻴﺪ .از آﻧﺠـﺎﻳﻲ ﻛـﻪ ﻣﻲﺧﻮاﻫﻴـﻢ ﺗـﺎ از ﺗﺮاﺷـﻪ ﺑـﻪ ﻋﻨـﻮان ﮔﻴﺮﻧـــﺪه اﺳــﺘﻔﺎده ﻛﻨﻴــﻢ،
ﻗﺴﻤﺖ Receiverرا ﻋﻼﻣﺖ ﺑﺰﻧﻴﺪ .ﺑﺎ اﻧﺠﺎم اﻳﻦ ﻛﺎر ﻣﻮارد دﻳﮕﺮي ﺑﻪ ﺻﻔﺤﻪ اﺿﺎﻓﻪ ﻣﻲﺷﻮﻧﺪ ﻛﻪ ﻣﻲﺗﻮاﻧﻴﺪ در آن ﭘﺎراﻣﺘﺮﻫﺎي ﻣﺮﺑﻮط
ﺑﻪ ارﺗﺒﺎط ﺳﺮﻳﺎل را ﺗﻨﻈﻴﻢ ﻛﻨﻴﺪ).ﺷﻜﻞ (٩-٥اﻳﻦ ﭘﺎراﻣﺘﺮﻫﺎ را ﻫﻤﺎﻧﻨﺪ ﻣﺜﺎل ﻗﺒﻠﻲ در ﻣﻮرد ارﺗﺒﺎط ﺳﺮﻳﺎل ﺗﻨﻈﻴﻢ ﻛﻨﻴﺪ.
٦٤
ﺷﻜﻞ ٩ -٥ﺗﻨﻈﻴﻢ USARTﺑﻪ ﺻﻮرت ﮔﻴﺮﻧﺪه
ﺑﻌﺪ از اﻧﺠﺎم اﻳﻦ ﻣﺮاﺣﻞ ،دﻳﮕﺮ ﻛﺎر ﺗﻨﻈﻴﻤﺎت اوﻟﻴﻪ ﺑﻪ ﭘﺎﻳﺎن رﺳﻴﺪه و ﺑﺎﻳﺪ ﭘــﺮوژه ﺟﺪﻳـﺪي اﻳﺠـﺎد و ﻛﺪﻫـﺎي ﻣﻮردﻧﻈـﺮ را
ﺗﻮﻟﻴﺪ ﻛﻨﻴﺪ.
ﺣﺎﻻ ﺑﺎﻳﺪ ﻣﺘﻐﻴﺮﻫﺎي ﻣﻮرد ﻧﻴﺎز در ﺑﺮﻧﺎﻣﻪ را در ﻗﺴﻤﺖ ، //Declare your local Varibles hereدر اﺑﺘـﺪاي ﺗـﺎﺑﻊ
;int i
;char code
;]char lcd_buffer[38
ﻛﻪ در آن iﻳﻚ ﺷﻤﺎرﻧﺪه اﺳﺖ ،code .ﻛﺎرﻛﺘﺮي اﺳﺖ ﻛﻪ ﻫــﺮ ﺑـﺎر از ﻃﺮﻳـﻖ ﭘـﻮرت ﺳـﺮﻳﺎل درﻳـﺎﻓﺖ ﻣﻲﺷـﻮد و آراﻳـﻪ
ﺣﺎﻻ ﺑﺎﻳﺪ ﺧﻄﻮط اﺻﻠﻲ را در داﺧﻞ ﺣﻠﻘﺔ ) while(1ﺑﻪ ﺻﻮرت زﻳﺮ اﺿﺎﻓﻪ ﻧﻤﺎﻳﻴﻢ.
;)(code=getchar
٦٥
)""=!if (code
;{
)for (i=0;i==36;i++
{
;]lcd_buffer[i+1]=lcd_buffer[i
}
;lcd_buffer[0]=code
;)lcd_puts(lcd_buffer
}
دﺳﺘﻮر ) ( getcharدر ﻫﺮ ﺑﺎر اﺟﺮاي ﺣﻠﻘﻪ ،ﻛﺎرﻛﺘﺮي را از ﭘﻮرت ﺳﺮﻳﺎل ﻣﻲﮔﻴﺮد و آن را در ﻣﺘﻐﻴﺮ codeﻗﺮار ﻣﻲدﻫﺪ.
دﺳﺘﻮر ﺷﺮﻃﻲ ifﻣﻮﺟﺐ ﻣﻲﺷﻮد ﺗﺎ اﮔﺮ واﻗﻌ ﹰﺎ ﻛﺎرﻛﺘﺮي از ﻃﺮﻳﻖ ﭘﻮرت ﺳﺮﻳﺎل ﺑﺮاي ﺗﺮاﺷــﻪ ﻓﺮﺳـﺘﺎده ﺷـﺪه آن ﻛـﺎرﻛﺘﺮ را ﺑـﺮ روي
LCDﺑﻪ ﻫﻤﺮاه ﻛﺎرﻛﺘﺮﻫﺎي ﻗﺒﻠﻲ ﻧﺸﺎن دﻫﺪ و در ﻏﻴﺮ اﻳﻦ ﺻﻮرت ﻛﺎري اﻧﺠﺎم ﻧﺪﻫﺪ .دﺳﺘﻮرات ﻣﻮﺟﻮد در داﺧﻞ ﺣﻠﻘــﻪ forﻫـﻢ
ﻣﻮﺟﺐ ﻣﻲﺷﻮﻧﺪ ﺗﺎ ﺑﺎ رﺳﻴﺪن ﻫﺮ ﻛﺎرﻛﺘﺮ ،ﻛﺎرﻛﺘﺮﻫﺎي ﻣﺎﻗﺒﻞ ﻳﻚ واﺣﺪ ﺑﻪ ﺳﻤﺖ راﺳﺖ ﺷﻴﻔﺖ ﭘﻴﺪا ﻛﺮده و ﺑﻪ ﻫﻤﺮاه ﻛﺎرﻛﺘﺮ ﺟﺪﻳــﺪ
ﺑﺮ روي ﺻﻔﺤﻪ LCDﻧﺸﺎن داده ﺷﻮﻧﺪ .در اﻳﻨﺠﺎ ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ ﺑــﻪ ﭘﺎﻳـﺎن رﺳـﻴﺪه و ﻣﻲﺗﻮاﻧﻴـﺪ آن را ﻛﺎﻣﭙـﺎﻳﻞ ﻧﻤـﻮده و ﺗﺮاﺷـﻪ را
ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻛﻨﻴﺪ.
ﻣﻲﺗﻮاﻧﻴﻢ ﺻﺤﺖ ﺑﺮﻧﺎﻣﻪ ﻧﻮﺷﺘﻪ ﺷﺪه را در ﻫﻢ ﻋﻤﻞ ﺑﺒﻴﻨﻴﺪ .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر اﺑﺘﺪا ﻧﺮم اﻓــﺰار Notepadرا اﺟـﺮا ﻛـﺮده و
ﻋﺒﺎرت ” “Hello Worldرا در آن ﺗﺎﻳﭗ ﻛﻨﻴﺪ و آن را ﺑﺎ ﻧﺎم دﻟﺨﻮاه ذﺧﻴﺮه ﻧﻤﺎﻳﻨﺪ).ﺷﻜﻞ (١٠-٥
٦٦