Программирование AVR Разборки с IDE для Atmel AVR wavrasm Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Разборки с IDE для Atmel AVR wavrasm Печать
Добавил(а) microsin   

wavrasm - старенькая бесплатная среда для программирования микроконтроллеров на ассемблере. К сожалению, настолько старая, что на сайте Atmel её уже не найти.

Спасает, как обычно, Google и BitTorrent. Позволяет писать программы на ассемблере, проверять синтаксис (в момент компиляции) и компилировать их в HEX-файл, ничего более, зато разобраться очень легко. При новом запуске открывает последний редактируемый *.asm файл. Текст создается в кодировке 1251 (ANSI), русские буквы допускаются в комментариях. Клавишу TAB для форматирования лучше не использовать, иначе получается неудобочитаемый просмотрщиком (F3 в Windows Commander) текст.

1. Установка не нужна, достаточно скопировать файл wavrasm.exe в любую папку и запускать уже оттуда.

2. Выберите Options...\поставьте галочку Save before assemble. Теперь ассемблировать текст можно нажатием Alt-A. Попробуйте ввести и откомпилировать разные команды ассемблера (см. далее).

3. Пересылка данных.
LDI Rd, K
  
почему-то работает только для R16..R31
Примеры команды LDI
   LDI R17, 2
   LDI R17, 0x02
   LDI R17, LOW(0x5102)
   LDI R17, HIGH(0x0243)
MOV Rd, Rr
   Rd <- rr="" r0="" r31="" p="">

4. Арифметика
ADD R17, R1
   Складывает R17 с R1, результат в R17. А тут уже допустимо применять R0..R31 !
ADC R17, R1
   То же самое, но еще добавляется 1, если признак переноса установлен.
SUB Rd, Rr
   Вычесть из Rd регистр Rr, результат в Rd. Допустимо применять R0..R31.
SUBI Rd, K
   Вычесть из Rd константу K. В качестве Rd допустимы R16..R31.
SBC
SBCI
   То же самое, что SUB и SUBI, но вычитается также перенос.
SBIW   R30, 0x12
   Вычесть байт из слова R31:R30. В качестве операнда-регистра доступны R24 (слово R25:R24), R26 (R27:R26,
   регистр X), R28 (R29:R28, регистр Y) и R30 (R31:R30, регистр Z).
AND Rd, Rr
   Логическое И, результат в Rd. Допустимо применять R0..R31.
ANDI Rd, K
   То же самое с константой. В качестве Rd допустимы R16..R31.
OR Rd, Rr
ORI Rd, K

   То же самое, что и AND, ANDI, только операция ИЛИ.
EOR Rd, Rr
   Исключающее или, результат в Rd. Допустимо применять R0..R31.
COM Rd
   Дополнение до 1. Rd <- 0xff="" -="" rd="" r0="" r31="" br=""> NEG Rd
   Дополнение до 2. Rd <- 0x00="" -="" rd="" r0="" r31="" br=""> SBR Rd, K
   Установить биты в регистре. В качестве Rd допустимы R16..R31. В чем разница от ORI Rd, K, непонятно.
CBR Rd, K
   Сбросить биты в регистре. Rd <- rd="" and="" 0xff-k="" r16="" r31="" br=""> INC Rd
DEC Rd
   Инкремент и декремент. Допустимо применять R0..R31.
TST Rd
   Проверка регистра на ноль. Допустимо применять R0..R31.
CLR Rd
   очистка регистра в ноль. Допустимо применять R0..R31.
SER Rd
   В регистр Rd помещается 0xFF. В качестве Rd допустимы R16..R31.
MUL Rd, Rr
   Перемножение двух 8-разрядных величин без знака, результат 16-разрядное число без знака, сохраняется в R1:R0. В качестве операндов допустимы R0..R31. Если в качестве операндов используются R0 и R1, то результат сразу заместит множители. Эта команда недоступна в базовой линии процессоров.

5. Передача управления.
RJMP label
   Относительный переход. Занимает 2 такта времени.
IJMP
   Переход по адресу в регистре Z (R31:R30). Занимает 2 такта времени.
JMP label
   Переход. Занимает 3 такта времени.
RCALL label
   Относительный вызов подпрограммы. Занимает 3 такта.
ICALL
   Переход по адресу в регистре Z (R31:R30). Занимает 3 такта.
CALL label
   Вызов подпрограммы. Занимает 4 такта.
RET
   Возврат из подпрограммы. Занимает 4 такта.
RETI
   Возврат из подпрограммы прерывания. Занимает 4 такта.
6. Ветвление операций
CPSE Rd, Rr
   ComPare Skip Equivalence - сравнить два регистра, и если равны, пропустить следующую инструкцию. Допустимо в операндах применять R0..R31.
CP Rd, Rr
   Сравнить два регистра методом Rd-Rr. Допустимо в операндах применять R0..R31.
CPC Rd, Rr
   То же самое с учетом переноса: Rd-Rr-С
CPI Rd, K
   Сравнение с константой K: Rd-K. В качестве Rd допустимы R16..R31.
SBRC Rr, b
   Skip if Bit in Register Cleared - если указанный бит регистра очищен, то пропустить следующую команду. В качестве Rr допустимо R0..R31. В качестве b используется константа 0..15
SBRS Rr, b
   Skip if Bit in Register Setted - то же самое, только наоборот - если бит установлен.
SBIC P, B
   Skip if Bit Input port Cleared - пропуск команды, если указанный порт ввода-вывода очищен. В качестве P допустима константа 0..31, в качестве b - константа 0..7
SBIS P, B
   Skip if Bit Input port Setted - то же самое, только наоборот - если бит установлен.
BRBS s, k
   Переход, если установлен флаг s (SREG(s)) по адресу PC+k+1. Константа s в диапазоне 0..7, k константа со знаком или метка.
BRBC s, k
   То же самое, только переход в случае сброшенного флага s.
BREQ k
   Переход, если равно (флаг Z=1). k константа со знаком или метка.
BRNE k
   Переход, если не равно (флаг Z=0). k константа со знаком или метка.
BRCS k
   Переход если установлен перенос. k - метка
BRCC k
   Переход если сброшен перенос. k - метка
BRSH k
   Переход, если равно или больше (C=0). То же самое, что BRCC k
BRLO k
   Переход, если меньше (C=1). То же самое, что BRCS k
BRMI k
   Переход, если минус (N=1)
BRPL k
   Переход, если плюс (N=0)
BRGE k
   Переход, если больше или равно, со знаком (if (N XOR N)=0)
BRLT k
   Переход, если (N XOR N)=1
BRHS k
   Переход, если установлен флаг H
BRHC k
   Переход, если сброшен флаг H
BRTS k
   Переход, если установлен флаг T
BRTC k
   Переход, если сброшен флаг T
BRVS k
   Переход, если установлен флаг V (переполнение)
BRVC k
   Переход, если сброшен флаг V
BRIE k
   Переход если разрешены прерывания (I=1)
BRID k
   Переход если запрещены прерывания (I=0)

 

 

Добавить комментарий


Защитный код
Обновить

Top of Page