Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
6.67 Mб
Скачать

Дільник частоти таймера-лічильника 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 ;продовження