Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


В семействе AVR система команд у микроконтроллеров разных типов содержат от 89 до 130 команд




Базовая система команд содержит: 33 команды регистровых операций, при выполнении которых используются только регистры общего назначения; 26 команд с обращением по адресу в адресном пространстве SRAM; 2 команды с обращением к регистрам ввода-вывода; 1 команда с обращением к Flash; 22 команды операций с битами в разрядах регистров общего назначения и регистров ввода-вывода; 34 команды управления ходом программы.

В систему команд поздних версий микроконтроллеров входят дополнительные команды. Появление некоторых из них связано с уве­личенным объемом Flash и/или наличием дополнительных модулей, например, наличием аппаратного умножителя.

Ниже приведены примеры использования команд, а в приложении 2 - полный перечень команд для микроконтроллера Atmega 128 (мнемокоды команд, описание, операции, флаги и количество машинных циклов на выполнение команды).

 

Примеры использования арифметических и логических команд

 

  ;сложить r1: r0 c r3:r2
Add r2,r0 ;сложить младший байт
Adc r3,r1 ;сложить старший байт с переносом

 

Add r1,r2 ;сложить r2 с r1 (r1=r1+r2)
Adc r28,r28 ;сложить r28 с самими собой (r28=r28+r28)
Adiw r24,1 ;сложить 1 c r25:r24
Adiw r30,63 ;сложить 63 c Z указателем (r31:r30)

 

And r2,r3 ;поразрядная логическая операция И над содержимым ;регистров r2 и r3, результат поместить в r2
Ldi r16,1 ;установить маску 0000 0001 в r16
And r2,r16 ;выделить бит 0 в r2
Andi r17 $0F ;очистить 4-7 разряды регистра r17
Andi r18 $10 ;выделить бит 4 в r18
Andi r19 $AA ;очистить нечетные биты r19

 

Примеры использования команд ветвления

 

  Cpi r20,5 ;сравнить r20 со значением 5
  Brbc 1,noteq ;перейти, если флаг нуля очищен
  ………  
Noteq: Nop ;Перейти, по значению (пустая операция)

 

  Bst r0,3 ;загрузить Т битом 3 регистра r0
  Brbs 6,Битыet ; перейти, если бит T установлен
  ……  
Битыet: Nop ;перейти по назначению (пустая операция)

 

  Add r22,r23 ;сложить r23 c r22
  Brcc nocarry ;перейти, если перенос очищен
  ………  
Nocarry: Nop ;перейти по назначению (пустая операция)

 

  Cpi r26,$56 ;сравнить r26 c $56
  Brcs carry ;перейти, если перенос установлен
  …… ;
Carry: nop ;перейти по назначению (пустая операция)

 

  Сp r1,r0 ;сравнить регистры r1 и r0
  Breq equal ;перейти, если содержимое регистров совпадает
  ……. ;
Equal: Nop ;перейти по назначению (пустая операция)

 

  Cp r11, r12 ;сравнить регистры r11и r12
  Brge greateq ;перейти, если r11>=r12 (со знаком)
  ….. ;
Greateq: Nop ;перейти по назначению (пустая операция)

 

  Brhc hclear ;перейти, если флаг переноса очищен
  …… ;
Hclear: Nop ;перейти по назначению (пустая операция)

 

  Mov r16,r0 ;Копировать r0 в r16
  Call check ;Вызвать подпрограмму
  …… ;
  Nop ;Пустая операция
Check: Cpi r16,$42 ;Проверить, содержит ли r16 заданное значение
  Breq error ;Перейти, если содержит
  Ret ;Возврат из подпрограммы
     
Error: Rjmp error ;Бесконечный цикл

 

  Mov r16,r0 ;Копировать r0 в r16
  Call check ;Вызвать подпрограмму check
  …… ;
  Nop ;Пустая операция
Check: Cpi r16,$42 ;Проверить, содержит ли r16 заданное значение
  Breq error ;Перейти по метке error, если содержит
  Ret ;Возврат из подпрограммы

 

Примеры использования команд передачи данных

Clr r27 ;очистить старший байт X
Ldi r26,$20 ;установить $20 в младший байт X
Ld r0,X+ ;загрузить в r0 содержимое SRAM по адресу $20 (X постинкрементируется)
Ld r1,X ;загрузить r1содержимое SRAM по адресу $21
Ldi r26,$23 ;установить $23 в младший байт X
Ld r2,X ;загрузить в r2 содержимое SRAM по адресу $23
Ld r3,-X ;загрузить в r3 содержимое SRAM по адресу $22 (X преддекрементируется)

 

Clr r31 ;очистить старший байт Z
Ldi r30, $f0 ;установить $F0 в младший байт Z
Lpm ;загрузить константу из памяти программ в регистр r0. Память отмечена в Z

 

Lds r2,$ff00 ;загрузить r2 содержимым SRAM по адресу $ff00
Add r2, r1 ;сложить r1 с r2
Sts $ff00,r2 ;записать обратно

 

Clr r31 ;очистить старший байт Z
Ldi r30,$ff ;установить младший байт Z
lpm ;загрузить константу в регистр r0 из памяти программ отмеченную Z (r31:r30)

 

Mul r6,r5 ;перемножить r6 и r5
Mov r6,r1 ;вернуть результат обратно в r6:r5  
Mov r5,r0

 

Clr r16 ;очистить r16
Out $18, r16 или Out portb, r16 ;записать нули в Порт В (где $18 адрес порта В)  
Nop ;ожидать (пустая операция)
Ser r17 ;установить r17
Out portb,r17 ;записать единицы в Порт В

 

  Call routine ;вызвать программу routine
  …… ;
Routine: Push r14 ;сохранить r14 в стеке
  Push r13 ;сохранить r13 в стеке
  …… ;
  Pop r13 ;восстановить r13
  Pop r14 ;восстановить r14
  Ret ;вернуться из подпрограммы

 

e2wait: Sbic $1c,1 ;пропустить следующую команду, если EEWE очищен (где $1c –адрес регистра управления EEPROM – EECR)
  Rjmp e2wait ;запись EEPROM не завершена
  nop ;продолжать (пустая операция)

 

  ;вычесть r1:r0 из r3:r2
Sub r2,r0 ;вычесть младший байт
Sbc r3,r1 ;вычесть старший байт с переносом

 

Out $1E,r0 ;записать адрес EEPROM
Sbi $1c,0 ;установить бит чтения в EECR
In r1,$1d ;считать данные EEPROM

 

Cli ;запретить прерывания
In r13, $16 ;считать Порт В
sei ;разрешить прерывания

 

Clr r27 ;очистить старший байт X
Ldi r26,$20 ;установить $20 в младший байт X
St X+,r0 ;сохранить в r0 содержимое SRAM по адресу $20 (X посткрементируется)
St X, r1 ;сохранить в r1 содержимое SRAM по адресу $21
Ldi r26,$23 ;установить $23 в младший байт X
St r2, X ;сохранить в r2 содержимое SRAM по адресу $23
St r3, -X ;сохранить в r3 cодержимое SRAM по адресу $22 (X преддекрементируется)

 

Lds r2, $ff00 ;загрузить в r2 содержимое SRAM по адресу $ff00
Add r2,r1 ;сложить r1 c r2
Sts $ff00,r2 ;записать обратно

 

Ldi r16, $10 ;загрузить десятичное значение 16 в r16
Asr r16 ;содержимое регистра R16 разделить на 2, т.е. r16=r16/2
Ldi r17, $fc ;загрузить –4 в r17
Asr r17 ;r17=r17/2

 

 





Поделиться с друзьями:


Дата добавления: 2016-11-02; Мы поможем в написании ваших работ!; просмотров: 802 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинать всегда стоит с того, что сеет сомнения. © Борис Стругацкий
==> читать все изречения...

2343 - | 2103 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.