508
DI HALT AVR. Учебный курс. v. 1.1 Компиляция Вейселя Артема СПб, 2012

AVR. Учебный курс. - paulfertser.infopaulfertser.info/AVR_DI_HALT.pdf · 4 avr. Учебный курс. Постановка задачи Этот пост можно

  • Upload
    ledat

  • View
    523

  • Download
    31

Embed Size (px)

Citation preview

  • 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 :

    , .

    , .

    , .

    , .

    , . . ,