avras2
Transkript
Quick Guide Programování mikrokontrolerů Atmel AVRAS2 #include <m128def.inc> furt: RJMP furt ; furt dokola 2 Preprocessor z Preprocessor directives #define #undef #error #warning #message #if #else #elif #endif #ifdef #ifndef #include #pragma # (empty directive) Preprocesor z z z z víceméně podle C (s nutnými výjimkami) direktivy začínají # operátory # a ## předdefinovaná makra _ _NĚCO_ _ # (stringification) ## (concatenation) 3 4 #pragma - general #pragma – AVR part related #pragma warning range byte option #pragma AVRPART ADMIN PART_NAME string V0 / V0E / V1 / V2 / V2E #pragma AVRPART CORE CORE_VERSION version_string #pragma AVRPART CORE INSTRUCTIONS_NOT_SUPPORTED mnemonic[ operand[,operand] ][: …] #pragma AVRPART CORE NEW_INSTRUCTIONS mnemonic[ operand[,operand] ][: …] #pragma AVRPART MEMORY PROG_FLASH size #pragma AVRPART MEMORY EEPROM size #pragma AVRPART MEMORY INT_SRAM size #pragma AVRPART MEMORY INT_SRAM START_ADDR address 0x60 / 0x100 #pragma partinclude num 0/1 integer / overflow / none #pragma overlap option ignore / warning / error / default #pragma error instruction #pragma warning instruction 5 6 1 AVRAS2 assembler z z Operands preprocessor keywords z z z z z z z label operators directives expressions functions variable z z value of the location counter at that place SET directive constant z z user defined using EQU directive integer decimal binary (0b…) hexadecimal (0x… $...) z octal (0…) floating-point 7 8 Operator Precedence Assembler directives 1. z 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. z ? : (conditional expression) || (logical OR) && (logical AND) | (bitwise OR) ^ (bitwise XOR) & (bitwise AND) == (equal) != (not equal) < (less than) <= (less or equal) > (greater than) >= (greater or equal) << (shift left) >> (shift right) ! (unary logical NOT) ~ (unary bitwise NOT) + (addition) - (substraction) * (multiplication) / (division) % (modulo) - (unary minus) z z z z umístění v paměti makra inicializace paměti podmíněný překlad proměnné a konstanty výstup z z všechny direktivy začínají . case-insensitive (lze přepnout, pak jsou klíčová slova lowercase) 9 Directives z z z z z z z z z z z z z z 10 Pre-defined macros BYTE CSEG, DSEG, ESEG CSEGSIZE DB, DW, DD, DQ DEF, UNDEF, EQU, SET DEVICE EXIT ERROR, WARNING, MESSAGE IF, IFDEF, IFNDEF, ELSE, ELIF, ENDIF INCLUDE LIST, NOLIST, LISTMAC MACRO, ENDM, ENDMACRO ORG OVERLAP, NOOVERLAP _ _ARVASM_VERSION_ _ _ _CORE_VERSION_ _ _ _DATE_ _ _ _TIME_ _ _ _CENTURY_ _ _ _YEAR_ _ _ _MONTH_ _ _ _DATE_ _ _ _HOUR_ _ _ _MINUTE_ _ _ _SECOND_ _ _ _FILE_ _ _ _LINE_ _ _ _PART_NAME_ _ _ _partname_ _ _ _CORE_coreversion_ _ 11 12 2 Expressions z Functions konstantní výrazy z z interně 64bit operandy z z z z z z návěští, proměnné, konstanty; PC, int, float z operátory funkce z z z z z z LOW, HIGH BYTE2, BYTE3, BYTE4 LWRD, HWRD PAGE EXP2, LOG2 INT, FRAC Q7, Q15 ABS DEFINED STRLEN 13 14 Typický design Typický design .include "m128def.inc" .def TEMP = R19 .include "m128def.inc" .def TEMP = R19 .CSEG .ORG 0 .CSEG .ORG 0 RJMP RESET ; Reset Handler ; ... other interrupt handlers RJMP RESET ; Reset Handle .ORG 34 RETI .ORG 35 RESET: .ORG 0x23 RESET: LDI TEMP,LOW(RAMEND) ; Initial Stack Pointer OUT SPL,TEMP LDI TEMP,HIGH(RAMEND) OUT SPH,TEMP ; ... whatever else needs to be initialized MAIN: ; ... here the main code starts RJMP MAIN LDI TEMP,LOW(RAMEND) ; Initial Stack Pointer OUT SPL,TEMP LDI TEMP,HIGH(RAMEND) OUT SPH,TEMP ; ... whatever else needs to be initialized MAIN: ; ... here the main code starts RJMP MAIN 15 16 3
Podobné dokumenty
TGA-24-9/20
Nastavení rychlosti komunikace sériové linky:
9600 b/s, 19200 b/s, 38400 b/s, 57600 b/s. Změna rychlosti
komunikace je akceptována až po uložení do EEPROM a
resetu servozesilovače.
Nastavení rychlo...
typ EMAX Návod k instalaci - ELGO
Vhodná teplota leží v rozmezí +21° ÷ +38°C. Nedoporučuje se lepení při kterých lepené plochy jsou chladnější než +10°C. V tomto případě je lepidlo příliš tuhé na to, aby bylo dosaženo
dobré kvality...
Příklad č. 1
Příklad č. 1
Vytvořte v paměti RAM pole, umístěte jen v paměti SRAM od začátku, jeho velikost bude dána
konstantou N. Pole naplňte, přičemž hodnota prvního prvku bude dána konstantou PRVNI, a dal...
AVR – Instrukční soubor
Nutno ho na začátku programu nastavit např. na konec SRAM:
ldi R16,HIGH(RAMEND)
out SPH,R16
ldi R16,LOW(RAMEND)
out SPL,R16
;Konstanta RAMEND určuje poslední adresu ve SRAM, je ;definovaná
v hlavič...
Programování mikrokontrolérů ATmega32
RAMEND (poslední adresa v datové paměti - $085FH)
FLASHEND (poslední adresa v programové paměti - $3FFFH)
E2END (poslední adresa v paměti EEPROM - $03FFH)
LOW (vrátí nižší bajt výrazu)
HIGH (vrátí ...