- •1 Загальні відомості
- •6 Відладка програми
- •7 Налаштування параметрів імітатора
- •ATmega128, aTmega128l 8-розрядний avr-мікроконтролер з внутрішньосистемною програмованою флеш-пам'яттю ємністю 128 кбайт Особливості:
- •Короткий огляд
- •Завдання:
- •Лабораторна робота №2 «Вивчення математичних і логічних операцій і їх вплив на біти-стану мікроконтролера» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Лабораторна робота №3 «Вивчення методів додавання і віднімання чотирьохбайтних чисел» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Завдання:
- •Лабораторна робота №5 «Вивчення роботи з пам’яттю даних» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Лабораторна робота №6 «Вивчення операцій порівняння і реалізація циклічних операцій» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Завдання:
- •Завдання:
- •Часові діаграми таймера-лічильника 0
- •Опис регістрів 8-розрядного таймера-лічильника 0
- •Асинхронна робота таймера-лічильника 0
- •Дільник частоти таймера-лічильника 0 Дільник частоти таймер-лічильника 0
- •Завдання:
- •Завдання:
- •Набір інструкцій
Дільник частоти таймера-лічильника 0 Дільник частоти таймер-лічильника 0
Тактове джерело таймера-лічильника 0 позначено як clkT0. По замовчуванню clkT0 підключений до системного джерела синхронізації вводу-виводу clkI/O. Шляхом установки біта AS0 в регістрі ASSR таймера-лічильника 0 тактується асинхронно з виходу TOSC1. Ця функція дозволяє використовувати таймер-лічильник 0 в якості годин реального часу (RTC50). Якщо AS = 1, то виводи TOSC1 і TOSC2 більше не виконують функції ліній порту С, а між ними може бути підключений кварцовий резонатор в якості окремого тактового джерела таймера-лічильника 0. Генератор оптимізований під використання кварцу на частоту 32768 Гц. Підключення до виводу TOSC1 зовнішнього тактового джерела не рекомендується.
Дільник частоти таймера-лічильника 0 дозволяє вибрати наступні тактові сигнали: clkT0S/8, clkT0S/32, clkT0S/64, clkT0S/128, clkT0S/256 і clkT0S/1024. Крім того, є можливість зупинити синхронізацію. Установка біта PSR0 в регістрі SFIOR скидає дільник частоти. Ця функція дозволяє програмісту працювати з більш прогнозованим поведінкою дільника частоти.
Регістр спеціальних функцій вводу-виводу SFIOR
Розряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
TSM |
- |
- |
- |
ACME |
PUD |
PSR0 |
PSR321 |
SFIOR |
Читання/запис |
Чт./Зп. |
Чт. |
Чт. |
Чт. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
|
Поч. значення |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Розряд 7 - TSM: Режим синхронізації таймера-лічильника
Установка біта TSM активізує режим синхронізації таймерів-лічильників. В даному режимі після установки біта PSR0 або PSR321 відповідний дільник частоти буде постійно перебувати в скинутому стані. У цьому стані гарантується, що всі відповідні таймери-лічильники будуть зупинені і можуть бути однаково налаштовані без ризику зміни стану одного з них під час конфігурації. Якщо після цього скинути біт TSM, то біти PSR0 і PSR321 скидаються апаратно, а таймери-лічильники починають лічбу одночасно.
Розряд 1 - PSR0: Скидання дільника частоти таймера-лічильника 0
Якщо даний біт дорівнює лог. 1, то дільник частоти таймера-лічильника 0 скидається. Даний біт зазвичай скидається апаратно відразу після установки. Якщо даний біт встановлюється, коли таймер-лічильник 0 працює в асинхронному режимі, то він залишається рівним 1 поки не скинеться дільник частоти таймера-лічильника 0. Даний біт не скидається апаратно, якщо біт TSM = 1.
Оператори над константами у AVR-асемблері
Асемблер
підтримує ряд операторів, які описані
тут. Чим вище пріоритет операції, тим
вищий пріоритет виконання. Вирази можуть
бути укладені в дужки, і такі вирази
завжди обчислюються перед поєднанням
з чимось поза дужками. Асоціативність
бінарних операторів вказує порядок
обчислення ланцюгових операторів, ліва
асоціативність означає обчислюються
зліва направо, тобто
,
в той час як права асоціативність означає
.
Деякі оператори не асоціативні, тому
значення ланцюжка не має сенсу
Символ |
Назва |
Опис |
Пріоритет операції |
Асоціативність |
Приклад |
! |
Логічне НІ |
Унарна операція, яка повертає 1, якщо вираз був нулем і вертає 0, якщо вираз не був нулем |
12 |
Нема |
ldi r16,!0xf0 /*Завантаження у r16 числа 0x00 */ |
~ |
Побітне НІ |
Унарна операція, яка вертає вхідний вираз з інвертованими всіма бітами |
12 |
Нема |
ldi r16, ~0xf0 /*Завантаження у r16 числа 0x0f */ |
- |
Унарний мінус |
Унарна операція, яка змінює знак виразу |
14 |
Нема |
ldi r16, -2 /*Завантаження у r16 числа -2 (0xfe) */ |
* |
Множення |
Операція над двома елементами виразу, яка повертає добуток двох виразів |
13 |
Ліва |
ldi r16, label*2 /*Завантаження у r16 числа label*2 */ |
/ |
Ділення |
Операція над двома елементами виразу, яка повертає цілу частину ділення лівої частину на праву частину |
13 |
Ліва |
ldi r16, label/2 /*Завантаження у r16 числа label/2 */ |
% |
Виділення остачі (тільки для AVRASM2) |
Операція над двома елементами виразу, яка повертає остачу ділення лівої частину на праву частину |
13 |
Ліва |
ldi r16, label % 2 /*Завантаження у r16 числа label % 2 */ |
+ |
Додавання |
Операція над двома елементами виразу, яка повертає суму двох виразів |
12 |
Ліва |
ldi r16, c1+c2 /*Завантаження у r16 числа c1+c2 */ |
- |
Віднімання |
Операція над двома елементами виразу, яка повертає результат віднімання ліва частина мінус права частина |
12 |
Ліва |
ldi r16, c1-c2 /*Завантаження у r16 числа c1-c2 */ |
<< |
Зміщення вліво |
Операція над двома елементами виразу, яка повертає результат лівого зміщення лівого виразу на стільки біт, скільки вказано у правій частині |
11 |
Ліва |
ldi r16, c1<<c2 /*Завантаження у r16 числа c1 побітно зміщеного вліво c2 разів*/ |
>> |
Зміщення вправо |
Операція над двома елементами виразу, яка повертає результат правого зміщення лівого виразу на стільки біт, скільки вказано у правій частині |
11 |
Ліва |
ldi r16, c1>>c2 /*Завантаження у r16 числа c1 побітно зміщеного вправо c2 разів*/ |
< |
Менше |
Операція над двома елементами виразу, яка повертає 1, якщо вираз (враховуючи знак) зліва є меншим від виразу (враховуючи знак) справа. У іншому випадку - 0 |
10 |
Нема |
ori r16, bitmask*(c1<c2)+1 /*Логічне АБО r16 з виразом*/ |
<= |
Менше або рівне |
Операція над двома елементами виразу, яка повертає 1, якщо вираз (враховуючи знак) зліва є меншим або рівним від виразу (враховуючи знак) справа. У іншому випадку - 0 |
10 |
Нема |
ori r16, bitmask*(c1<=c2)+1 /*Логічне АБО r16 з виразом*/ |
> |
Більше |
Операція над двома елементами виразу, яка повертає 1, якщо вираз (враховуючи знак) зліва є більшим від виразу (враховуючи знак) справа. У іншому випадку - 0 |
10 |
Нема |
ori r16, bitmask*(c1>c2)+1 /*Логічне АБО r16 з виразом*/ |
>= |
Більше або рівне |
Операція над двома елементами виразу, яка повертає 1, якщо вираз (враховуючи знак) зліва є більшим або рівним від виразу (враховуючи знак) справа. У іншому випадку - 0 |
10 |
Нема |
ori r16, bitmask*(c1>=c2)+1 /*Логічне АБО r16 з виразом*/ |
== |
Рівне |
Операція над двома елементами виразу, яка повертає 1, якщо вираз (враховуючи знак) зліва є рівним виразу (враховуючи знак) справа. У іншому випадку - 0 |
9 |
Нема |
ori r16, bitmask*(c1==c2)+1 /*Логічне АБО r16 з виразом*/ |
!= |
Не рівне |
Операція над двома елементами виразу, яка повертає 1, якщо вираз (враховуючи знак) зліва є рівним виразу (враховуючи знак) справа. У іншому випадку - 0 |
9 |
Нема |
.EQU flag=(c1!=c2) /* Встановлення символьної константи рівною 1 або 0 */ |
& |
Побітне І |
Операція над двома елементами виразу, яка повертає побітне І між двома виразами |
8 |
Ліва |
ldi r16, High(c1&c2) /*Завантаження у r16 виразу*/ |
^ |
Побітне ВИКЛЮЧАЮЧЕ АБО |
Операція над двома елементами виразу, яка повертає побітне ВИКЛЮЧАЮЧЕ АБО між двома виразами |
7 |
Ліва |
ldi r16, High(c1^c2) /*Завантаження у r16 виразу*/ |
| |
Побітне АБО |
Операція над двома елементами виразу, яка повертає побітне АБО між двома виразами |
6 |
Ліва |
ldi r16, High(c1|c2) /*Завантаження у r16 виразу*/ |
&& |
Логічне І |
Операція над двома елементами виразу, яка повертає 1, якщо два вирази є ненульовими, у іншому випадку - 0 |
5 |
Ліва |
ldi r16, High(c1&&c2) /*Завантаження у r16 виразу*/ |
|| |
Логічне АБО |
Операція над двома елементами виразу, яка повертає 1, якщо два вирази є ненульовими, у іншому випадку - 0 |
4 |
Ліва |
ldi r16, High(c1||c2) /*Завантаження у r16 виразу*/ |
? |
Умовний оператор (тільки для AVRASM2.1) |
Синтаксис умова ? вираз 1 : вираз 2 Опис Термальний (трійний) оператор, який повертає значення виразу 1, якщо умова справджується, у іншому випадку – вираз 2. |
3 |
Нема |
ldi r16, a>b ? a:b /*Завантаження у r16 більшого числа між a і b*/ |
Регістри вводу/виводу (які треба знати при виконанні цієї лабораторної роботи)
Адреса |
Номер регістру вводу/виводу51 |
Назва |
Біт 7 |
Біт 6 |
Біт 5 |
Біт 4 |
Біт 3 |
Біт 2 |
Біт 1 |
Біт 0 |
Буде описано пізніше або можна ознайомитися з опису до мікроконтролера ATMEGA128 |
||||||||||
$65 |
|
PORTG |
- |
- |
- |
PORTG4 |
PORTG3 |
PORTG2 |
PORTG1 |
PORTG0 |
$64 |
|
DDRG |
- |
- |
- |
DDG4 |
DDG3 |
DDG2 |
DDG1 |
DDG0 |
$63 |
|
PING |
- |
- |
- |
PING4 |
PING3 |
PING2 |
PING1 |
PING0 |
$62 |
|
PORTF |
PORTF7 |
PORTF6 |
PORTF5 |
PORTF4 |
PORTF3 |
PORTF2 |
PORTF1 |
PORTF0 |
$61 |
|
DDRF |
DDF7 |
DDF6 |
DDF5 |
DDF4 |
DDF3 |
DDF2 |
DDF1 |
DDF0 |
$60 |
|
Резерв |
- |
- |
- |
- |
- |
- |
- |
- |
$5F |
$3F |
SREG |
I |
T |
H |
S |
V |
N |
Z |
C |
$5E |
$3E |
SPH |
SP15 |
SP14 |
SP13 |
SP12 |
SP11 |
SP10 |
SP9 |
SP8 |
$5D |
$3D |
SPL |
SP7 |
SP6 |
SP5 |
SP4 |
SP3 |
SP2 |
SP1 |
SP0 |
Буде описано пізніше або можна ознайомитися з опису до мікроконтролера ATMEGA128 |
||||||||||
$57 |
$37 |
TIMSK |
OCIE2 |
TOEI2 |
TICIE1 |
OCIE1A |
OCIE1B |
TOIE1 |
OCIE0 |
TOIE0 |
$56 |
$36 |
TIFR |
OCF2 |
TOV2 |
ICF1 |
OCF1A |
OCF1B |
TOV1 |
OCF0 |
TOV0 |
Буде описано пізніше або можна ознайомитися з опису до мікроконтролера ATMEGA128 |
||||||||||
$53 |
$33 |
TCCR0 |
FOC0 |
WGM00 |
COM01 |
COM00 |
WGM01 |
CS02 |
CS01 |
CS00 |
$52 |
$32 |
TCNT0 |
Регістр таймера-лічильника 0 (8 біт) |
|||||||
$51 |
$31 |
OCR0 |
Регістр порогу порівняння таймера-лічильника 0 |
|||||||
$50 |
$30 |
ASSR |
- |
- |
- |
- |
AS0 |
TCN0UB |
OCR0UB |
TCR0UB |
Буде описано пізніше або можна ознайомитися з опису до мікроконтролера ATMEGA128 |
||||||||||
$40 |
$20 |
SFIOR |
TSM |
- |
- |
- |
ACME |
PUD |
PSR0 |
PSR321 |
Буде описано пізніше або можна ознайомитися з опису до мікроконтролера ATMEGA128 |
||||||||||
$3B |
$1B |
PORTA |
PORTA7 |
PORTA6 |
PORTA5 |
PORTA4 |
PORTA3 |
PORTA2 |
PORTA1 |
PORTA0 |
$3A |
$1A |
DDRA |
DDA7 |
DDA6 |
DDA5 |
DDA4 |
DDA3 |
DDA2 |
DDA1 |
DDA0 |
$39 |
$19 |
PINA |
PINA7 |
PINA6 |
PINA5 |
PINA4 |
PINA3 |
PINA2 |
PINA1 |
PINA0 |
$38 |
$18 |
PORTB |
PORTB7 |
PORTB6 |
PORTB5 |
PORTB4 |
PORTB3 |
PORTB2 |
PORTB1 |
PORTB0 |
$37 |
$17 |
DDRB |
DDB7 |
DDB6 |
DDB5 |
DDB4 |
DDB3 |
DDB2 |
DDB1 |
DDB0 |
$36 |
$16 |
PINB |
PINB7 |
PINB6 |
PINB5 |
PINB4 |
PINB3 |
PINB2 |
PINB1 |
PINB0 |
$35 |
$15 |
PORTC |
PORTC7 |
PORTC6 |
PORTC5 |
PORTC4 |
PORTC3 |
PORTC2 |
PORTC1 |
PORTC0 |
$34 |
$14 |
DDRC |
DDC7 |
DDC6 |
DDC5 |
DDC4 |
DDC3 |
DDC2 |
DDC1 |
DDC0 |
$33 |
$13 |
PINC |
PINC7 |
PINC6 |
PINC5 |
PINC4 |
PINC3 |
PINC2 |
PINC1 |
PINC0 |
$32 |
$12 |
PORTD |
PORTD7 |
PORTD6 |
PORTD5 |
PORTD4 |
PORTD3 |
PORTD2 |
PORTD1 |
PORTD0 |
$31 |
$11 |
DDRD |
DDD7 |
DDD6 |
DDD5 |
DDD4 |
DDD3 |
DDD2 |
DDD1 |
DDD0 |
$30 |
$10 |
PIND |
PIND7 |
PIND6 |
PIND5 |
PIND4 |
PIND3 |
PIND2 |
PIND1 |
PIND0 |
Буде описано пізніше або можна ознайомитися з опису до мікроконтролера ATMEGA128 |
||||||||||
Це корисно!
Для зручності використання AVR Studio при написанні програм для різних мікроконтролерів, у яких регістри вводу/виводу чи розширених регістрів вводу/виводу, а також деяких перепозначень регістрів регістрового файлу (зокрема X, Y і Z), абсолютні адреси яких у різних мікроконтролерах можуть бути різні, але назва і функціональне призначення є однакове – розробниками AVR Studio у папці \Program Files\Atmel\AVRTools\AVRAssembler\Аppnotes\ знаходяться *.inc файли у яких директивами EQU і DEF описані визначені всі регістри і відповідні біти регістрів, а також здійснено деякі визначення.
У цьому файлі також визначені символьними змінними номери бітів регістрів вводу виводу.
Зокрема,
.equ WGM01 = 3
Це опис біту WGM01 (номер його є 3) регістру TCCR0, який відноситься до регістрів вводу виводу і відповідає за налаштування таймера-лічильника 0 мікроконтролера ATMEGA128
Для того, щоб включити у проект визначення регістрів мікроконтролера ATMEGA128 треба в проект включити m128def.inc файл.
Приклад встановлення біт регістру TCCR0
FOC0 = 0
WGM00 = 0
COM01 = 0
COM00 = 0
WGM01 = 1
CS02 = 1
CS01 = 1
CS00 = 0
ldi r16, ((1<<WGM01) | (1<<CS02) | (1<<CS01))
out TCCR0, r16
Опис деяких мнемонік інструкцій, які використовуються у цій лабораторній роботі і не були описані у описах до попередніх лабораторних робіт
AND – «Логічне І»
Здійснює логічне І між вмістимим регістру Rd і регістром Rr – результат поміщається у регістр призначення Rd.
Синтаксис |
Операнди |
Лічильник команд |
AND Rd,Rr |
0 ≤ d ≤ 31, 0 ≤ r ≤ 31 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
<> |
0 |
<> |
<> |
- |
Біт S:
.
Використовується для тестування
знаку результату.
Біт V:
Очищується.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Наприклад:
and r2,r3 ;Побітне І між регістрами R2 і R3, результат у R2
OR – «Логічне АБО»
Здійснює логічне АБО між вмістимим регістру Rd і регістром Rr – результат поміщається у регістр призначення Rd.
Синтаксис |
Операнди |
Лічильник команд |
OR Rd,Rr |
0 ≤ d ≤ 31, 0 ≤ r ≤ 31 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
<> |
0 |
<> |
<> |
- |
Біт S:
. Використовується для тестування знаку результату.
Біт V:
Очищується.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Наприклад:
or r2,r3 ;Побітне АБО між регістрами R2 і R3, результат у R2
XOR – «Логічне ВИКЛЮЧАЮЧЕ АБО»
Здійснює логічне ВИКЛЮЧАЮЧЕ АБО між вмістимим регістру Rd і регістром Rr – результат поміщається у регістр призначення Rd.
Синтаксис |
Операнди |
Лічильник команд |
XOR Rd,Rr |
0 ≤ d ≤ 31, 0 ≤ r ≤ 31 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
<> |
0 |
<> |
<> |
- |
Біт S:
. Використовується для тестування знаку результату.
Біт V:
Очищується.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Наприклад:
xor r2,r3 ;Побітне ВИКЛЮЧАЮЧЕ АБО між регістрами R2 і R3, результат у R2
COM – «Виконання порозрядного доповнення до одиниці (зворотній код)»
Ця інструкція виконує порозрядне доповнення до одиниці (зворотній код числа) регістру Rd.
Ця операція еквівалентна побітному інвертуванню вмістимого регістра і результат записується у той самий регістр.
Синтаксис |
Операнди |
Лічильник команд |
COM Rd |
0 ≤ d ≤ 31 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
<> |
0 |
<> |
<> |
1 |
Біт S:
. Використовується для тестування знаку результату.
Біт V:
Очищується.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Біт C:
Встановлюється завжди.
Наприклад:
com r4 ; Виконання порозрядного доповнення до одиниці (зворотній код) регістра R4
NEG – «Виконання порозрядного доповнення до двох (додатковий код)»
Ця інструкція виконує порозрядне доповнення до двох (додатковий код числа) регістру Rd. У випадку виконання цієї інструкції над регістром значення якого рівне $80, то тоді значення регістру не змінюється після виконання цієї команди.
Ця операція еквівалентна зміни знаку
вмістимого регістра із збереженням
модуля числа (у випадку, коли число
розглядається однобайтним знаковим з
інтервалу
).
Синтаксис |
Операнди |
Лічильник команд |
NEG Rd |
0 ≤ d ≤ 31 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
<> |
<> |
<> |
<> |
<> |
<> |
Біт H:
Встановлюється, якщо відбулася «позика» з третього біту. У іншому випадку очищується
Біт S:
. Використовується для тестування знаку результату.
Біт V:
Встановлюється, якщо переповнення числа в додатковому коді від уявного віднімання від нуля. У іншому випадку віднімаються. Переповнення в додатковому коді відбудеться, тоді і тільки тоді, коли вмістиме регістру після виконання цієї операції (результат) буде $80
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Біт C:
Встановлюється, якщо відбулася «позика» в уявного віднімання від нуля. У іншому випадку віднімаються. Біт C встановиться у всіх випадках за винятком, коли вмістиме регістру після виконання цієї операції (результат) буде $00
Наприклад:
neg r4 ; Виконання порозрядного доповнення до двох (додатковий код) регістра R4
SBRC – «Пропустити наступну інструкцію, якщо біт регістру очищений»
Ця інструкція перевіряє вибраний біт у вказаному регістрі і пропускає наступну інструкцію, якщо біт очищений
якщо Rr(b)
= 0 то
інакше
Синтаксис |
Операнди |
Лічильник команд |
SBRС Rd, b |
0 ≤ Rd ≤ 31, 0 ≤ b ≤ 7 |
PC ← PC + 1 Умова не виконується – нема пропуску PC ← PC + 2 Умова не справджується – є пропуск інструкції довжиною у одне слово PC ← PC + 2 Умова не справджується – є пропуск інструкції довжиною у два слова
|
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
- |
- |
- |
- |
- |
Наприклад:
sub r0, r1 ; Віднімання регістра R1 від R0
sbrс r0, 7 ; Пропустити наступну інструкцію, якщо біт 7 регістра R0 очищений
sub r0, r1 ; Виконується тільки тоді, коли 7 регістра R0 очищений
nop ;продовження
SBRS – «Пропустити наступну інструкцію, якщо біт регістру встанвлений»
Ця інструкція перевіряє вибраний біт у вказаному регістрі і пропускає наступну інструкцію, якщо біт встановлений
якщо Rr(b) = 1 то інакше
Синтаксис |
Операнди |
Лічильник команд |
SBRS Rd, b |
0 ≤ Rd ≤ 31, 0 ≤ b ≤ 7 |
PC ← PC + 1 Умова не виконується – нема пропуску PC ← PC + 2 Умова не справджується – є пропуск інструкції довжиною у одне слово PC ← PC + 2 Умова не справджується – є пропуск інструкції довжиною у два слова
|
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
- |
- |
- |
- |
- |
Наприклад:
sub r0, r1 ; Віднімання регістра R1 від R0
sbrs r0, 7 ; Пропустити наступну інструкцію, якщо біт 7 регістра R0 встановлений
sub r0, r1 ; Виконується тільки тоді, коли 7 регістра R0 встановлений
nop ;продовження
SBIC – «Пропустити наступну інструкцію, якщо біт регістру вводу/виводу очищений»
Ця інструкція перевіряє вибраний біт у вказаному регістрі вводу/виводу і пропускає наступну інструкцію, якщо біт очищений. Ця інструкція працює тільки з першими 32 регістрами вводу/виводу – адреси 0÷31
якщо I/O(A,b) = 0 то інакше
Синтаксис |
Операнди |
Лічильник команд |
SBIС A, b |
0 ≤ A ≤ 31, 0 ≤ b ≤ 7 |
PC ← PC + 1 Умова не виконується – нема пропуску PC ← PC + 2 Умова не справджується – є пропуск інструкції довжиною у одне слово PC ← PC + 2 Умова не справджується – є пропуск інструкції довжиною у два слова
|
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
- |
- |
- |
- |
- |
Наприклад:
sbiс $1C, 1 ; Пропустити наступну інструкцію, якщо біт 1 регістра EEWE очищений
sub r0, r1 ; Виконується тільки тоді, коли 1 регістра EEWE очищений
nop ;продовження
SBIS – «Пропустити наступну інструкцію, якщо біт регістру вводу/виводу встановлений»
Ця інструкція перевіряє вибраний біт у вказаному регістрі вводу/виводу і пропускає наступну інструкцію, якщо біт встановлений. Ця інструкція працює тільки з першими 32 регістрами вводу/виводу – адреси 0÷31
якщо I/O(A,b)
= 1 то
інакше
Синтаксис |
Операнди |
Лічильник команд |
SBIS A, b |
0 ≤ A ≤ 31, 0 ≤ b ≤ 7 |
PC ← PC + 1 Умова не виконується – нема пропуску PC ← PC + 2 Умова не справджується – є пропуск інструкції довжиною у одне слово PC ← PC + 2 Умова не справджується – є пропуск інструкції довжиною у два слова
|
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
- |
- |
- |
- |
- |
Наприклад:
sbis $1C, 1 ; Пропустити наступну інструкцію, якщо біт 1 регістра EEWE встановлений
sub r0, r1 ; Виконується тільки тоді, коли 1 регістра EEWE встановлений
nop ;продовження
