صفحه 1:

صفحه 2:
#منابع : #منابع موجود در ‎www.atmel.com‏ ‏مرجع کامل میکروکنترلرهای ۸۸۷ - انتشارات نص - محمد مهدی پرتوی فر و .. © ميكروكنترلرهاى +4171 و كاربردهاى آنها - انتشارات نص - امیر ره افروز #نرم افزارها : ‎CodeVisionAVR‏ ® ‎Proteus‏ © ‎AVR Studio‏ ©

صفحه 3:
© ميان ترم 5 . i ۳ : ‏#تمرين‎ هو بان قوم ‎٠.‏ : نمره

صفحه 4:
Introduction © ATMEL © 8 bit Microcontroller © Families ® Tiny © 90S (CLASSIC) ® Mega ®LCD AVR ® Execute One Instruction Per Cycle (MIPS)

صفحه 5:
جایگزینی تراشه های قد AT90S2313 ATTINY2313 AT90S2323 ATTINY25 AT90S4433 ATMEGA8 AT90S8515 ATMEGA8515 ATMEGA103 ATMEGA128 ATMEGA161 ATMEGA162 ATMEGA163 ATMEGA16 ATMEGA323 ATMEGA32

صفحه 6:
نام میکر و کنترلر از دو یا سه قسمت تشکیل شده است 6 ۸۲۷۳0۸ 6 9 ۸۲۳0۵ 8 ‎ATTINY 28L‏ © ‎ATTINY 28 V‏ ® قسمت اول نوع و سری میکرو و قسمت دوم حافظه 112511 را بیان می کند. قسمت سوم مخفف 00176۳ 101۷ و 001761 ‎pS wi very low‏ جدول زیر شرح داده شده است:

صفحه 7:
2 ميكر وكنترلر 81/4 بدون پسوند 455 ميكر وكتترلر 21/18 با يسوند 1 ۷ -2.7 میکر و کنترلر ۴۹ ‎۸٩۷‏ با پسوند۷ 1.8-5.5 0-16 MHZ 0-8 MHZ 0-4 MHZ

صفحه 8:
-Package - ao ‏موجه‎ ‎Pat aoci) ‏امه موم‎ PAR ADE) a (3008) as (apes) ae (ance) Par ocr) AREF ND Per (rosea) Pos (TOSC!) Pos (TO Pot 1700} Pos TINS) Po2 ITOK) ‏بم‎ (308) Poa ‏رصح‎ ‎Por (0¢2} TOO ۳ 3 ۵۵ روصم ‎Pet‏ )7 ‎auras) P52‏ ‎(OCD) PE‏ ‎Pad‏ )58( ‎(eros Pes‏ ‎(ets) PB:‏ ‎(60K) PBT‏ ‎RESET‏ vee KD MTA? (x0) P00 (xD) PDE canto) Po2 ‎Pos‏ رصع

صفحه 9:
Pad (ADC) PAS (ADCS) PAB (ADCS) PAT (ADCT) AREF GND avec. Por (Tosca) Pes (TOSct) PCs (TD) PCA (THO) (7 TOFPIMLE 38.2 segs 255 5 2222 22 ‏ممم مع ممم ممم‎ موم وت ۲ 7 / 3 3 33 : 8 : ‎i‏ : 2 : ‎is‏ / 8 3 ‎to u‏ 3 1 1219141161716! 920722 otto errs BSS885888595 EEEEESSERES e588 3382 (Mosi) PBS (MISO) PEE (S0K) P87 RESET ۷0 GND xTAL2 XTALT (RxD) Poo (TxD) POI into) PO

صفحه 10:
1 موه ‎NES‏ نامع هلام

صفحه 11:
Architecture ® RISC: Reduced Instruction Set Computer ==> AVR ® CISC: Complex Instruction Set Computer

صفحه 12:

صفحه 13:
Data Bus &-bit Program Status Flash ‏لمم‎ > an Counter and Control Memory ‏لمم‎ ‎T ‏اجه‎ ‎>| sexe 7 Instruction General Brit Register Purpose 5 1 ‏م الم‎ Gait Tastuction Watchdoi Decoder | Tee 1 2 1 g £ canal Control Lines 3 omparator 2 3 1 g 6 = VO Modulet VO Module 2 VO Module n EEPROM VO Lines

صفحه 14:
Memory Types ® SRAM (Static Random Access Memory) @ EEPROM é£(Electrically Erasable Programmable Read Only Memo) © Program © Flash

صفحه 15:
Memory © Flash (for mega32) © 32K Bytes of In-System Self- Programmable Flash Endurance: 10,000 Write/Erase Cycles

صفحه 16:
Data Memories ® SRAM (for mega32) ° 2K Byte Internal SRAM- Register file, I/O Register, Data Address. °® EEPROM (for mega32) ° 1024 Bytes EEPROM Endurance: 100,000 Write/Erase Cycles

صفحه 17:
® Program Counter (PC) ® Instruction Register (IR) ® Instruction Decoder (ID)

صفحه 18:

صفحه 19:
X-tegister Low Byte X-register High Byte Y-register Low Byte Y-register High Byte Z-register Low Byte Z-register High Byte $00 $01 302 800 508 SOF $10 $11 91۸ $1B 56 5 SIE SIF F 8 General Purpose Working Registers

صفحه 20:
X-Y-Z Registers ۳ » x ۲ X- ‏اوه‎ 7 5 ‘R27 (S1B) R26 (S1A) 3 ۳ 1 ۲ 8 ۳ 5 ٠ ‏و2‎ 7 5 For (str) ۳301۳1۳

صفحه 21:
Data Bus &-bit Program Status Flash ‏لمم‎ > an Counter and Control Memory ‏لمم‎ ‎T ‏اجه‎ ‎>| sexe 7 Instruction General Brit Register Purpose 5 1 ‏م الم‎ Gait Tastuction Watchdoi Decoder | Tee 1 2 1 g £ canal Control Lines 3 omparator 2 3 1 g 6 = VO Modulet VO Module 2 VO Module n EEPROM VO Lines

صفحه 22:
ALU e Arithmetic And Logic Unit e Arithmetic - ADD R1,R2 eR1€©R1+R2 eLogic e AND RI,R2 ۰111 111 AND R2

صفحه 23:
Owe فيوز بيت ها قسمتی از حافظه میکرو کنترلر ها هستند که امكاناتى را در اختيار كاربر قرار مى دهند و با پاک شدن حافظه میکرو تتظیمات آنها از بين نمی رود

صفحه 24:
Clock Source

صفحه 25:
Clock Sources Device Clocking Option | External CrystaliCeramic Resonator | 1114-1010 | External Low-frequency Crystal | 1001 External RC Oscillator | 1000 - 0101 | Calibrated Internal RC Oscillator | 0100 - 0001 | External Clock | 0000 Note: 1. Forall fuses “1” means unprogrammed while “0” means programmed.

صفحه 26:
-Package - ao ‏موجه‎ ‎Pat aoci) ‏امه موم‎ PAR ADE) a (3008) as (apes) ae (ance) Par ocr) AREF ND Per (rosea) Pos (TOSC!) Pos (TO Pot 1700} Pos TINS) Po2 ITOK) ‏بم‎ (308) Poa ‏رصح‎ ‎Por (0¢2} TOO ۳ 3 ۵۵ روصم ‎Pet‏ )7 ‎auras) P52‏ ‎(OCD) PE‏ ‎Pad‏ )58( ‎(eros Pes‏ ‎(ets) PB:‏ ‎(60K) PBT‏ ‎RESET‏ vee KD MTA? (x0) P00 (xD) PDE canto) Po2 ‎Pos‏ رصع

صفحه 27:
ernal “og XTAL2 5 4 St xtra GND Oscillator Frequency Range | Recommended Range for Capacitors (Hz) C1 and C2 for Use with Crystals (pF) 0.4-0.9 2 0.9-3.0 12-22 ۵0-0 12-22 105 12-22 CKSELS.41 Tor 110 111 401, 110, 111 This option should not be used with crystals, only with ceramic resonators. ۷02۲ ات ارت Note: 1.

صفحه 28:
Prov Frequency Crystal Oscillator 2 ۲ XTAL2 ‏و ویو‎ 5 ta? ‏ات‎ ‏وه‎ 0 CKOPT =0 ==> Internal 36pF Capacitor

صفحه 29:
External RC Oscillator XTAL2 1011 ۳۱/۵96 7 8 | ۰ | 90 99-0 ont 50-0 | 1000 80-20 min C=22pF 3K<R<100K if CKOPT=0 then internal 36pF cap is available

صفحه 30:
۱9 ۳ Oscillator CKSELS.0 ‘Nominal Frequency (MHz) ۳ 10 0010 20 ort 40 700 86 Note: 1. The device is shipped with this option selected.

صفحه 31:
External Clock CKSEL=0000 If CKOPT=0 then internal c=36pF is available between XTAL1 and GND لور ono Ne

صفحه 32:
وس سس سس Oscillator © For AVR microcontrollers with Timer/Counter Oscillator pins (TOSC1 and TOSC2), the crystal is connected directly between the pins. No external capacitors are needed. The Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external clock source to TOSC1 is not recommended.

صفحه 33:
Clock Distribution

صفحه 34:
Calibrated RC Oscillator Flach and EEPROM ADC CPU Core RAM 1 1 ‏عووااه‎ ‎AVR Clock ‏تمه‎ ‎Control Unit ‏ی‎ ‎1 1 Reset Logio Watchdog Timer 7 ‏جز‎ 7 ‘Souree Clock Watchdog Clock Watchdog Oscillator Low-frequency Crystal Oscilator Extemal Giock Crystal Oscillator General ۵ Modules External RC Oscillator ‘Agyrehronous Timer/Counter 1 Timer/Counter ‘Osellator

صفحه 35:

صفحه 36:

صفحه 37:
SRAM Management

صفحه 38:
Data Aciress Space 6 Register Fle M Data (mega32)

صفحه 39:
Programmin 1 CodevisionAVR

صفحه 40:
e Prototyp #include <mega32.h> global definition mainQ { local variable; © statements; 1 function10, { local variable; Statements; } function20, © local variable; © Statements; 1

صفحه 41:
Prototype چون میکرو هميشه بايد در حال فعالیت باشده درون تابع 128110 یک حلقه دائم قرار داده می © #include <mega32.h> © global definition © main() 4 ‎local variable;‏ »© دستوراتی که باید یک بار اجرا شوند ‎٩‏ ‏(1) ۲۷۱۵ ۰ ‎a‏ ‏دستورات و کدهای اصلی برنامه که دائما اجرا می شوند 6 ۰1 95

صفحه 42:
Owe نکاتی در مورد برنامه نویسی خط اول هميشه دستور فراخوانی فایل های حاوی توابع 11630161 است در انتهای هر عبارت یک سمی کالن قرار داده می شود | 5 | 52 ابتدا و اتهای هر حلقه» عبارت شرطی و یا بلوک قرار داده می شود از // یا( /* و */) برای نوشتن توضیح در برنامه استفاده می شود

صفحه 43:
Data Type © Type Size (Bits) Range © bit 1 0,1 © char 8 -128 to 127 © unsigned char 8 0 to 255 © signed char 8 -128 to 127 © int 16 -32768 to 32767 © short int 16 -32768 to 32767 © unsigned int 16 0 to 65535 © signed int 16 -32768 to 32767 © Jong int 32 -2147483648 to 2147483647 © unsigned long int 32 0 to 4294967295 © signed long int 32 -2147483648 to 2147483647 © float 32 21.1756-38 ‏م‎ 98 © double 32 21.1756-38 ‏م‎ 98

صفحه 44:
Owe متغير ها و ثابت ها ابتدا باید معرفی شوند نام متغير نوع متغير حافظه مورد نیاز برای متفیر ‎eeprom int temp;‏ ‎flash int‏ ‎temp=10;‏ ‎eeprom char str;‏ ‎float a;‏ ‎int‏ ‎b=30;‏ .نام متفیر ها می تواند تر کیبی از حروف و اعداد باشده فقط نام متفیر نباید با عدد شروع شود

صفحه 45:
ات سس Constants ®flash int x=123; ®const char y=‘a’; ®#define C 100;

صفحه 46:
آرایه ها تعدادی متغیر دلخواه از یک نوع و یک نام که با اندیس های شماره دار از هم جدا هستند 101 5۳]10[ int i[3]= {2,5,6} ‏رشته(51۳1۳0):‎ به آرایه هایی که حروف اسکی را درون خود نگه می دارند» رشته می گوییم. ‎Char t[5]= “temp‏

صفحه 47:
bit Data type ®bit x,y; ®x=1; ® from R2.0 to R14.7 > max=104 ® Set in following menu: ® Project/Configure/C Compiler/Code Generation/Bit Variable size

صفحه 48:
————— Operators 1 ۱ 0 A ۸ ۱ ‏ا‎ ‎eases ۷ ۱ 0

صفحه 49:

صفحه 50:
>> >> OxFO & OxOF 0x00 | 0x03 OxOF “ ۴ ~(OxFO) OxFO >> 4 00۲ >> 4

صفحه 51:
افزایش یک واحد کاهش یک واحد آدرس در آدرس مثال 3 att a=at1 a=a-1 آدرس 3 در آدرسی که 3 به آن آشاره می‌کند

صفحه 52:

صفحه 53:

صفحه 54:
Decision and loops © if -else ® while ® do-while ® for © Switch - case

صفحه 55:

صفحه 56:
char a=10; char b=20; char max; void main(void) 14 while(1) £ if(a>b) 2 } € max=b;

صفحه 57:
switch (=) ( ase) Jabs Vege نامز شار ع عدت Tope fereak:] casey jute مور ۳ تام لدعم ‎Leonel‏

صفحه 58:
case 4: cate 6: aprintf(buffer,"Tabestan"); break; cane 3: sprint(buffer,"Paez" break; case ] ‏معط‎ ‎defaul ‎sprintf[butfer,"Error”); ‎1 #include <stdio.h> char month=10; char buffer[10]; void main(void) 4 while(1) 1 switch (month) 1 case 1: case 2: case 3: ‘sprintf(buffer," Bahar"); break;

صفحه 59:

صفحه 60:

صفحه 61:

صفحه 62:
#include <stdio.h> char buffer[10]; void main(void) ‏ف‎ while(1) 1 for (I=1; 1<=10; 1=1+1) sum = sum+i; sprintf(buffer,“Sum is %d",sum); 1 71

صفحه 63:
توابع و فرم تابع نویسی نام تابع 2 نوعداده خروجى (داده هاوورودى © 8 تعريف متغير هاى محلى © ۰ با ز گرداندن مقدار خروجی در صورت وجود 6 = دستورات

صفحه 64:
برنامه ای بنویسید که عدد ورودی را به توان ۳ برساند ®longint func( int x) BE ® long int s; © s=xtx*x; © return ‏زک‎ =:

صفحه 65:
جایگاه نوشتن توابع :توابع را در دو جا می توان نوشت ۱- قبل از ‎main gt‏ ۲- در زیر کل برنامه <include<header# Void func(void) 1 دستورات ()Void main } دستورات 7

صفحه 66:
<include<header# ‘Void fune(void) Void main(void) 1 دستورات ‎While(1)‏ 1 دستورات 1 { (Void fune 1 دستورات 1

صفحه 67:
Libraries math.h stdio.h delay.h Megal16.h And ...

صفحه 68:
PORTS

صفحه 69:
Direction #4 8 % ¢ اد ‎ot‏ ‏مومه [ 5021 | 9082 | 5045 | 0064 | 5085 | 905 | | Initial Value 0 3 3 0 0 3 0 0 Output=1 // PA.O input 3 //PA.5 output ۳16-0: 6

صفحه 70:
Output Latch a 76 5 4 3 2 3 9 [Farrar | romae roma | ronmat | roma] Fomras | ron | roma] roma peauwite RAT a Initial Vatu 0 0 9 0 0 3 0 0

صفحه 71:
Input register Br 7 6 5 4 3 2 1 0 LpINA7 | prac | pmas | PINAG | Pmas | PINAZ | PINAY | PmAO | PINA ReadWrite 8 8 8 8 8 8 8 8 Intial Value ‏ناا‎ NA NA ۷۸ NA NA NA NA

صفحه 72:
Example-1 برنامه ای بنویسد که بر روی پورت 3 مقدار 0628 را بنویسد. #include <mega32.h> void main(void) { DDRB=0xFF ; while (1) 1 PORTB=0x28; 1

صفحه 73:
Example-2 © تابعى بنويسيد که یک چراغ راهنمایی را بصورت زیر پیاده سازی کند: ‎ju?‏ : ۱۵ثانیه گزرد: ۲ثانیه © قرمز: 8 ثانيه نام تابع : 1181110516121 ورودی : ندارد خروجی : ندارد سبز : ۳0۳۲۸۵۰0 زرد: ۳0۲۸.1 0,55 : ‎PORTA.2‏

صفحه 74:
Example-2 Header file: delay.h void delay_us(unsigned int n); void delay_ms(unsigned int n); delay_us(100) <-- ‏#مثال : تاخیر ۱۰۰ میکروانیه‎ #مثال : تاخیر ۵ انیه -- < ‎delay_ms(5000)‏

صفحه 75:
Example-2 #include <mega32.h> #include <delay.h> void traficsignal (void) ; void main(void) 4 DDRA=0x07 ; while (1) 1 traficsignal(); he } void traficsignal (void) 1 PORTA. 0=1; PORTA. 1=0; PORTA. 2=0; delay_ms(15000) ; PORTA, 0=0; PORTA. 1=1;PORTA.2=0; delay_ms (3000) ; PORTA. 0=0; PORTA. 1=0; PORTA. 2=1; delay ms (15000) ; و

صفحه 76:
Exercise-1 ۱- تابعی بنویسد که یک چراغ راهنمایی را با دریافت تاخیرها توسط پرنامه زیر راه اندازی کند. #سبز : ۵06127 ثانیه ast Ydelay ‏#ررد:‎ ast ٩0612۲ ‏#قرمز:‎

صفحه 77:
Exercise-1 #include <mega32.h> void traficsignal(int gdelay,int ydeay,int rdelay); void main(void) 1 DDRA=0x07 ; while (1) 1 :(2,لا,»*) 8116519081 ye } void traficsignal(int gdelay, int ydelay, int rdelay) 1 PORTA. 0=1; PORTA. 1 delay _ms(gdelay) ; PORTA.0=0;PORTA. delay ms(ydelay) ; PORTA.0=0; PORTA. delay_ms(rdelay) ; 1

صفحه 78:
Example-3 ابعی بنویسید که یک عدد بی علامت را از پورت ۸ خوانده و بر روى يورت 3 نشان دهد. #include <nega32.h> void in out port(void); void main(void) 1 0900۵ 2088-01: while (1) 12 ‏ماه و‎ 1 > void in out port (void) 2 ‘unsigned char x; x=PINA; PORTB=x; 0

صفحه 79:
7segment

صفحه 80:
Common Anode

صفحه 81:
Common Cathode

صفحه 82:
Example-4 #برنامه ای بنویسید که اعداد ۰ تا ‎٩‏ را بر روی 7560106 آند مشترک به فاصله یک ثانیه نشان دهد . #include <mega32.h> #include <delay.h> unsigned char seven seg code(unsigned char num) ; void main(void) 1 unsigned char i; DDRA=Oxff; while (1) { for (i=0;i<10;i++) PORTA=seven_seg code(i); delay_ms (1060) ; Mz i

صفحه 83:
Coding ‏نت ل‎ anaes وه 1 1 1 1 1 1 3 ° 1 2 1 0 1 ° ° 1 ° ° om) 3 1 ° 1 1 3 3 0 0 ۳ 4 1 ° ° 1 1 3 ° 1 ‏لد‎ ‎5 1 ° ° 1 3 3 1 0 eo 6 2 ° ° ° ۰ ۰ 1 a ‏ان‎ ‎7 1 1 1 1 1 3 ° ° ‘ore 8 1 ۰ ° ° ° 3 ۰ ° 2 ات

صفحه 84:
Example-4 unsigned char seven_seg_code(unsigned char num) 1 unsigned char out; switch (num) { case O:out=0xc0; break; case 1:out=0xf9; break; case 2:out=0xa4; break; case 3:0ut=0xb0;break; case case case case case case 1 return out; 1

صفحه 85:
Owe °¥- مثال قب © مثال قبا ‎ly 7447‏ Exercise ‏ل را برای یک 75860 کاتد مشترک پیاده سازی کنید.‎ ل را با استفاده از ‎7segment .4 BCD Ja..IC‏ اده سازی کنید. ۴ با استفاده از 75601۳0610 کاتد مشترک و ۰7448 10 یک شمارنده ۰ قا ‎٩‏ با فاصله زمانی. ۱ ثانیه بسازید. ©ه- برنامه ای بنویسید که عددی را از پورت 3 خوانده و برروی 7560 نمایش دهد. #ع- یک شمارنده ۰ تا ‎۹٩‏ با فاصله زمانی ۱ ثانیه بسازید

صفحه 86:
Double 7Segment

صفحه 87:

صفحه 88:
LCD

صفحه 89:
LCD1 ۱۷۵16

صفحه 90:
OV (GND) Power supply for logic circuit and LCD (+4. 5V~+5. 50 Bias voltage level for LCD driving Register select input When RS= “High, data register is selected When RS= “Low”, instruction register is selected -Read/Write selection input When RW= “High”, read operation When RW= “Low”, write operation Start enable signal to read or write the data DBO-DB3, in 8-bit bus mode, used as low order bi- directional data bus During 4-bit bus mode, open these pins DB4-DB7, in 8-bit bus mode, used as high order bi- directional data bus. In case of 4-bit bus mode, used. as both high and low order DB? used for Busy Flag output backlight anode backlight cathode Power supply Power supply LCD Supply Voltage Register select Read/Write Read Write enable Data bus 0-7 RW DBO DBL DB2 DB3 24 DBS 6 DB7

صفحه 91:
۲ لق بس لقد ‎aa‏ لك PADADOD 2۸۱۸۵6۱ PAQADCZ 4 paaapca ‏ومس ليد‎ PASIADCS ‏معممويع لكد‎ ‏همع لد‎ موسو لت ۲ لیم مس لت me ‏له‎ ‏رس‎ ‎Berson ATMEGATS 10% 10k

صفحه 92:
Initialization /* the LCD module is connected to PORTC */ #asm + equ __lcd_port=0x15 #endasm /* now you can include the LCD Functions */ #include <lcd. h> Led_init(20);

صفحه 93:
PORT ADDRESS $1B ($38) PORTA $1A ($3A) DDRA $19 ($39) PINA $18 ($38) PORTB $47 ($37) DDRB. $16 ($36) PINB $45 (635) PORTC. $44 (634) DDR. $13 ($33) PING $42 ($32) PORTD. $11 ($31) DDRD $10 ($30) PIND

صفحه 94:
-CD Configuration With CodeWizard 7 He teh USART | Ariog Coast ADE | SPI vc ۱ ‏مه‎ ‏وت‎ | Pate | Enamaliea | Tine LCD. | eeanged | Poot ‏متمد‎ caret fPoRTa =] ‏ناسمه‎ 87 PORT 80-88 LCD Fing) PORT AK 1-AD LCD Pins) PORT 3t2-EN [LED Fing) PORT Bk? PORT 304-3046۵ Pitt) PORT 8k5-OBSILCD Pr12) PORT BRB -OBG(L.CD Pr 13) PORT St 7-OB7(LCD Pr 14)

صفحه 95:
Icd.h - High Level unsigned char Icd_init(unsigned char lcd_columns) void lcd_clear(void) void lcd_gotoxy(unsigned char x, unsigned char y) void lcd_putchar(char c) void lcd_puts(char *str) void lcd_putsf(char flash *str)

صفحه 96:
unsigned char Icd_init(unsigned char lcd_columns) Example: lcd_init(16)

صفحه 97:
Owe void lcd_clear(void) صفحه ال سی دی را پاک می کند void lcd_gotoxy(unsigned char x, unsigned char y) مکان نما را به سطر و ستون دلخواه می برد ‎Lcd_gotoxy(4,2)‏

صفحه 98:
void lcd_putchar(char c) Example : Icd_putchar(‘a'); void lcd_putsf(char flash *str) Icd_putsf(” Hello World");

صفحه 99:
void lcd_puts(char *str) Example: sprintf(buffer, “tempreture= %d”, temp); lcd_puts(buffer);

صفحه 100:
۰ ۱ 5 و یجنم کاراکت ع8 را بر ووی یک 2316 ‎LOD‏ تمایش دهید. #include <mega16.h> 9 -7 xample و در سطر دوم ستون اول عبارت asm ‘equ _Icd_port=0x1B ;PORTA. #endasm #include <led.h> #include <delay-h> void main(void) { led_init(16); while (1) 1 Ied_clear(); led_gotoxy(5,0); Ied_putchar(‘a’); led_gotoxy(0,1); Icd_putsf("CodeVisionAVR"); delay_ms(200); 5 3

صفحه 101:
xample-8 ابعى بنويسيد كه بصورت روان كلمه 17151011 00016) را بر روى (1:)001 نمايش دهد. ‎include <megal6.h>‏ ‎i1Alphanumerie LCD Module functions‏ ‎asm‏ ‘equ _lod_port=Ox1B ;PORTA endasm #include <lod.h> Pinclude <delay.h> ‘void main(votd) 1 ints Ted init(16); while (1) { for (I= 0;1<7:i++) 1 ۳ Jed_gotoxy(,0); Icd_putsf("CodeVisios delay_ms(400); 1 1

صفحه 102:
PULL UP PUD DDxn | PORTxn | (in SFIOR) vo Pull-up | Comment 0 0 x Input No ‘Tri-state (Hi-Z) Pxn will source current if ext. pulled: 1 0 Input | Yes | low. 1 1 Input No | Tristate (Hi-Z) 1 0 x Output | No | Output Low (Sink) 1 1 x Output | No | Output High (Source) a a8 2 # ‏اه ةق‎ 1 & [aor] SS ‏دمن‎ EN Intial value ‏و‎ 3 3 9 ۰ 9 ۰ ۰

صفحه 103:
example5 © برنامه ای بنویسید که پین پنجم پورت ۸ را ‎PULL UP‏ 09,5 و ورودی آن را بخواند چنانچه ورودی صفر شد یک 160 را روشن نماید. #include <mega32.h> void main(void) PORTA.0=0 SFIOR=0x09; white (1) { PORTA.0=0; 2

صفحه 104:
اوآ

صفحه 105:

صفحه 106:
تلمع ‎Ola‏

صفحه 107:
a o ca 2ج a1 Rt R2 R3 94 PCOISCL PCUSDA PC2TOK (5 PC4iTDO PCSITD) PCBTOSC! PCHTOSC? ۴۵0۳۵ POUTXO PO2ANTO POSMNT1 PD4/OC1B ‏ا‎ ‎۴۵۵/۴ ‎۳0002 ACC AREF Ut RESET ml (6۲۸1 ‏اعد‎ 2 40 ۳۸۵ PAIIADCI PA2ADC? PABADC3 PA#ADC4 PASIADCS PABIADCB PATIADC? PBOXCKITO PBITI PB2/INT2IAIND PB3OCDIAIN' PB4SS PBSMOSI PBGMISO PBTISCK ATMEGA32

صفحه 108:
Initialization Is key pressed? Find key Is Key released 2

صفحه 109:
Initialization void initial_keypad_port() SFIOR=SFIORS&OXFB; 1

صفحه 110:
unsigned char key, butnum; int s; unsigned char keytbl[16]={Oxee, Oxed, Oxeb, Oxe7, Oxde, Oxdd, Oxdb, 0xd7, Oxbe, Oxbd, Oxbb, 0xb7, 0x7e, 0x7d, 0x7b, 0x77}; DDRC = Ox0f; PORTC = Oxf0; delay_us(5); key = PINC; DDRC = Oxf0; PORTC = OxOf; delay_us(5); key = key | PINC;

صفحه 111:
if (key ! { for (butnum=0; butnum<16; butnum++) { if (keytbl[butnum]==key) break; }

صفحه 112:
Example-9 * برنامه اي بنویسید که عددي را از 16617120 خوانده برروي 7960نمایش دهد.

صفحه 113:
#include<mega16.h> #include<delay.h> int key(); display(int x); int a; main() { DDRB=Oxff; a=key(); display(a); }

صفحه 114:
Oxdd, Oxdb, 0xd7, Oxbe, unsigned char key, butnum; int s; unsigned char keytbl[16]={Oxee, Oxed, Oxeb, Oxe7, Oxde, id, Oxbb, Oxb7, Ox7e, Ox7d, 6x7b, 0x77}; DDRC = OxOf; PORTC = Oxf0; delay_us(5); key = PINC; DDRC = Oxf0; PORTC = Ox0f; delay_us(5); key = key | PINC; if (key != Oxff) { for (butnum=0; butnum<16; butnum++) if (keytbl[butnum]==key) break; 1 s=butnum; 1 else s=17; return s;

صفحه 115:
display(int x) { char str[16]= {0x3F,0x06,0x5B,0x4F, 0x66, 0x6D,0x7D, oe Ox6F,0x77,0x7C,0x39,0x5E,0x79, x 7 PORTB=str[x]; }

صفحه 116:
نامه با طورى دهيد كه عدد را (01).آنما دهد ۱ بالا را 5 ‎PASS SY); 1 0 oe‏ را ‎pay‏

Firsrt Session منابع : ‏منابع موجود در www.atmel.com ‏مرجع كامل ميكروكنترلرهاي - AVRانتشارات نص -محمد مهدي پرتوي فر و .. ‏ميكروكنترلرهاي AVRو كاربردهاي آنها -انتشارات نص -امير ره افروز ‏نرم افزارها : ‏CodeVisionAVR ‏Proteus ‏AVR Studio ميان ترم 5 :نمره ‏تمرين 3 :نمره ‏پروژه 3 :نمره ‏پايان ترم 10 :نمره Introduction ATMEL 8 bit Microcontroller Families Tiny 90S (CLASSIC) Mega LCD AVR Execute One Instruction Per Cycle (MIPS) جایگزینی تراشه های قدیمی تراشه قدیمی جایگزین مناسب AT90S2313 AT90S2323 AT90S4433 AT90S8515 ATMEGA103 ATMEGA161 ATMEGA163 ATMEGA323 ATTINY2313 ATTINY25 ATMEGA8 ATMEGA8515 ATMEGA128 ATMEGA162 ATMEGA16 ATMEGA32 نام میکروکنترلر از دو یا سه قسمت تشکیل شده است ‏ATMEGA 16 ‏ATMEGA 8 ‏ATTINY 28L ‏ATTINY 28 V قسمت اول نوع و سری میکرو و قسمت دوم حافظه flashرا بیان می کند. قسمت سوم مخفف low powerو very low powerاست .که در جدول زیر شرح داده شده است: نام میکروکنترلر میکروکنترلر AVRبدون پسوند میکروکنترلر AVRبا پسوند L میکروکنترلر AVRبا پسوندV محدوده ولتاژ تغذیه فرکانس قابل قبول کریستال 4-5.5 v 2.7-5.5 v 1.8-5.5 v 0-16 MHZ 0-8 MHZ 0-4 MHZ PDIP-Package – Mega32 TQFP/MLF Package – Mega32 Architecture RISC: Reduced Instruction Set Computer ==> AVR CISC: Complex Instruction Set Computer Memory Types Data SRAM (Static Random Access Memory) EEPROM (Electrically Erasable Programmable Read Only Memo) Program Flash Program Memory Flash (for mega32) 32K Bytes of In-System Self- Programmable Flash Endurance: 10,000 Write/Erase Cycles Data Memories SRAM (for mega32) 2K Byte Internal SRAM- Register file, I/O Register, Data Address. EEPROM (for mega32) 1024 Bytes EEPROM Endurance: 100,000 Write/Erase Cycles Program Counter (PC) Instruction Register (IR) Instruction Decoder (ID) X-Y-Z Registers ALU فیوز بیت ها قسمتی از حافظه میکرو کنترلر ها هستند که امکاناتی را در اختیار کاربر قرار می دهند و با پاک شدن حافظه میکرو تنظیمات آنها از بین نمی رود Clock Source Clock Sources PDIP-Package – Mega32 External Crystal Oscillator Low Frequency Crystal Oscillator External RC Oscillator Calibrated Internal RC Oscillator External Clock Timer/Counter Oscillator For AVR microcontrollers with Timer/Counter Oscillator pins (TOSC1 and TOSC2), the crystal is connected directly between the pins. No external capacitors are needed. The Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external clock source to TOSC1 is not recommended. Clock Distribution Second Session SRAM Management SRAM Data Memory (mega32) Programming With CodevisionAVR Prototype     #include <mega32.h> global definition main() {  local variable;  statements;  }  function1()  {  local variable;  Statements;  }  function2()  {  local variable;  Statements;  } Prototype چون میکرو همیشه باید در حال فعالیت باشد ،درون تابع mainیک حلقه دائم قرار داده می شود. > #include <mega32.h ‏ global definition )( main { ; local variable دستوراتی که باید یک بار اجرا شوند  ) While (1 { دستورات و کدهای اصلی برنامه که دائما اجرا می شوند  } } نکاتی در مورد برنامه نویسی خط اول همیشه دستور فراخوانی فایل های حاوی توابع headerاست در انتهای هر عبارت یک سمی کالن قرار داده می شود } و { در ابتدا و انتهای هر حلقه ،عبارت شرطی و یا بلوک قرار داده می شود از //یا ( */و * )/برای نوشتن توضیح در برنامه استفاده می شود Data Type  Type  bit  char  unsigned char  signed char  int  short int  unsigned int  signed int  long int  unsigned long int  signed long int  float  double 16 Size (Bits) 1 8 8 8 16 -32768 16 16 32 32 32 32 32 Range 0,1 -128 to 127 0 to 255 -128 to 127 -32768 to 32767 to 32767 0 to 65535 -32768 to 32767 -2147483648 to 2147483647 0 to 4294967295 -2147483648 to 2147483647 ±1.175e-38 to ±3.402e38 ±1.175e-38 to ±3.402e38 متغیر ها و ثابت ها ابتدا باید معرفی شوند نام متغیر ;temp ;str ;a نوع متغیر ‏int ‏int ‏char ‏float ‏int حافظVه مورد نیاز برای متغیر ‏eeprom ‏flash ;temp=10 ‏eeprom ;b=30 .نام متغیر ها می تواند ترکیبی از حروف و اعداد باشد ،فقط نام متغیر نباید با عدد شروع شود Constants flash int x=123; const char y=‘a’; #define C 100; آرایه ها تعدادی متغیر دلخواه از یک نوع و یک نام که با اندیس Vهای شماره دار از هم جدا هستند ];int str[10 }int i[3]= {2,5,6 رشته(:)string به آرایه هایی که حروف اسکی را درون خود نگه می دارند ،رشته می گوییم. ;”Char t[5]= “temp bit Data type bit x,y; x=1; from R2.0 to R14.7  max=104 Set in following menu: Project/Configure/C Compiler/Code Generation/Bit Variable size Operators + * % -== ! < <= & | ^ << -= /= &= ^= >>= / ++ = ~ != > >= && || ? >> += %= *= |= <<= 3th Session Decision and loops if –else while do-while for Switch - case توابع و فرم تابع نویسی نVVام تVVVابVع ی نVVوع دادVه VخVرVوجVی )دادVه Vهایورود( V } تعریف متغیر های محلی دستورات بازگرداندن مقدار خروجی در صورت وجود { مثال: برنامه ای بنویسید که عدد ورودی را به توان 3برساند )func( int x ‏long int { ;long int s ;s=x*x*x ;return s } جایگاه نوشتن توابع :توابع را در دو جا می توان نوشت -1قبل از تابع main -2در زیر کل برنامه >include<header# )Void func(void { دستورات { )(Void main { دستورات { >include<header# ;Void func(void) Void main(void) { دستورات While(1) { دستورات } } )(Void func { دستورات } Libraries math.h stdio.h delay.h Mega16.h And … PORTS Direction Input= 0 DDRA.0=0; // PA.0 input DDRA.5=1; // PA.5 output DDRC=0xff ; // PORTC Output=1 Output Latch Input register Example-1 . را بنویسد0x28 مقدارB برنامه ای بنویسد که بر روی پورت #include <mega32.h> void main(void) { DDRB=0xFF; while (1) { PORTB=0x28; }; } Example-2 تابعي بنويسيد كه يك چراغ راهنمايي را بصورت زير پياده سازي' كند: ‏سبز 15 :ثانيه ‏زرد3 :ثانيه ‏قرمز15 :ثانيه ------------------------------------------------------------------نام تابع trafficsignal : ورودي' :ندارد خروجي :ندارد قرمز PORTA.2 : زردPORTA.1 : سبز PORTA.0 : Example-2 Header file : delay.h void delay_us(unsigned int n); void delay_ms(unsigned int n); delay_us(100) <== ميكروثانيه100 تاخير: مثال delay_ms(5000) < == ثانيه5 تاخير: مثال Example-2 #include <mega32.h> #include <delay.h> void traficsignal(void); void main(void) { DDRA=0x07; while (1) { traficsignal(); }; } void traficsignal(void) { PORTA.0=1;PORTA.1=0;PORTA.2=0; delay_ms(15000); PORTA.0=0;PORTA.1=1;PORTA.2=0; delay_ms(3000); PORTA.0=0;PORTA.1=0;PORTA.2=1; delay_ms(15000); } Exercise-1 - 1تابعي بنويسد كه يك چراغ راهنمايي را با دريافت تاخيرها توسط برنامه زير ،راه اندازي كند. ‏سبز Gdelay :ثانيه ‏زرد Ydelay :ثانيه ‏قرمز Rdelay :ثانيه ----------------------------------- Exercise-1 #include <mega32.h> void traficsignal(int gdelay,int ydeay,int rdelay); void main(void) { DDRA=0x07; while (1) { traficsignal(x,y,z); }; } void traficsignal(int gdelay, int ydelay, int rdelay) { PORTA.0=1;PORTA.1=0;PORTA.2=0; delay_ms(gdelay); PORTA.0=0;PORTA.1=1;PORTA.2=0; delay_ms(ydelay); PORTA.0=0;PORTA.1=0;PORTA.2=1; delay_ms(rdelay); } Example-3 خوانده و بر روی پورتA تابعی بنویسید که یک عدد بی عالمت را از پورت . نشان دهدB #include <mega32.h> void in_out_port(void); void main(void) { DDRA=0x00; DDRB=0xff; while (1) { in_out_port(); }; } void in_out_port(void) { unsigned char x; x=PINA; PORTB=x; } 7segment Common Anode Common Cathode Example-4 آند7segment را بر روي9 ت'ا0 برنام'ه ای بنویس'ید که اعداد . مشترك به فاصله يك ثانيه نشان دهد #include <mega32.h> #include <delay.h> unsigned char seven_seg_code(unsigned char num); void main(void) { unsigned char i; DDRA=0xff; while (1) { for (i=0;i<10;i++) { PORTA=seven_seg_code(i); delay_ms(1000); } }; } Coding num h g f e d c b a 0 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 2 1 0 1 0 0 1 0 0 3 1 0 1 1 0 0 0 0 4 1 0 0 1 1 0 0 1 5 1 0 0 1 0 0 1 0 6 1 0 0 0 0 0 1 1 7 1 1 1 1 1 0 0 0 8 1 0 0 0 0 0 0 0 9 1 0 0 1 1 0 0 0 code 0xC0 0xF9 0xA4 0xB0 0x99 0x92 0x83 0xF8 0x80 0x98 Example-4 unsigned char seven_seg_code(unsigned char num) { unsigned char out; switch(num) { case 0:out=0xc0;break; case 1:out=0xf9;break; case 2:out=0xa4;break; case 3:out=0xb0;break; case 4:out=0x99;break; case 5:out=0x92;break; case 6:out=0x83;break; case 7:out=0xf8;break; case 8:out=0x80;break; case 9:out=0x98;break; } return out; } Exercise -2مثال قبل را براي يك 7segكاتد مشترك پياده سازي كنيد. -3مثال قبل را با استفاده از ICمبدل BCDبه 7segment ، 7447پياده سازي كنيد. -4با استفاده از 7segmentكاتد مشترك و IC ، 7448يك شمارنده 0تا 9با فاصله زماني 1ثانيه بساز'يد. -5برنامه اي بنويسيد كه عددي را از پورت Bخوانده و برروي 7seg نمايش دهد. -6يك شمارنده 0تا 99با فاصله زماني 1ثانيه بسازيد Double 7Segment 4th Session LCD شماره پین نشانه نام توصیف 1 VSS Power supply 0V (GND) 2 VDD Power supply Power supply for logic circuit and LCD (+4. 5V~+5. 5V) 3 VEE LCD Supply Voltage Bias voltage level for LCD driving Register select input 4 RS Register select .When RS= “High”, data register is selected .When RS= “Low”, instruction register is selected .Read/Write selection input 5 RW Read/Write 6 E Read Write enable 7 8 9 10 DB0 DB1 DB2 DB3 11 12 13 14 DB4 DB5 DB6 DB7 15 A back-light anode 16 K back-light cathode Data bus 0-7 .When RW= “High”, read operation .When RW= “Low”, write operation Start enable signal to read or write the data DB0-DB3, in 8-bit bus mode, used as low order bi.directional data bus During 4-bit bus mode, open these pins DB4-DB7, in 8-bit bus mode, used as high order bidirectional data bus. In case of 4-bit bus mode, used .as both high and low order DB7 used for Busy Flag output Initialization /* the LCD module is connected to PORTC */ #asm . equ __lcd_port=0x15 #endasm /* now you can include the LCD Functions */ #include <lcd. h> Lcd_init(20); PORT ADDRESS LCD Configuration With CodeWizard lcd.h – High Level unsigned char lcd_init(unsigned char lcd_columns) void lcd_clear(void) void lcd_gotoxy(unsigned char x, unsigned char y) void lcd_putchar(char c) void lcd_puts(char *str) void lcd_putsf(char flash *str) unsigned char lcd_init(unsigned char lcd_columns) Example: lcd_init(16) void lcd_clear(void) صفحه ال سی دی را پاک می کند void lcd_gotoxy(unsigned char x, unsigned char y) مکان نما را به سطر و ستون دلخواه می برد Lcd_gotoxy(4,2) void lcd_putchar(char c) Example : lcd_putchar('a'); void lcd_putsf(char flash *str) lcd_putsf(”Hello World"); void lcd_puts(char *str) Example: sprintf(buffer, “tempreture= %d”, temp); lcd_puts(buffer); Example - 7 ’ و در س''طر دوم ستون اول عبارتa‘ در س''طر اول س''تون پنج''م كاراكت''ر . نمايش دهيدLCD 2x16 ” را بر روي يكCodeVisionAVR“  #include <mega16.h>        #asm .equ __lcd_port=0x1B ;PORTA #endasm #include <lcd.h> #include <delay.h> void main(void) {  lcd_init(16);           while (1) { lcd_clear(); lcd_gotoxy(5,0); lcd_putchar('a'); lcd_gotoxy(0,1); lcd_putsf("CodeVisionAVR"); delay_ms(200); }; } Example-8            . نمايش دهدLCD را بر رويCodeVision تابعي بنويسيد كه بصورت روان كلمه #include <mega16.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x1B ;PORTA #endasm #include <lcd.h> #include <delay.h> void main(void) { int i; lcd_init(16);  while (1)  {  for (i=0;i<7;i++)  {  lcd_clear();  lcd_gotoxy(i,0);  lcd_putsf("CodeVision");  delay_ms(400);  }  };  } PULL UP example5          كرده و ورودي آن را بخواند چنانچه ورودي صفر شدpull up راA برنامه اي بنويسيد كه پين پنجم پورت . را روشن نمايدled يك #include <mega32.h> void main(void) { bit x; DDRA.5=0; PORTA.5=1; DDRA.0=1; PORTA.0=0; SFIOR=0x00;  while (1)  {  x=PINA.5;  if (x==0)  PORTA.0=1;  else  PORTA.0=0;  };  }  Keypad Initialization void initial_keypad_port() { SFIOR=SFIOR&0xFB; } unsigned char key, butnum; int s; unsigned char keytbl[16]={0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb, 0xb7, 0x7e, 0x7d, 0x7b, 0x77}; DDRC = 0x0f; PORTC = 0xf0; delay_us(5); key = PINC; DDRC = 0xf0; PORTC = 0x0f; delay_us(5); key = key | PINC; if (key != 0xff) { for (butnum=0; butnum<16; butnum++) { if (keytbl[butnum]==key) break; } ٍExample-9 برنام!ه اي بنويس!يد كه عددي را از keypadخوانده برروي 7segنمايش دهد. #include<mega16.h> #include<delay.h> int key(); display(int x); int a; main() { DDRB=0xff; a=key(); display(a); } int key() { unsigned char key, butnum; int s; unsigned char keytbl[16]={0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb, 0xb7, 0x7e, 0x7d, 0x7b, 0x77}; DDRC = 0x0f; PORTC = 0xf0; delay_us(5); key = PINC; DDRC = 0xf0; PORTC = 0x0f; delay_us(5); key = key | PINC; if (key != 0xff) { for (butnum=0; butnum<16; butnum++) { if (keytbl[butnum]==key) break; } s=butnum; } else s=17; return s; } display(int x) { char str[16]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D, 0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79, 0x71}; PORTB=str[x]; } برنامه باال را طوری تغییر دهید که عدد را LCDنمایش دهد بر روی یک

51,000 تومان