Учебный курс Технологии и средства разработки корпоративных систем
AVR. Учебный курс. - paulfertser.infopaulfertser.info/AVR_DI_HALT.pdf · 4 avr....
Transcript of AVR. Учебный курс. - paulfertser.infopaulfertser.info/AVR_DI_HALT.pdf · 4 avr....
-
DI HALT
AVR. .
v. 1.1
, 2012
-
2
AVR. . ........................................................................................ 4
AVR. . . . ........................................... 5
C vs Assembler ................................................................................................................................................. 8
AVR. . ..................................................................................................... 10
AVR Studio ....................................................................................................................................... 15
AVR Studio Linux. ..................................................................................................................................... 23
AVR. . . .......................................................................... 27
AVR. . ........................................................................................ 35
AVR. . ............................................................ 47
AVR. . ............................................................... 60
AVR. . .............................................. 65
AVR. . .............................................................................. 69
AVR. . ..................................................................... 80
AVR. . ...................................................................................... 80
AVR. . . . .................................................. 84
AVR. . . . ................................. 85
AVR. . . ............................. 92
AVR. . . .................................................. 96
AVR. . . . .................................................... 100
AVR. . . ........................................................ 105
AVR. . ................................................ 107
AVR. . - ............................. 110
. . ............................................................................. 117
AVR. . .................................................................. 128
SinaProg AVRDude ............................................................... 131
AVR. . Bootloader .............................................................. 137
PinboardProg PinBoard ISP ............................................................................................................................................... 145
AVR. . FUSE ........................................................................ 150
PinBoard v1.1..................................................................................................... 154
AVR. . -. ............................. 167
AVR Studio HAPSim ............................................................................................................................... 181
AVR. . ........................................................................................................... 182
AVR. . ............................................................................... 188
AVR. . UART ........................................................... 201
UART ............................................................................................................ 213
AVR. . EEPROM ........................................................................ 213
AVR. . ............................... 214
AVR. . ................................................................................. 217
AVR. . UART. ................................................................................................................................................. 220
. ......................................... 226
. ..................................... 227
AVR. . . 1 ................................................................. 230
AVR. . . 2 ................................................................. 234
AVR. . . 3 ................................................................. 236
AVR. . . 4 ................................................................. 239
AVR. . ....................................... 244
AVR. . AVR LCD HD44780 ............................ 248
-
3
AVR. . LCD HD44780 ........................................ 254
AVR. . ................................................................................. 257
AVR. . .............................. 259
AVR JTAG ICE ......................................................................... 264
AVR. . . 1 ................................................ 272
AVR. . . 2. ............................................... 285
AVR. . . 3 ................................................ 292
AVR. . . 4 ................................................ 301
AVR. . . . .............. 304
AVR. . . , ........................................................................................................................................................ 310
AVR toolchain ........................................................................................................... 320
AVR. . .......................................................................... 322
AVR. . 2 ........................................................ 327
AVR. . . 3 ...................................................... 334
AVR. . . 4 ...................................................... 337
AVR. . ..................................................................................... 350
AVR. . ........................................................................ 353
.................................................................................................... 358
.......................................................................................................... 360
USI TWI .............................................. 364
AVR. . AVR TWI IIC (i2c) . 370
AVR. . - .............................................. 386
Bootloadera ............................................................................................................................ 394
AVR. . . ............................................................... 399
................... 404
................................................................................................. 408
- ++ ............................... 415
................................................................................. 443
. 450
AVR. . .......................................................... 471
............................................................................ 477
WG12864 KS0107 ........ 483
FT2232D AVR. JTAG ...................................................................... 497
-
4
AVR. .
, AVR. .
, . . , ATMega16 400 .
, , , - . , . . , , , , , .
- , ,
. , .
, . . , , , . . .
. , .
. , , . , . AVR Studio.
, , . .. . , , .
. , . , . .
, .
, , . , :) . ,
. . , . , , . , . . . ERRATA, . .
. . 21 , 20 , 97
, , , . 13 =)))) .
, , , - .
-
5
, . .
(), () , ()?
, :))) ! , , , , , . , , . :)
. , . . , , . .
AVR Studio - ( . narod.yandex.ru [1]), . .
! ? . , , . , Pinboard [2] .
, , ,
. . , .
, LCD . . AVR -, , . , :)
, . , , , . .
. . , , .
, , LCD -.
. , , .
. . , .
, . , , . , . .
, , =))))
.. ,
. , . , .
AVR. . . .
http://narod.yandex.ru/http://shop.easyelectronics.ru/index.php?productID=147
-
6
, , .
(, - ), ,
, , , , . . .
, , . .. ( 6 ) 1 ( , +5), 0 ( , 0.1 ) .
( ) ( ). , 0 1 , 0 ( ) 0 1024 ( 255, )
, , . . , , ,
, . , .
.
. . , , . MSC-51 MSC-51, , intel 8051
. 51. 8- , , CISC . .. , ( 12 24 , ), , . MSC-51 AT89C51, , , Silicon Laboratories , ,
UARTa USB CAN, , 100 . , 51 . , .
Atmel AVR AVR Atmel. Atmel MSC-51 , AVR. 8- RISC
, RISC , 51, . AVR
, ATMega. , , . LPT . .
Microchip PIC. 8- RISC , , . . , , . PIC AVR, PIC ,
, . PICax , .
? , . , AVR MSC-51, PIC, .
-
7
Starcraft :) ? ? ? ? ,
. . AVR :
1. . , . , PIC. MSC-51 . AT89C51 , ? .
2. . PIC, . , , AVR 30-40 PIC . MSC-51 . , .
3. . . , , . PIC , . ! , . AVR PIC,
. - AtMega16A , .
4. . , AVR . ( ). .. ATTiny13 ATMega64 .
. AVR ( AT90S1200) . . . PIC12/16/18 . 12 ( Tiny AVR), 18 ( Mega AVR) 12 18, .
5. AVR. AVR 130 , Microchip PIC 35. PIC , . , , 35 !. . ? ! , . . ? ? , , ,
? ! . , .
6. . , . , . ? ;)
7. , . , . . AVR ( ) , :))))))
, AVR . ??? . . .
, .
ATmega16 16PI
AT Atmel
Mega . Tiny Xmega ( , ). , , , , . , , 6 20.
16 . . . Mega162 162 , 16 2 16. 88 88, 8 , 8 , 8. 48 168. . , 2313 2 . 313? :) 12 1 . , .
(). , . , V L , 2,7 . . , :) A P AVR PicoPower ..
. ,
-
8
. .. Mega16A
Mega16 . .
16 . 20 ;)
P . . , . P DIP . , , , , . SOIC ( S) TQFP ( A) . .
I . I . U . . .
:
ATMega16A-16PU ( 100-150), , . . , .
ATTiny2313-20SU / . ( 40), . .
ATmega48/88/168 . ( tqfp AVR), ( 100-150), .
ATmega128 . , , . ( 400)
C vs Assembler
, .
. ,
. , , . , , , , .
, , , . , , . .
Assembler+ , . ,
. , , . , , . . , . . , .
C- , , . , , , , ,
. . , , . ,
, AVR, , , . , . , , , .
, , .
, , , . , . ,
-
9
. , . , .. .
,
! , .
overhead. , flash , . , , , 16 , , .
ATTiny 1x , , . .
Assembler+ , , . . . ? , . (
)? , . , , , , , . , . ? ! ? ! ? , . , , , , . ,
, , , . , , ? . .
. , . , , . , .
Assembler- . , , . .
. , . .
+
, . . , , AVR ARM . AVR PIC. , HAL.
, 8 . . . 8-16 , 16 , .
, . .
, , . , , . ,
, , ??? ?!! . , . ( ), .
. ,
-
10
, , . , , .
. , . ? ? . , =)
, ? AVR?
, BascomAVR MicroPASCAL . . , .
, . , . AVR ARM, PIC, STM8 . . , , . .
, , . AVR PIC , , , . , . STM8 Cortex M3 Pascal . .
. . , CodeVision AVR (CVAVR) :
1 PORTB.7 = 1; // 7 B 1
? ! , .
. .. :
1 PORTB |= 1
-
11
. AVR . .
, , :
, , (Flash Programm Memory) - (ALU), ( ) (Program Counter). , .
: , . .
0000 flash ROM. ( ) (Instruction Decoder).
. - , , . . ( ) 1, .
, , .
ALU. , , . ,
, , , ( , ).
-
12
32 .
, . R0,R1,R2 R31. :
R0..R15 , . , , . .. , , . .
R16..R31 , .
R26R31 . , . , , X(R26:R27), Y(R28,R29), Z(R30:R31) .
32 . AVR Tiny12 Tiny11 , 32 .
. 64 4, . , Load Store.
, , , , . Load , Store . .
EEPROM
. . Flash
, ( Read Only), . . , EEPROM . . 100 000, . , , , . AVR, .
. . ALU, RAM, FLASH
, , , . , , . , , .
.
, . AVR, .
. . , , . ? .
-.
UART/USART . . , . .
/ . 100 . , . , AVR. . , .
-
13
. , . . .
I2C(TWI) IIC. . IIC .
SPI , IIC, . -. .
. , , , , >B A
-
14
High Endurance Non-volatile Memory segments
16K Bytes of In-System Self-programmable Flash program memory ( 16 )
512 Bytes EEPROM 8-bit ( 512 )
1K Byte Internal SRAM ( 1, 2 ? ! =) 64 . 640 ! :)
Write/Erase Cycles: 10,000 Flash/100,000 EEPROM Microcontroller ( 10 , 100 . )
Data retention: 20 years at 85C/100 years at 25C(1) ( AVR, 100 )
Optional Boot Code Section with Independent Lock Bits In-System Programming by On-chip Boot Program True Read-While-Write Operation ( . , )
Programming Lock for Software Security In-System ( , )
JTAG (IEEE std. 1149.1 Compliant) Interface Boundary-scan Capabilities According to the JTAG Standard Programmable Extensive On-chip Debug Support Programming of Flash, EEPROM, Fuses, and Lock Bits through the JTAG Interface Flash ( JTAG )
Peripheral Features ( , )
Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes ( 8 , .
One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode ATmega16 ( 16 , )
Real Time Counter with Separate Oscillator ( , )
Four PWM Channels ATmega16L ( )
8-channel, 10-bit ADC ( 10 . )
8 Single-ended Channels ( 8 )
7 Differential Channels in TQFP Package Only (7 . TQFP .. )
2 Differential Channels with Programmable Gain at 1x, 10x, or 200x ( )
Byte-oriented Two-wire Serial Interface ( IIC )
-
15
Programmable Serial USART ( . )
Master/Slave SPI Serial Interface (SPI , )
Programmable Watchdog Timer with Separate On-chip Oscillator ( )
On-chip Analog Comparator ( )
Special Microcontroller Features ( )
Power-on Reset and Programmable Brown-out Detection ( )
Internal Calibrated RC Oscillator ( 20 . ! :) !)
External and Internal Interrupt Sources ( . )
Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby and Extended Standby ( )
I/O and Packages
32 Programmable I/O Lines
40-pin PDIP, 44-lead TQFP, and 44-pad QFN/MLF ( , )
Operating Voltages designs. 2.7 5.5V for ATmega16L 4.5 5.5V for ATmega16 ( . , )
Speed Grades 0 8 MHz for ATmega16L 0 16 MHz for ATmega16 ( . . , )
Power Consumption @ 1 MHz, 3V, and 25C for ATmega16L Active: 1.1 mA Idle Mode: 0.35 mA
Power-down Mode: < 1 A ( . 1 . 10 )
AVR Studio
.
atmel.com [1] AVR Studio. 30 .
, , . AVR Studio, , . , C:\AVR\
, , , D:\Work\AVR 8 , , . DOS, .
http://www.atmel.com/
-
16
, ( , , ) ,
GCC aka WinAVR , , .
. , , , . .
, New Project. .
-
17
: , .
. . :)))))
Finish Next. Next. . Next, :
, AVR Dragon ICE 2,
. . AVR Simulator AVR Simulator2 , . ? FINISH HIM! Finish.
-
18
, . :
[2]
. . , , , . ,
. , , . .
. , .
. .
. Mark ALL . .
/ . . !
. , . :)
. , .
Play .
http://easyelectronics.ru/img/AVR_kurs/Studio/AVRS4.gif
-
19
Stop . .
.
Enter Reset
. , .
Step Into . Step Over , ( , ). Step-Out . , , , Step Out , .
.
BreakPoint . .
.
Watch, , . .
, . .
:
, .. (JTAG STK500) . , .
, ,
1
2
.include "m8def.inc" ; ATMega8
NOP
:) .
, . :
-
20
[3]
I/O View , . I/O View . , . Tree View. . .
Show Bit numbers . . . . . , , .
Processor Processor, .
Program Counter . . , :
1
2
3
4
5
LDI R16,AddresL ; ,
?
LDI R17,AddresH
PUSH R17
PUSH R16 ; ICALL? ! .
RET ; !
http://easyelectronics.ru/img/AVR_kurs/Studio/AVRS6.gif
-
21
PC :)
Stack Pointer . , , . SP 0, , !!!111.
X, Y, Z 26 31, .
Cycle Counter . .
Frequensy . . ? ! . . , , .
Stop Watch ! . . .
. , .
SREG .
32 . ( ). , .
Memory . . , , .
Watch
Watch . , . , . / .
AVR Studio , .
. , . . .
AVR Studio: , . . , . . Debug -> AVR Simulations Options. , ? . . ( Fuse Bits ).
, , . F11, . , , . , . Run to Cursor, . .
BreakPoint . .. , ,
, . . Breakpoint F9, . . , F5 , , . , .
, ? , ? , . . . . , . , , !!! ( Athlon 950) , StopWatch , . 1024, 1. , . . Debug -> New Breakpoint . Programm Breakpoint . , . ;Data Breakpoint .
. , ,
-
22
//. . Location
. ,
. , , - 140 . 140 . 140 140 . , ! Breakpoint and tracepoint. ,
, . , .
, .
AVR Studio , . , : DDR= 0 PORT=1 !!! , AVR Studio
! PIN,
. , . ! . , Debug->Simulation Options Stimuli&Loggin , , . *.sti [ ]:[] :
000000006:01 000000010:02 000000014:03 000000018:04
000000022:05 000000026:06 000000030:07
, , :)))) stimuligenerator_net20 [4], ARV arv.radioliga.com [5] , , . , ( ). :)
.NET , 30 .Net Frame Work .
http://easyelectronics.ru/files/soft/stimuligenerator_net20.exehttp://arv.radioliga.com/
-
23
Message (
) . ( : ).
, . stimuligenerator [4]. , Must Have.
, , , . . UART INT. , ,
RX . :)))))
, . AVR Studio . , , Proteus . , UART . , .
AVR Studio Linux.
, , Atmel IDE OS Windows.
Linux - , . . Windows, ( Win ). Wine.
100%- . . ,
- . , , Windows , .
--, , . , . [1], .
http://easyelectronics.ru/files/soft/stimuligenerator_net20.exehttp://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD
-
24
() Wine . ,
. Wine , .
: http://www.winehq.org/ [2]. . . Wine. , .. , . 1.0.1 ( 2008 ). 1.1.33, 1.1.36 (8 2010 ).
Downloads , . Debian, . Debian -.
. /etc/apt/sources.list ( root):
#echo "deb http://www.lamaresh.net/apt lenny main" >> /etc/apt/sources.list
:
$wget http://www.lamaresh.net/apt/key.gpg
#apt-key add key.gpg
:
#apt-get update
#apt-get install wine
[3] aor_dreamer AVR Freaks.
winetricks:
$wget http://www.kegel.com/wine/winetricks
$bash winetricks
:
- corefonts
- dcom98
- gdiplus
- gecko
- mdac28
- msxml3
- vcrun2005
- allfonts
- fakeie6
( MS) AVR Studio [4] Atmel :
$wine AvrStudio4Setup.exe
( , ):
$wine "~/.wine/drive_c/Program Files/Atmel/AVR Tools/AvrStudio4/AVRStudio.exe"
( [5]).
. AVR Studio STK500 ( HVProg). FT232RL [6], /dev/ttyUSB0. COMx, .
. (root):
http://www.winehq.org/http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=482411#482411http://www.atmel.com/dyn/Products/tools_card.asp?tool_id=2725http://www.atmel.com/dyn/Products/tools_card.asp?tool_id=2725http://picasaweb.google.com/lh/photo/EJ7Sq7pPCnkTnOs1NhCwfw?feat=directlinkhttp://easyelectronics.ru/preobrazovatel-usb-uart-na-ftdi-ft232rl.html
-
25
#ln -s /dev/ttyUSB0 /.wine/dosdevices/com1
/dev/ttyUSB0 (, COM : /dev/ttyS0);
< home_dir> ; com1 Win (, lpt1 ).
/ . ISP , HV . ( JTAG ICE , COM .DI HALT)
, , wine, - , .. .
: http://devmind.livejournal.com/ [7]
AVR. .
.
. . , . MOV Counter,Default_Count MOV R17,R16 R17 Counter, R16 Default_Count. ,
. . ;, //, AVR Studio C , /* */.
.include . , . .include . , , .exit .
.def . , R0, - R16. , .def .
1
2
.def schetchik = R0
.def pomoika = R16
R0 schetchik .
.undef ,
. . .
1 .undef pomoika
.equ .
, . , , , , , ,
- , , . , .equ! , , . , . , . , - , 1/2 = 0, 5/2 = 2
http://devmind.livejournal.com/
-
26
1
2
3
.equ Time = 5
.equ Acelerate = 4
.equ Half_Speed = (Accelerate*Time)/2
. AVR [1] (), (FLASH), EEPROM
, .
.CSEG , . , . , , .
: . , , , .
1
2
3
.CSEG
label: LDI R16,'A'
RJMP label
, label , LDI R16,A
, , . .
.ORG address , .. . . .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.CSEG
.ORG 0x0000
RJMP Start ; .
.ORG INT0addr ; External Interrupt0 Vector Address
RJMP INT0_expection
.ORG INT1addr ; External Interrupt1 Vector Address
RETI
.ORG OC2addr ; Output Compare2 Interrupt Vector Address
RJMP PWM_1
.ORG OVF2addr ; Overflow2 Interrupt Vector Address
RETI
.ORG ICP1addr ;Input Capture1 Interrupt Vector Address
RETI
.ORG 00032 ;
Start: LDI R16,0x54 ;
.db .
.dw .
.dd
.dq .
http://easyelectronics.ru/avr-uchebnyj-kurs-arxitektura.html
-
27
1
2
3
Constant: .db 10 ; 0Ah
Message: .db " "
Words: .dw 10, 11, 12
, 0,
, 000A, 000B, 000. , , , .dw.
.DSEG , . . , , .
.BYTE .
1
2
var1: .BYTE 1
table: .BYTE 10
var1 .
10 table . . , .
.EESEG EEPROM, . , , . flash db, dw, dd, dq.
MACRO . . , , .
1
2
3
4
.MACRO SUBI16 ; Start macro definition
subi @1,low(@0) ; Subtract low byte
sbci @2,high(@0) ; Subtract high byte
.ENDM ; End macro definition
@0, @1, @2 , . .
:
1 SUBI16 0x1234,r16,r17
, .
, .
, , , , .
. .
AVR. . .
, ,
. AVR Studio . , , , .
-
28
Pinboard [1] ATmega16, .
, , AVR . , , , .
AVR Studio ( ) :
:
http://shop.easyelectronics.ru/index.php?productID=147
-
29
[2]
. , . . .
. 130, ( , ) 4. , , . ,
.
. :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.include "m16def.inc" ; ATMega16
;= Start macro.inc ========================================
; , .
;= End macro.inc ========================================
; RAM =====================================================
.DSEG ;
; FLASH ===================================================
.CSEG ;
; EEPROM ==================================================
.ESEG ; EEPROM
. 0 :) .
. , , .
, . , .
. , macro.inc, , . .
http://easyelectronics.ru/img/AVR_kurs/new/ak3.gif
-
30
, .
. .. , .
. .. 0000 0000 . , , . .
PC . . .., , 0000 0100 , 100 FFFF .
, . .CSEG . .
:
1
2
3
4
5
; FLASH ===================================================
.CSEG ;
NOP
NOP
NOP
? ! NOP . , 2 1 .
NOP ( ), .
(Ctrl+F7) / NOP ALT+O . 8. 8? Pinboard [1] 8. . .
. , . , , , AVR . ! .. . . View Memory Alt+4.
Programm. Flash . cols , .
http://shop.easyelectronics.ru/index.php?productID=147
-
31
. , , , . ..
. , , .
0000 NOP. , .
, 0000. , . 0000.
Programm Counter, .
, . F11, ,
1 . ,
-
32
NOP, ? FF . FF ,
invalid opcode, , , NOP, .
(Shift+F5) Program Counter 0000002 NOP. Program Counter , . ? !
. (, , ), , .
JMP 0000001.
1
2
3
4
5
.CSEG ;
NOP
NOP
NOP
JMP 0x000001
JMP, , Program Counter . 0000001.
, Program Counter ( PC) . , JMP , , . .
. , . . , :
OC 94 , 01 00 . .
. , , , , .. ( little-endian).
, AVR RJMP. , PC , PC . :
1
2
3
4
5
6
7
8
.CSEG ;
NOP
NOP
NOP
RJMP PC+2
NOP
NOP
RJMP PC-6
-
33
9 NOP
, , .. RJMP +2. ,
, . PC . ..
1 JMP PC
.
, , . , +/-2047 . . , .
, 2 , . !!! .
, ? , ? ?
. , . C . . .
1
2
3
4
5
6
7
8
9
.CSEG ;
M1: NOP
NOP
NOP
RJMP M2
NOP
M2: NOP
RJMP M1
NOP
, . . ,
. . , , . Low High
,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.CSEG ;
M1: NOP
NOP
LDI ZL,low(M2) ;
LDI ZH,High(M2)
IJMP
NOP
NOP
NOP
M2: NOP
RJMP M1
NOP
LDI ( R16 R31) . , LDI R17,3 R17 3. R30 (ZL)
2, R31 (ZH) . (F11) , R30 R31 ( 31 , .. ,
-
34
). Program Counter Registers.
IJMP . ..
, Z. , X,Y,Z ? .
IJMP 2, . ? RJMP JMP. , .
. switch-case . , .
. ORG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
; FLASH ===================================================
.CSEG ;
NOP
.ORG 0x0010
M1: NOP
NOP
LDI ZL,low(M2) ;
LDI ZH,High(M2)
IJMP
NOP
NOP
NOP
M2: NOP
RJMP M1
NOP
. 0000 NOP (
, . FF FF 00010 .
, ORG , 00010 .
? , , . .
-
35
-, , ( ).
, .
=) , , .
, . , , . , . =)
;))))))) ( , . )
, , , , .
-, X,Y,Z Registers. -, Cycle counter . AVR . Frequency , . -, Stop Watch . . ( ).
, . , ,
. , :))))))
AVR. .
, . .
(EEPROM .. , ):
RAM
ROM , flash,
, , . .
-
36
! ,
. .. 0000 001F , 005F - . , . , 0060 , .
, I/O
- ( 00 3F), . IO/Register OUT IN . :
IN/OUT -
LOAD/STORE RAM
. UDR 0x0C(02) .
1
2
3
4
5
6
7
LDI R18,10 ; R18 10.
OUT UDR,R18 ; ,
; UDR 00
STS 0x2C,R18 ; . Store
; .
. ! - (OUT/IN)
. , .
. , AVR . -. , , ATMega88 ( Mega8) , - 3F.
, . OUT/IN , ?
.
-
37
, . ATMEL
memory mapped . .. , 3F Load/Store.
. m88def.inc - memory mapped.
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
; ***** I/O REGISTER DEFINITIONS *****************************************
; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions
.equ UDR0 = 0xc6 ; MEMORY MAPPED
.equ UBRR0L = 0xc4 ; MEMORY MAPPED
.equ UBRR0H = 0xc5 ; MEMORY MAPPED
.equ UCSR0C = 0xc2 ; MEMORY MAPPED
.equ UCSR0B = 0xc1 ; MEMORY MAPPED
.equ UCSR0A = 0xc0 ; MEMORY MAPPED
,
.equ OSCCAL = 0x66 ; MEMORY MAPPED
.equ PRR = 0x64 ; MEMORY MAPPED
.equ CLKPR = 0x61 ; MEMORY MAPPED
.equ WDTCSR = 0x60 ; MEMORY MAPPED
.equ SREG = 0x3f ;
-
38
IN , , , .
.
, . , , Memory Map. , .
.DSEG ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.include "m16def.inc" ; ATMega16
;= Start macro.inc ===============================
;
;= End macro.inc =================================
; RAM =============================================
.DSEG ;
; FLASH ===========================================
.CSEG ;
; EEPROM ==========================================
.ESEG ; EEPROM
.DSEG . . . ? .
1
2
3
.DSEG
Variables: .byte 3
Variavles2: .byte 2
.byte , . , Variables , Variables2 .
, Atmega16, RAM 00060, :
Variables = 00060 Variables2 = 00063
( ):
1
2
3
4
5
6
0x0060 ## ;Variables
0x0061 ##
0x0062 ##
0x0063 ## ;Variables2
0x0064 ##
0x0065 ## ; Variables4
## . FF. ,
, . ! , . .
, void . .
-
39
. .. . . .
, . .
.ORG ,
, . ORG 0000 , R0 . 16 ORG 00060. - . , SRAM_START .
m16def.inc .
, 100 , .
1
2
3
4
.DSEG
.ORG SRAM_START+100
Variables: .byte 3
, 100.
, . ? . LOAD STORE .
, , .
Store (ST**), Load (LD**).
R16R31, . . Variables, 1. .. Variables++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.DSEG
Variables: .byte 3
Variavles2: .byte 1
.CSEG
; , .
LDS R16, Variables ; Variables R16
LDS R17, Variables+1 ; Variables R17
LDS R18, Variables+2 ; R18
; 1, .. AVR ,
; , . , .
SUBI R16,(-1) ; SUBI , -(- +
SBCI R17,(-1) ; . .
SBCI R18,(-1) ;
STS Variables,R16 ; .
STS Variables+1,R17
STS Variables+2,R18
. .
1 .DSEG
-
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Variables: .byte 3
Variavles2: .byte 1
.CSEG
;
LDI YL,low(Variables)
LDI YH,High(Variables)
; , .
LD R16, Y+ ; Variables R16
LD R17, Y+ ; Variables R17
LD R18, Y+ ; R18
; 1, .. AVR ,
; , . , .
SUBI R16,(-1) ; SUBI , -(- +
SBCI R17,(-1) ; . .
SBCI R18,(-1) ;
ST -Y,R18 ; .
ST -Y,R17 ;
ST -Y,R16
. , 1. 1, .
. / LDD/STD (X,Y,Z). , .
, . , , . , , , , .
? , , , . Jima [1] , , ,
. . :))))
, . ? . . .. , .
, . SP,
SPL SPH. , 2313, SPL
, , , SP , . , .
, :
1
2
3
4
5
LDI R16,Low(RAMEND)
OUT SPL,R16
LDI R16,High(RAMEND)
OUT SPH,R16
RAMEND .
http://jim.pp.ru/?p=3328
-
41
, . PUSH Rn, POP Rn. Rn .
CALL, RCALL, ICALL, RET, RETI , .
- , , .
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
.CSEG ;
LDI R16,Low(RAMEND) ;
OUT SPL,R16
LDI R16,High(RAMEND)
OUT SPH,R16
LDI R17,0 ;
LDI R18,1
LDI R19,2
LDI R20,3
LDI R21,4
LDI R22,5
LDI R23,6
LDI R24,7
LDI R25,8
LDI R26,9
PUSH R17 ;
PUSH R18
PUSH R19
PUSH R20
PUSH R21
PUSH R22
PUSH R23
PUSH R24
PUSH R25
PUSH R26
POP R0 ;
POP R1
POP R2
POP R3
POP R4
POP R5
POP R6
POP R7
POP R8
POP R9
SP. Stack Pointer , Program Counter.
. :
-
42
[2]
. , , . SP . . PUSH :
http://easyelectronics.ru/img/AVR_kurs/new/ak9.gif
-
43
[3]
, POP, . , . ! , . .
http://easyelectronics.ru/img/AVR_kurs/new/ak10.gif
-
44
[4]
, . , . .
?
, (CALL, RCALL, ICALL, RET, RETI), .
, , R17 R16 . ? . , .
1
2
3
4
PUSH R16
PUSH R17
POP R16
POP R17
, .
, . . !
. LDIL LDI low
http://easyelectronics.ru/img/AVR_kurs/new/ak11.gif
-
45
1
2
3
4
5
6
.MACRO LDIL
PUSH R17 ; .
LDI R17,@1 ;
MOV @0,R17 ; .
POP R17 ; .
.ENDM
.
1 LDIL R0,18
, .
, State , , 00450. . , , . 3, , 4 , 5 - 255 . 3 4, 10
3. , , , , , 20, . . - .
, . , - ( ) . , , , .. .
, .
. , , . . - .
. . , . , ( ), . , . .
, , , . ( ) , .
, , , . . , , PUSH POP. , .. , , .
, . . .
. =)))) , PUSH POP, SP, . . ? , :))))
, 86 . .. , , , .
-
46
, SP , . POP , .
AVR ( , , , .
. .
- , .
EEPROM , , , , , .
. , , .
, ? - . , .CSEG , , data , .db, .
DB . DW ( DD DQ).
1 data: .db 12,34,45,23
, data , ,
.
, , . , , 2 4 .
. , .
Load Program Memory
, LPM Rn,Z
Rn Z. , Z , R30 (ZL) R31 (ZH). R30 , R31 .
:
1
2
3
4
5
6
7
8
9
10
11
12
13
LDI ZL,low(data*2) ; , Z
LDI ZH,high(data*2) ; , Z
; - ,
; , .
;
;
LPM R16, Z ; R16
12,
; .
-
47
; , .CSEG
data: .db 12,34,45,23
AVR. .
, . .
, , , UDR , :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
.CSEG
LDI R16,Low(RAMEND) ;
OUT SPL,R16 ; !!!
LDI R16,High(RAMEND)
OUT SPH,R16
.equ Byte = 50
.equ Delay = 20
LDI R16,Byte ;
Start: OUT UDR,R16 ;
LDI R17,Delay ;
M1: DEC R17 ; 1
NOP ;
BRNE M1 ; 0? 0
OUT UDR,R16 ;
LDI R17,Delay ;
M2: DEC R17
NOP
BRNE M2
OUT UDR,R16
LDI R17,Delay
M3: DEC R17
NOP
BRNE M3
RJMP Start ;
.
1
2
3
4
LDI R17,Delay
M2: DEC R17
NOP
BRNE M2
CALL (ICALL, RCALL, CALL)
RET
:
1 .CSEG
-
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
LDI R16,Low(RAMEND) ;
OUT SPL,R16 ; !!!
LDI R16,High(RAMEND)
OUT SPH,R16
.equ Byte = 50
.equ Delay = 20
LDI R16,Byte ;
Start: OUT UDR,R16 ;
RCALL Wait
OUT UDR,R16
RCALL Wait
OUT UDR,R16
RCALL Wait
OUT UDR,R16
RCALL Wait
RJMP Start ; .
Wait: LDI R17,Delay
M1: DEC R17
NOP
BRNE M1
RET
, . ,
. RCALL RET .
, , . R16 UDR RCALL , Wait . , , .
RCALL
-
49
[1]
RCALL , PC = 0000006, (OUT UDR,R16), , 0000007. SP = 0x045F , .
RCALL
http://easyelectronics.ru/img/AVR_kurs/new/ak_1.gif
-
50
[2]
, 0000007, 0x045D, Wait.
, , RET 0000007 OUT UDR,R16
, Wait , . .
? ? Wait , ,
1
2
3
4
5
6
7
8
Wait: LDI R17,Delay
M1: DEC R17
NOP
BRNE M1
PUSH R17 ; , !
RET
=) , . , :)
http://easyelectronics.ru/img/AVR_kurs/new/ak_2.gif
-
51
PUSH R17 00 07, R17 , , , , 00 00 07.
RET , ! RET Programm Counter.
? 00 00, , RCALL.
R17 00, - , . .
, . !!! . . !, RET , .
, . , ? =))) ? , RET , , . !
, , (, , 8080, , AVR):
1
2
3
4
5
6
7
8
9
LDI R17,low(M1)
PUSH R17
LDI R17,High(M1)
PUSH R17
; ...
; , , ,
RET
M1, RJMP M1. IJMP, Z
, . .
, .
, .
. , , . . , .
vs . , , 2 . . - , CALL-RET .
. .
.
, USART , EEPROM .
-
52
. , , , . .
, USART ,
, .. , . .
AVR , , . , USART , , .
, , ( CALL) , , ?
. . . . 16, Pinboard [3] :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
RESET 0x0000 ; Reset Vector
INT0addr 0x0002 ; External Interrupt Request 0
INT1addr 0x0004 ; External Interrupt Request 1
OC2addr 0x0006 ; Timer/Counter2 Compare Match
OVF2addr 0x0008 ; Timer/Counter2 Overflow
ICP1addr 0x000a ; Timer/Counter1 Capture Event
OC1Aaddr 0x000c ; Timer/Counter1 Compare Match A
OC1Baddr 0x000e ; Timer/Counter1 Compare Match B
OVF1addr 0x0010 ; Timer/Counter1 Overflow
OVF0addr 0x0012 ; Timer/Counter0 Overflow
SPIaddr 0x0014 ; Serial Transfer Complete
URXCaddr 0x0016 ; USART, Rx Complete
UDREaddr 0x0018 ; USART Data Register Empty
UTXCaddr 0x001a ; USART, Tx Complete
ADCCaddr 0x001c ; ADC Conversion Complete
ERDYaddr 0x001e ; EEPROM Ready
ACIaddr 0x0020 ; Analog Comparator
TWIaddr 0x0022 ; 2-wire Serial Interface
INT2addr 0x0024 ; External Interrupt Request 2
OC0addr 0x0026 ; Timer/Counter0 Compare Match
SPMRaddr 0x0028 ; Store Program Memory Ready
, .
. , JMP , , .
, ORG .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.CSEG
.ORG $000 ; (RESET)
RJMP Reset
.ORG $002
RETI ; (INT0) External Interrupt Request 0
.ORG $004
RETI ; (INT1) External Interrupt Request 1
.ORG $006
RETI ; (TIMER2 COMP) Timer/Counter2 Compare Match
.ORG $008
RETI ; (TIMER2 OVF) Timer/Counter2 Overflow
.ORG $00A
RETI ; (TIMER1 CAPT) Timer/Counter1 Capture Event
.ORG $00C
http://shop.easyelectronics.ru/index.php?productID=147
-
53
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
RETI ; (TIMER1 COMPA) Timer/Counter1 Compare Match A
.ORG $00E
RETI ; (TIMER1 COMPB) Timer/Counter1 Compare Match B
.ORG $010
RETI ; (TIMER1 OVF) Timer/Counter1 Overflow
.ORG $012
RETI ; (TIMER0 OVF) Timer/Counter0 Overflow
.ORG $014
RETI ; (SPI,STC) Serial Transfer Complete
.ORG $016
RJMP RX_OK ; (USART,RXC) USART, Rx Complete
.ORG $018
RETI ; (USART,UDRE) USART Data Register Empty
.ORG $01A
RETI ; (USART,TXC) USART, Tx Complete
.ORG $01C
RETI ; (ADC) ADC Conversion Complete
.ORG $01E
RETI ; (EE_RDY) EEPROM Ready
.ORG $020
RETI ; (ANA_COMP) Analog Comparator
.ORG $022
RETI ; (TWI) 2-wire Serial Interface
.ORG $024
RETI ; (INT2) External Interrupt Request 2
.ORG $026
RETI ; (TIMER0 COMP) Timer/Counter0 Compare Match
.ORG $028
RETI ; (SPM_RDY) Store Program Memory Ready
.ORG INT_VECTORS_SIZE ;
;----------------------------------------------------------------------
; . , ,
; .
RX_OK: IN R16,UDR ;
RETI ; RETI
;----------------------------------------------------------------------
Reset: LDI R16,Low(RAMEND) ;
OUT SPL,R16 ; !!!
LDI R16,High(RAMEND)
OUT SPH,R16
SEI ;
LDI R17,(1
-
54
RESET. . , SEI, . UCSRB .
USART .
. , , Reset,
1
2
3
4
5
M1: NOP
NOP
NOP
NOP
RJMP M1
. ? !
, . RXC UCSRA, USART. RXC , . , .
F11, , ,
1
2
.ORG $016
RJMP RX_OK ; (USART,RXC) USART, Rx Complete
RX_OK, UDR R17 , RETI.
, .
, , :
-
55
[4]
, .
, . -, SREG ( ) I (interrupt) 0, , , .
1, , .
SEI
CLI (, , DI , , CLI, Z80 ;) )
, . UDR RXCIE (Receive Complete Interrupt Enable)
, , . , .
http://easyelectronics.ru/img/AVR_kurs/new/ak_3.gif
-
56
, , , , .
RETI
. , . ( ) , , , start. , .
, . , , RESET .. .
, . .. , , , . , . :)
, . . . .
, . ( , ).
, , - . , RxC UDR. , RxC
1 IN R16,UDR
. ! ! .
, ?
, I, RETI, , 1. , , RET RETI
! SEI .
. , . . .
? ?
, . , ( ), .
, , . . SEI!!! ? , , . .
. , ,
, , .
-
57
, . , .
- , .
, . , , .
, , , , 95% .
, . .
!!!
, , , . , .
, , . SREG, . .
: USART 10, t (ten ).
1
2
3
4
5
6
7
8
9
10
11
RX_OK:
IN R16,UDR
CPI R16,10
BREQ Ten
RJMP Exit
Ten: LDI R17,'t'
OUT UDR,R17
Exit:
. , , .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
. . .
LPM R18,Z
CPI R18,0
BREQ ExitStr
SUBI R16,65
LSL R16
LDI ZL,Low(Ltrs*2)
LDI ZH,High(Ltrs*2)
ADD ZL,R16
ADC ZH,R1
. . .
, . , :
1 . . .
-
58
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
LPM R18,Z
CPI R18,0
BREQ ExitStr
SUBI R16,65
>>>>>>>>>>> >>>>>>>>>>>
RX_OK:
IN R16,UDR
CPI R16,10
BREQ Ten
RJMP Exit
Ten: LDI R17,'t'
OUT UDR,R17
Exit: RETI
-
59
13
14
15
16
17
18
19
20
21
22
23
Ten: LDI R17,'t'
OUT UDR,R17
; .
;
Exit: POP R17
POP R16
OUT SREG R16
POP R16
RETI ; . .
? , , , .
!!! , , . . , . . ! ! ! .
!
. . , , EEPROM. ?
. ,
, . .
, , , - . ! .
, , , , , .
. , 16 .
-, 16 , . , .
.. .
CLI, SEI.
.
, (), . . , , , - . , .
, , , .
-
60
!!!
, .
, , . , . , , .
( NOP) . .
. :) [5]
AVR. .
AVR ( , , ) SREG.
, . , , SREG .
SREG . Status Register. . 1 0, .
, .
, Z (Zero) 1, .
(Carry , ), , , 255.
.
I . 1 .
T . .
, 32 R0-R31 ( ). BLD Rn,bit BST Rn,bit
H . . 0001 0111 0000 1000, , . .
S . 1 . . S = V XOR N.
V . .
! , , -61 ? ! !
00 61 = 39 ! ! , ? , : 61 + 39 00 !
!!! () .. ( )
. .
http://easyelectronics.ru/img/AVR_kurs/new/old.htm
-
61
N . 7 1, 1.
Z . , . !
. , . Z I. , .
, , .
SE* CL* . , , CLI .
, Instruction Set Summary, .
:
1
2
3
4
5
INC Rd Increment Rd = Rd + 1 Z,N,V
DEC Rd Decrement Rd = Rd 1 Z,N,V
TST Rd Test for Zero or Minus Rd = Rd AND Rd Z,N,V
CLR Rd Clear Register Rd = Rd XOR Rd Z,N,V
SER Rd Set Register Rd = $FF None
INC 1, , , . .
, . ? , -1 +1. 1 = FF. FF+1=1 00 , 1 , 00 ? :)
, , R17 R18
CP (, , Compare). , , R17 R18 , . , , , R17-R18 , R18 R17. , R17 R18. , . CPI Rn,### , ( ) . .
1 CP R17,R18
. BRANCH (). BR**
ATMEL . , ?
. 8, 16 . 8 , 8 . 20 .
1
2
3
4
5
6
7
8
9
10
11
12
BRBC # # SREG=0
BRBS # # SREG=1
BRCS =1
BRCC =0
BREQ Z=1
BRNE Z=0
BRSH =0
BRLO =1
-
62
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
BRMI N=1
BRPL N=0
BRGE S=0
BRLT S=1
BRHC H=0
BRHS H=1
BRTC T=0
BRTS T=1
BRVS V=1
BRVC V=0
BRID I=0
BRIE I=1
, , , , BRCS=BRLO BRCC=BRSH .
BRBS # BRBC # . , #.
:)
131 Powerful Instructions Most Single-clock Cycle Execution . 131 ! 131 , . .
, , , , .
, . - 51 AVR, , .
, (, J** BR** , ).
.
, .
= 1,
= 2,
13,
, R16
1
2
3
4
5
6
7
8
9
10
11
12
CPI R16,1 ; R16 1
BREQ ActionA ; (EQual, Z=1)
; ,
CPI R16,2 ; R16 2
BREQ ActionB ;
; ,
CPI R16,13 ; R16. .. R16-13
BRCS ActionC ; , R16 13
; -
RJMP NoAction ;
-
63
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ActionA: NOP
NOP ;
NOP
RJMP NoAction ; , ActionB
ActionB: NOP
NOP ;
NOP
RJMP NoAction ; , ActionC
ActionC: NOP
NOP ;
NOP
NoAction: NOP
; NOP, , - .
? , :))))) if then switch-case -.
BR*** . 63 . .. . 63.
, , , . , Error out of range . ?
. .. , .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ActionA: NOP
NOP
NOP
RJMP NoAction
NOP ;
; . ..
; RJMP
; ActionB
ActionB: NOP
NOP
NOP
RJMP NoAction
, , :
ActionA: NOP
NOP
NOP
RJMP NoAction
;-----------------------------------
-
64
26
27
28
29
30
31
32
33
Near: JMP FarFar_away
;------------------------------------
ActionB: NOP
NOP
NOP
RJMP NoAction
.. Near, JMP .
, , , CP.
Test & Skip
Branch : . , , Skip . =Clear, .. 0 S=Set, .. 1. S**C . S**S .
SBRC/SBRS
, . , .
:
1
2
3
4
5
6
7
8
9
10
11
12
SBRC R16,3 ; 3 R16 = 0, , NOP
RJMP bit_3_of_R16_Not_Zer0
NOP
SBRS R16,3 ; 3 R16 = 1, , NOP
RJMP bit_3_of_R16_Zer0
NOP
SBIC/SBIS , . ,
. 1F . m16def.inc ( 16, )
:
1
2
3
4
5
6
7
8
9
10
11
12
13
.equ UBRRH = 0x20
.equ UCSRC = 0x20
.equ EEARL = 0x1e
-
65
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
.equ DDRC = 0x14
.equ PINC = 0x13
.equ PORTD = 0x12
.equ DDRD = 0x11
.equ PIND = 0x10
.equ SPDR = 0x0f
.equ SPSR = 0x0e
.equ SPCR = 0x0d
.equ UDR = 0x0c
.equ UCSRA = 0x0b
.equ UCSRB = 0x0a
.equ UBRRL = 0x09
.equ ACSR = 0x08
.equ ADMUX = 0x07
.equ ADCSRA = 0x06
.equ ADCH = 0x05
.equ ADCL = 0x04
.equ TWDR = 0x03
.equ TWAR = 0x02
.equ TWSR = 0x01
.equ TWBR = 0x00
. :))))
! !!! ??? . , . ?
. . , .
, UCSRC. , 1F - . , !
1
2
3
4
5
6
7
8
IN R16, UCSRC ; , .
ANDI R16,1
-
66
? CPI ,
. CPI/BR** . , CPI , BR** . .
. ICALL IJMP. , , . , ( , ) , Z ( Z R30:R31 , ). , . , , , .
1
2
3
4
5
Way0: NOP
Way1: NOP
Way2: NOP
Way3: NOP
Way4: NOP
, .
1 Table: .dw Way0, Way1, Way2, Way3, Way4
. , . ,
, . RJMP
1
2
3
4
5
6
7
RJMP Kudato
; .
Table: .dw Way0, Way1, Way2, Way3, Way4
Kudato: NOP
NOP
() , . . :
1
2
3
4
5
6
7
8
9
10
...
NOP
RET ;
;
Table: .dw Way0, Way1, Way2, Way3, Way4
SomeProc: NOP ;
NOP
...
, Way0Way4.
, dw!!! , , .
, map , . .
R20 , , . R21 , .
.
-
67
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
LSL R20 ; R20 .
; , , 011=3 110=6 ? ;)
; ,
;
; , .
; , .
LDI ZL, low(Table*2) ; .
LDI ZH, High(Table*2) ; .
.
CLR R21 ; R21 - .
ADD ZL, R20 ; .
ADC ZH, R21 ; .
; . R21=0,
; . -
!
; .
;
; .
LPM R20,Z+ ; R20
LPM R21,Z ;
MOVW ZH:ZL,r21:r20 ; Z
/* ? !
. .. 0, Table,
Way0.
Way1, ( ).
, R20 1, LSL 2
Way1 . ? , : */
IJMP ; Way. ?
; :)
, [1]
. .
, (, , ). . ,
, AVR. ,
, AVR , ( Tiny 11/12) . . .
, CPI/BREQ . , . .. , , CPI/BR** .
. .
. ;), .
http://easyelectronics.ru/files/AVR/Haker3.asm
-
68
, . , , :
.
. , , . , .
. .
, :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
BladeUP: NOP
NOP
NOP
NOP
RET
BladeDN: NOP
NOP
NOP
NOP
RET
DriveON: NOP
NOP
NOP
NOP
RET
DriveOFF: NOP
NOP
NOP
NOP
RET
Forward: NOP
NOP
NOP
NOP
RET
Back: NOP
NOP
NOP
NOP
RET
, .
, , .
1 Index: .dw BladeUP, BladeDN, DriveON, DriveOFF, Forward, Back
-
69
. :
1 TaskList: .byte 30
, ( ! !) .
TaskList, , , , , , , .
? . . , , , . , . , .
, . , .
. .. .
, . =) , .
AVR. .
,
, , . if-then-else case-switch. , . , , , . .
if-then-else . :
1
2
3
4
5
6
7
8
9
if (>=B)
{
action_a
}
else
{
action_b
}
next_action
?
, R16,B R17, , , NOP,NOP,NOP. . . ( A B) , .
1
2
3
CP R16,R17 ;
BRCS action_b ; A>=B
;
-
70
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
action_a: NOP ;
NOP
NOP
RJMP next_action ; B
;
; -- .
action_b: NOP ; B
NOP
NOP
next_action: NOP
NOP
NOP
, =B , Z.
- ( =0 =1). , if-then-else (BRCC BRCS), if (>=B) =B.
(), else =1, =B >B C . if (>=B) True BRCS then.
, BRCC (>=B) . A=B BRCC else.
. B:
1
2
3
4
5
6
7
8
9
if (>B)
{
action_a
}
else
{
action_b
}
next_action
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CP R16,R17 ;
BREQ action_b ; ( Z), .
; .
BRCS action_b ; A>B
;
action_a: NOP ;
NOP
NOP
RJMP next_action ; B
;
; -- .
action_b: NOP ; B
NOP
NOP
next_action: NOP
NOP
-
71
21 NOP
? .
:
1
2
3
4
5
6
7
8
9
if (C
-
72
SBI CBI , . :
CBI PORT,7 7 - PORT SBI PORT,6 6 - PORT
, 31 . 16 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
.equ EEARH = 0x1f
.equ EEDR = 0x1d
.equ EECR = 0x1c
.equ PORTA = 0x1b
.equ DDRA = 0x1a
.equ PINA = 0x19
.equ PORTB = 0x18
.equ DDRB = 0x17
.equ PINB = 0x16
.equ PORTC = 0x15
.equ DDRC = 0x14
.equ PINC = 0x13
.equ PORTD = 0x12
.equ DDRD = 0x11
.equ PIND = 0x10
.equ SPDR = 0x0f
.equ SPSR = 0x0e
.equ SPCR = 0x0d
.equ UDR = 0x0c
.equ UCSRA = 0x0b
.equ UCSRB = 0x0a
.equ UBRRL = 0x09
.equ ACSR = 0x08
.equ ADMUX = 0x07
.equ ADCSRA = 0x06
.equ ADCH = 0x05
.equ ADCL = 0x04
.equ TWDR = 0x03
.equ TWAR = 0x02
.equ TWSR = 0x01
.equ TWBR = 0x00
. .
, - ( , ). ?
, , . , ? 1 3 TWCR, , 00001010 .
1 LDI R16,1
-
73
1 IN R16,TWCR
OR. , , . 1 .
1 ORI R16,1
-
74
1 XRI R16,mask,R17
. .. .
, . , .
1
2
3
4
5
6
.MACRO XRI
PUSH R16
LDI R16,@1
EOR @0,R16
POP R16
.ENDM
,
1 XRI R17,Mask
R16, .. .
. , TWSR , TWI. ? AND 11111100 . .
. .
LSR Rn , . LSL Rn , .
.
ROL ROR
, . 9 . .
? , , .
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CLR R18 ; .
LDI R17,9 ;
LDI R16,0xAA ;
CLC ; , .
Loop: DEC R17 ;
BREQ End ; - .
ROL R16 ;
BRCC Loop ; 1 ,
INC R18 ;
RJMP Loop
End: NOP
-
75
, , ( , ).
1
2
ROL R16
BRCS Label ; 7 R16 .
1
2
ROR R16
BRCS Laber ; 0 R16 .
, , .
, 20 .
1
2
3
4
5
6
7
8
9
10
LDI R17,20 ;
Loop: NOP
NOP
NOP
NOP
NOP
DEC R17 ;
BRNE Loop
; ( Z)
, . . , , , , .
. ? , . , .
, . , , .
:
1
2
3
LDI R16, Delay
Loop: DEC R16
BRNE loop
Delay*2 . ( 8) 1.25-7 6.4E-5 . , , , .
, . 2 . , 536 .
, .
1
2
3
4
LDI R16,LowByte ;
LDI R17,MidleByte ;
LDI R18,HighByte
-
76
5
6
7
8
9
loop: SUBI R16,1 ; 1
SBCI R17,0 ;
SBCI R18,0 ;
BRCC Loop ; - .
, 1 , ,
. , R16 , R17 256 , R18 65535 .
256*256*256 . , R31 =) , .. , BRCC 2 .
, , , . .
, . , , .
, . , , , , .
:
,
, . , , , .
.
:
!
? -- , .
( , ):
1
2
3
4
5
6
7
8
9
10
11
12
.DSEG
Counter: .byte 3 ; . .
.CSEG
MainLoop:
Do_One: NOP
Do_Two: NOP
Do_Three: NOP
-
77
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
LDS R16,Counter ;
LDS R17,Counter+1
LDS R18,Counter+2
SUBI R16,1 ; 1
SBCI R17,0 ;
SBCI R18,0 ;
BRCC DoNothing ; ?
; !
YES: NOP ; ,
NOP
NOP
LDI R16,LowByte ;
LDI R17,MidleByte ;
LDI R18,HighByte
DoNothing: STS Counter,R16 ;
STS Counter+1,R17
STS Counter+2,R18
RJMP MainLoop
, Do_one, Do_Two, Do_Three ,
. , ! , .
, . ,
. , .
. , , . . . :)
LCD AVR. , , .
, . .
, LCD .
! :
1
2
3
4
5
6
7
8
9
10
11
CMD_WR: CLI
RCALL BusyWait
CBI CMD_PORT,RS
CBI CMD_PORT,RW
SBI CMD_PORT,E
LCD_PORT_OUT
OUT DATA_PORT,R17
RCALL LCD_Delay
CBI CMD_PORT,E
LCD_PORT_IN
-
78
12
13
SEI
RET
!!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
DATA_WR: CLI
RCALL BusyWait
SBI CMD_PORT,RS
CBI CMD_PORT,RW
SBI CMD_PORT,E
LCD_PORT_OUT
OUT DATA_PORT,R17
RCALL LCD_Delay
CBI CMD_PORT,E
LCD_PORT_IN
SEI
RET
, , !
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CMD_WR: CLI
RCALL BusyWait
CBI CMD_PORT,RS
RJMP WR_END
DATA_WR: CLI
RCALL BusyWait
SBI CMD_PORT,RS
WR_END: CBI CMD_PORT,RW
SBI CMD_PORT,E
LCD_PORT_OUT
OUT DATA_PORT,R17
RCALL LCD_Delay
CBI CMD_PORT,E
LCD_PORT_IN
SEI
RET
!!! ??? ! !!!
, , , LCD.c , , , .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void lcdControlWrite(u08 data)
{
lcdBusyWait();
cbi(LCD_CTRL_PORT, LCD_CTRL_RS);
cbi(LCD_CTRL_PORT, LCD_CTRL_RW);
sbi(LCD_CTRL_PORT, LCD_CTRL_E);
outb(LCD_DATA_DDR, 0xFF);
outb(LCD_DATA_POUT, data);
LCD_DELAY;
LCD_DELAY;
cbi(LCD_CTRL_PORT, LCD_CTRL_E);
outb(LCD_DATA_DDR, 0x00);
outb(LCD_DATA_POUT, 0xFF);
-
79
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
}
void lcdDataWrite(u08 data)
{
lcdBusyWait();
sbi(LCD_CTRL_PORT, LCD_CTRL_RS);
cbi(LCD_CTRL_PORT, LCD_CTRL_RW);
sbi(LCD_CTRL_PORT, LCD_CTRL_E);
outb(LCD_DATA_DDR, 0xFF);
outb(LCD_DATA_POUT, data);
LCD_DELAY;
LCD_DELAY;
cbi(LCD_CTRL_PORT, LCD_CTRL_E);
outb(LCD_DATA_DDR, 0x00);
outb(LCD_DATA_POUT, 0xFF);
}
, .
, , , , .
, , , , .
:
1
2
3
4
5
6
7
8
9
10
void lcdInit()
{
lcdInitHW();
lcdControlWrite(LCD_FUNCTION_DEFAULT);
lcdControlWrite(1
-
80
AVR. .
, 0xFF. , . . , , / - , . , , , , , . .
, , , , . . :
1
2
3
4
5
6
7
8
9
10
11
12
RAM_Flush: LDI ZL,Low(SRAM_START) ;
LDI ZH,High(SRAM_START)
CLR R16 ; R16
Flush: ST Z+,R16 ; 0
CPI ZH,High(RAMEND+1) ; ?
BRNE Flush ; ? !
CPI ZL,Low(RAMEND+1) ; ?
BRNE Flush
CLR ZL ;
CLR ZH
, , , 255 . . , .
1
2
3
4
5
LDI ZL, 30 ;
CLR ZH ;
DEC ZL ;
ST Z, ZH ; 0
BRNE PC-2 ;
Testicq
. , , . .
..
, . 1, , . [1]
AVR. .
. , . .
, , . , .
http://dihalt.ru/operativka.htmlhttp://dihalt.ru/operativka.html
-
81
, , ,
, , .
. .. , .
:
ORG 0000
,
, RETI
, , - . .
, , , .
, . , .
.
, , .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.include "m16def.inc" ; ATMega16
;= Start macro.inc ========================================
.macro OUTI
LDI R16,@1
.if @0 < 0x40
OUT @0,R16
.else
STS @0,R16
.endif
.endm
.macro UOUT
.if @0 < 0x40
OUT @0,@1
.else
STS @0,@1
.endif
.endm
;= End macro.inc =======================================
. .
1
2
3
; RAM ===================================================
.DSEG
; END RAM ===============================================
, , :
1
2
; FLASH ======================================================
.CSEG
-
82
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
.ORG $000 ; (RESET)
RJMP Reset
.ORG $002
RETI ; (INT0) External Interrupt Request 0
.ORG $004
RETI ; (INT1) External Interrupt Request 1
.ORG $006
RETI ; (TIMER2 COMP) Timer/Counter2 Compare Match
.ORG $008
RETI ; (TIMER2 OVF) Timer/Counter2 Overflow
.ORG $00A
RETI ; (TIMER1 CAPT) Timer/Counter1 Capture Event
.ORG $00C
RETI ; (TIMER1 COMPA) Timer/Counter1 Compare Match A
.ORG $00E
RETI ; (TIMER1 COMPB) Timer/Counter1 Compare Match B
.ORG $010
RETI ; (TIMER1 OVF) Timer/Counter1 Overflow
.ORG $012
RETI ; (TIMER0 OVF) Timer/Counter0 Overflow
.ORG $014
RETI ; (SPI,STC) Serial Transfer Complete
.ORG $016
RETI ; (USART,RXC) USART, Rx Complete
.ORG $018
RETI ; (USART,UDRE) USART Data Register Empty
.ORG $01A
RETI ; (USART,TXC) USART, Tx Complete
.ORG $01C
RETI ; (ADC) ADC Conversion Complete
.ORG $01E
RETI ; (EE_RDY) EEPROM Ready
.ORG $020
RETI ; (ANA_COMP) Analog Comparator
.ORG $022
RETI ; (TWI) 2-wire Serial Interface
.ORG $024
RETI ; (INT2) External Interrupt Request 2
.ORG $026
RETI ; (TIMER0 COMP) Timer/Counter0 Compare Match
.ORG $028
RETI ; (SPM_RDY) Store Program Memory Ready
.ORG INT_VECTORS_SIZE ;
,
1
2
; Interrupts ==============================================
; End Interrupts ==========================================
. , , :
1
2
3
4
5
6
7
8
9
10
Reset: LDI R16,Low(RAMEND) ;
OUT SPL,R16 ; !!!
LDI R16,High(RAMEND)
OUT SPH,R16
; Start coreinit.inc
RAM_Flush: LDI ZL,Low(SRAM_START) ;
LDI ZH,High(SRAM_START)
CLR R16 ; R16
-
83
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Flush: ST Z+,R16 ; 0
CPI ZH,High(RAMEND) ; ?
BRNE Flush ; ? !
CPI ZL,Low(RAMEND) ; ?
BRNE Flush
CLR ZL ;
CLR ZH
CLR R0
CLR R1
CLR R2
CLR R3
CLR R4
CLR R5
CLR R6
CLR R7
CLR R8
CLR R9
CLR R10
CLR R11
CLR R12
CLR R13
CLR R14
CLR R15
CLR R16
CLR R17
CLR R18
CLR R19
CLR R20
CLR R21
CLR R22
CLR R23
CLR R24
CLR R25
CLR R26
CLR R27
CLR R28
CLR R29
; End coreinit.inc
inc .
, . . , Internal Hardware Init :)
1
2
3
4
5
6
7
8
9
10
11
; Internal Hardware Init ======================================
; End Internal Hardware Init ===================================
; External Hardware Init ======================================
; End Internal Hardware Init ===================================
; Run ==========================================================
; End Run ======================================================
, , .
1
2
; Main =========================================================
Main:
-
84
3
4
5
JMP Main
; End Main =====================================================
, . ,
. . .
1
2
3
; Procedure ====================================================
; End Procedure ================================================
[1]
AVR. . . .
,
. . , . . API , .
. Serg2x2 Motorola 892051, AVR, , ,
. AVR Copy-Paste.
( , ) . , . , , , .
:
Flash 500 , 400 , .
RAM 20 +, , .
STS LDS, , . , .
. ? :
.
.
, , .
? , , 1, 500, 200. ?
. , . , , , ?
http://easyelectronics.ru/img/AVR_kurs/new/avr_kurs_1.zip
-
85
:
1
3
5
_1: 1. 2 1
_2: 1. 1 1
_3: 2. 4 2
_4: 2. 3 2
_5: 3. 6 5
_6: 3. 5 5
. . . , . , .
Gameland , . , .
[1] . :)
AVR. . . .
[1] .
, . , , , .
http://easyelectronics.ru/files/AVR/HMTR-rtos.rarhttp://easyelectronics.ru/avr-uchebnyj-kurs-operacionnaya-sistema-vvedenie.html
-
86
, , RCALL :
, .
, .
, .
, .
, . . ,