Регістр управління микроконтроллером - MCUCR 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Регістр управління микроконтроллером - MCUCR



Розряд                  
  SRE SRW10 SE SM1 SM0 SM2 IVSEL IVCE MCUCR
Читання/запис Чт/Зп. Чт/Зп. Чт/Зп. Чт/Зп. Чт/Зп. Чт/Зп. Чт/Зп. Чт/Зп.  
Вих. значення                  

Розряд 1 - IVSEL: Вибір вектора переривання

Якщо біт скинутий IVSEL (= 0), то вектори переривань розміщуються на початку флеш-пам'яті. Якщо даний біт встановлений (= 1), то вектори переривань переміщуються в початок завантажувального сектора флеш-пам'яті. Фактична адреса початку завантажувального сектора визначається значенням конфігураційних біт BOOTSZ. Щоб уникнути несанкціонованих змін таблиці векторів переривань необхідно виконати спеціальну послідовність запису при зміні біта IVSEL:

  1. Записати лог. 1 в біт дозволу зміни вектора переривання (IVCE).
  2. Протягом чотирьох машинних циклів записати бажане значення в IVSEL, при цьому записуючи лог.0 в IVCE.

Переривання будуть автоматично відключені при виконанні такої послідовності. Переривання відключаються під час установки IVCE і залишаться відключеними до переходу до інструкції наступного за інструкцією записи в IVSEL. Якщо IVSEL не записаний, то переривання буде знаходитися у відключеному стані 4 такти синхронізації. Стан біта I в регістрі статусу не зачіпається при автоматичному відключенні переривань.

Наприклад: Якщо вектори переривань поміщаються в завантажувальний сектор і біт захисту завантажувального сектора BLB02 запрограмований, то переривання будуть відключені при виконанні програми з секторі прикладної програми. Якщо вектори переривань розміщені в прикладному секторі і біт захисту BLB12 запрограмований, то переривання стають відключеними при виконанні програми в завантажувальному секторі.

Розряд 0 - IVCE: Дозвіл зміни вектора переривання

В біт IVCE повинно бути записано лог. 1, щоб дозволити зміну біта IVSEL. IVCE скидається апаратно через чотири машинних циклу після запису лог. 1 в IVSEL. Установка біта IVCE призведе до відключення переривань, що описано при розгляді біта IVSEL вище.

Опис деяких мнемонік інструкцій, які використовуються у цій лабораторній роботі і не були описані у описах до попередніх лабораторних робіт

JMP – «Перехід»

Інструкція здійснює перехід у межах 4 МЕГА слів простору пам’яті програм..

PC ← k

Синтаксис Операнди Лічильник команд Стек
JMP k -0 ≤ k ≤ 4М PC ← k Без змін

 

Вплив на регістри статусу:

I T H S V N Z C
- - - - - - - -

 

Наприклад:

jmp OK

 

OK: nop

 

RETI – «Вихід з переривання»

Інструкція здійснює вихід з поривання. Адреса повернення вигружається зі стеку і біт Глобальний дозвіл переривань (I -біт) встановлюється.

Зверніть увагу на те, що регістр статусу автоматично не записується при вході в обробник переривань і не відновлюється при виході з переривання. Ці операції треба виконати програмно. Вказівник на стек використовує преінкрементації під час виконання інструкції RETI

PC(15:0) ← STACK

Синтаксис Операнди Лічильник команд Стек
RETI Нема PC(15:0) ← STACK SP ← SP + 2

 

Вплив на регістри статусу:

I T H S V N Z C
  - - - - - - -

Біт I:

Встановлюється завжди.

 

Наприклад:

exit_int:

pop r16

out SREG r16

reti

CLI – «Скидання біту глобального дозволу переривань»

Інструкція здійснює очистку біту Глобального дозволу переривань (I -біт) у регістру статусу (SREG). Генерація всіх переривань буде забороненою. Переривання не будуть генеруватися після цієї інструкції навіть якщо умова їх генерації виникне одночасно з виконанням цієї інструкції.

 

I ← 0

Синтаксис Операнди Стек
CLI Нема SP ← SP + 1

 

Вплив на регістри статусу:

I T H S V N Z C
  - - - - - - -

Біт I:

Очищається завжди.

 

Наприклад:

cli

 

SEI – «Встановлення біту глобального дозволу переривань»

Інструкція здійснює встановлення біту Глобального дозволу переривань (I -біт) у регістру статусу (SREG). Наступна інструкція після цієї інструкції буде виконана перед будь-якими перериваннями які очікують на обробку

 

I ← 1

Синтаксис Операнди Стек
SEI Нема SP ← SP + 1

 

Вплив на регістри статусу:

I T H S V N Z C
  - - - - - - -

Біт I:

Встановлюється завжди.

 

Наприклад:

sei

Завдання:

1. Проініціалізувати таблицю переривань і стек

2. Здійснити стартову настройку таймера лічильника 0

2.1 Регістр порогу порівняння OCR0 рівним 78 (десяткове число)

2.2 Регістр управління таймером-лічильником 0 TCCR0

2.2.1 Біт примусової установка результату порівняння FOC0 = 0b0

2.2.2 Режим Скидання при збігу (CTC): WGM01, WGM00 = 0b10

2.2.3 Вихід OC0 відключений: COM01, COM00 = 0b00

2.2.4 Тимчасово таймер відключений: CS02, CS01, CS00 = 0b000

2.3 У Регістр маски переривань встановити біт OCIE0 – дозвіл генерування переривань при умові, що регістр таймера-лічильника TCNT0 зрівняється з регістром порогу порівняння OCR0

2.4 Запускаємо таймер лічильник 0 з встановленням подільника частоти 256 CS02, CS01, CS00 = 0b110

2.5 Встановити біт глобального дозволу переривань (I -біт)

3. Написати обробник неочікуваного переривання[55]

3.1 Вийти з обробника переривання

4. Написати обробник переривання коли регістр таймера-лічильника TCNT0 зрівняється з регістром порогу порівняння OCR0

4.1 Зберегти регістр статусу у СТЕК

4.1.1 Завантажити регістр статусу у регістр загального призначення

4.1.2 Записати даний регістр загального призначення у стек

4.2 Тут власне кажучи мав би бути обробник переривання, який ми лишаємо пустим, або можна вставити якісь свої команди для «покращення» освоєння теми переривань у AVR мікроконтролерах

4.3 Відновити регістр статусу зі СТЕК-у

4.1.2 «Виштовхати» вмістиме стеку (збережений регістр статусу) зі стеку в регістр загального призначення

4.1.1 Записати у регістр статусу даний регістр загального призначення

4.4 Вийти з обробника переривання

5. Реалізувати безперервний цикл

6. Хід виконання програми аналогічний, як у попередній лабораторній роботі № 9 «Вивчення програмування таймера мікроконтролера AVR» [56]


Набір інструкцій

Мнемоніка Операнди Опис Дія Біти статусу Кількість машинних циклів Описано у лабораторній роботі
Арифметичні і логічні інструкції  
ADD Rd, Rr Додавання без врахування переносу Rd <— Rd + Rr Z,C,N,V,H    
ADC Rd, Rr одавання з врахуванням переносу Rd <— Rd + Rr + C Z,C,N,V,H    
ADIW Rdl,K Додавання константи до слова Rdh:Rdl <— Rdh:Rdl + K Z,C,N,V,S    
SUB Rd, Rr Віднімання без врахування переносу Rd <— Rd - Rr Z,C,N,V,H    
SUBI Rd, K Віднімання константи Rd <— Rd - K Z,C,N,V,H    
SBC Rd, Rr Віднімання з врахуванням переносу Rd <— Rd - Rr - C Z,C,N,V,H    
SBCI Rd, K Віднімання константи з врахуванням переносу Rd <— Rd - K - C Z,C,N,V,H    
SBIW Rdl,K Віднімання константи від слова Rdh:Rdl <— Rdh:Rdl-K Z,C,N,V,S    
AND Rd, Rr Логічне І Rd <— Rd · Rr Z,N,V    
ANDI Rd, K Логічне І з константою Rd <— Rd · K Z,N,V    
OR Rd, Rr Логічне АБО Rd <— Rd v Rr Z,N,V    
ORI Rd, K Логічне АБО з константою Rd <— Rd v K Z,N,V    
EOR Rd, Rr Логічне ВИКЛЮЧАЮЧЕ АБО Rd <— Rd Е Rr Z,N,V    
COM Rd Виконання порозрядного доповнення до одиниці (зворотній код) Rd <— $FF - Rd Z,C,N,V    
NEG Rd Виконання порозрядного доповнення до двох (додатковий код) Rd <— $00 - Rd Z,C,N,V,H    
SBR Rd, K Встановлення біт (біту) в регістрі Rd <— Rd v K Z,N,V    
CBR Rd, K Очистка біт (біту) в регістрі Z,N,V    
INC Rd Інкрементація Rd <— Rd + 1 Z,N,V    
DEC Rd Декрементація Rd <— Rd - 1 Z,N,V    
TST Rd Тестування на НУЛЬ або МІНУС Z,N,V    
CLR Rd Очистка регістру Z,N,V    
SER Rd Вствновлення у регістрі всіх біт у одиниці Rd <— $FF Нема 1  
MUL Rd, Rr Множення беззнакових чисел R1:R0 <— RdxRr Z, C    
MULS Rd, Rr Множення знакових чисел R1:R0 <— RdxRr Z, C    
MULSU Rd, Rr Множення знакового числа з беззнаковим числом R1:R0 <— Rd x Rr Z, C    
FMUL Rd. Rr Множення беззнакових дробових чисел R1:R0 <— (RdxRr) << 1 Z, C    
FMULS Rd, Rr Множення знакових дробових чисел R1:R0 <— (RdxRr) << 1 Z, C    
FMULSU Rd, Rr Множення знакового дробового числа із беззнаковим дробовим числом R1:R0 <— (RdxRr) << 1 Z, C    
Інструкції переходу  
RJMP k Відносний перехід PC <— PC + k +1 Нема    
IJMP   Відносний перехід по вказівнику Z PC <— Z Нема 2  
JMP k Перехід по безпосередній адресі PC <— k Нема    
RCALL k Відносний перехід до підпрограми PC <— PC + k + 1 Нема    
ICALL   Відносний перехід до підпрограми по вказівнику Z PC <— Z Нема 3  
CALL k Перехід по підпрограми PC <— k Нема 4  
RET   Вихід з підпрограми PC <— STACK Нема    
RETI   Вихід з переривання PC <— STACK I    
CPSE Rd,Rr Зрівнювання і пропуск, якщо рівне if (Rd = Rr) PC <— PC + 2 или 3 Нема 1/2/3  
CP Rd,Rr Порівняння регістрів Rd-Rr Z, N,V,C,H    
CPC Rd,Rr Порівняння регістрів із врахуванням біту переносу Rd - Rr-C Z, N,V,C,H    
CPI Rd,K Порівняння з константою Rd-K Z, N,V,C,H   3, 4
SBRC Rr,b Пропустити наступну інструкцію, якщо біт регістру очищений if (Rr(b)=O)PC <— PC + 2 или 3 Нема 1 /2/3  
SBRS Rr, b Пропустити наступну інструкцію, якщо біт регістру встанвлений if (Rr(b)=1)PC <— PC+ 2 или 3 Нема 1/2/3  
SBIC P, b Пропустити наступну інструкцію, якщо біт регістру вводу/виводу очищений if (P(b)=O)PC <— PC + 2 или 3 Нема 1 /2/3  
SBIS P, b Пропустити наступну інструкцію, якщо біт регістру вводу/виводу встановлений if (P(b)=1)PC <— PC + 2 или 3 Нема 1 /2/3  
BRBS s, k Перейти, якщо біт у Регістрі Статусу (SREG) встановлений if (SREG(s) = 1) then PC <— PC+k + 1 Нема 1/2  
BRBC s, k Перейти, якщо біт у Регістрі Статусу (SREG) очищений if (SREG(s) = 0) then PC <— PC+k + 1 Нема 1 /2  
BREQ k Перейти, якщо рівне нулю if (Z = 1) then PC <— PC + k + 1 Нема 1 /2  
BRNE k Перейти, якщо не рівне нулю if (Z = 0) then PC <— PC + k + 1 Нема 1 /2  
BRCS k Перейти, якщо біт переносу встановлений if (C = 1)then PC <— PC + k+ 1 Нема 1 /2  
BRCC k Перейти, якщо біт переносу очищений if (C = 0) then PC <— PC + k + 1 Нема 1 /2  
BRSH k Перейти, якщо рівне або більше (беззнекове) if (C = 0) then PC <— PC + k + 1 Нема 1 /2 1, 4
BRLO k Перейти, якщо менше (беззнекове) if (C = 1) then PC <— PC + k+ 1 Нема 1 /2 1, 4
BRMI k Перейти, якщо від’ємне if (N = 1)then PC <— PC + k + 1 Нема 1 /2  
BRPL k Перейти, якщо додатнє if (N = 0) then PC <— PC + k + 1 Нема 1 /2  
BRGE k Перейти, якщо рівне більше чи рівне (знакове) if (N e V= 0) then PC <— PC + k + 1 Нема 1 /2  
BRLT k Перейти, якщо менше (знакове) if (N e V= 1) then PC <— PC + k + 1 Нема 1 /2  
BRHS k Перехід, якщо біт статусу Н встановлений if (H = 1)then PC <— PC + k + 1 Нема 1 /2  
BRHC k Перехід, якщо біт статусу Н скинутий if (H = 0) then PC <— PC + k + 1 Нема 1 /2  
BRTS k Перехід, якщо біт статусу T встановлений if (T = 1)then PC <— PC + k +1 Нема 1 /2  
BRTC k Перехід, якщо біт статусу T скинутий if (T = 0) then PC <— PC + k + 1 Нема 1 /2  
BRVS k Перейти, якщо біт переповнення встановлений if (V = 1)then PC <— PC + k+ 1 Нема 1 /2  
BRVC k Перейти, якщо біт переповнення очищений if (V = 0) then PC <— PC + k + 1 Нема 1 /2  
BRIE k Перехід, якщо біт голобального дозволу переривань встановлений if (I = 1)then PC <— PC + k + 1 Нема 1 /2  
BRID k Перехід, якщо біт голобального дозволу переривань скинутий if (I = 0) then PC <— PC + k + 1 Нема 1 /2  
Інструкцї передачі даних  
MOV Rd, Rr Копіювання регістру Rd <— Rr Нема    
MOVW Rd, Rr Копіювання слів між регістрами Rd+1:Rd <— Rr+1:Rr Нема 1  
LDI Rd, K Безпосереднє завантаження константи у регістр Rd <— K Нема    
LD Rd, X Завантаження у регістр з пам’яті даних методом непрямої адресації Rd <— (X) Нема    
LD Rd, X+ Завантаження у регістр з пам’яті даних методом непрямої адресації і постінкрементація Rd <— (X), X <— X + 1 Нема    
LD Rd,-X Предекрементація і потім завантаження у регістр з пам’яті даних методом непрямої адресації X <— X - 1, Rd <— (X) Нема    
LD Rd,Y Завантаження у регістр з пам’яті даних методом непрямої адресації Rd <— (Y) Нема    
LD Rd, Y+ Завантаження у регістр з пам’яті даних методом непрямої адресації і постінкрементація Rd <— (Y), Y <— Y + 1 Нема    
LD Rd,-Y Предекрементація і потім завантаження у регістр з пам’яті даних методом непрямої адресації Y <— Y - 1, Rd <— (Y) Нема    
LDD Rd,Y+q Завантаження у регістр з пам’яті даних методом непрямої адресації зі зміщенням Rd <— (Y + q) Нема    
LD Rd, Z Завантаження у регістр з пам’яті даних методом непрямої адресації Rd <— (Z) Нема    
LD Rd, Z+ Завантаження у регістр з пам’яті даних методом непрямої адресації і постінкрементація Rd <— (Z),Z <— Z+1 Нема    
LD Rd.-Z Предекрементація і потім завантаження у регістр з пам’яті даних методом непрямої адресації Z <— Z - 1, Rd <— (Z) Нема    
LDD Rd, Z+q Завантаження у регістр з пам’яті даних методом непрямої адресації зі зміщенням Rd <— (Z + q) Нема    
LDS Rd, k Завантаження з пам’яті даних методом прямої адресації Rd <— (k) Нема    
ST X, Rr Запис у пам’ять даних з регістра методом непрямої адресації (X) <— Rr Нема    
ST X+, Rr Запис у пам’ять даних з регістра методом непрямої адресації і постінкрементація (X) <— Rr, X <— X + 1 Нема    
ST -X, Rr Предекрементація і потім запис у пам’ять даних з регістра методом непрямої адресації X <— X - 1, (X) <— Rr Нема    
ST Y, Rr Запис у пам’ять даних з регістра методом непрямої адресації (Y) <— Rr Нема    
ST Y+, Rr Запис у пам’ять даних з регістра методом непрямої адресації і постінкрементація (Y) <— Rr, Y <— Y + 1 Нема    
ST -Y, Rr Предекрементація і потім запис у пам’ять даних з регістра методом непрямої адресації Y <— Y - 1, (Y) <— Rr Нема    
STD Y+q,Rr Запис у пам’ять даних з регістра методом непрямої адресації зі зміщенням (Y + q) <— Rr Нема    
ST Z, Rr Запис у пам’ять даних з регістра методом непрямої адресації (Z) <— Rr Нема    
ST Z+, Rr Запис у пам’ять даних з регістра методом непрямої адресації і постінкрементація (Z) <— Rr, Z <— Z + 1 Нема    
ST -Z. Rr Предекрементація і потім запис у пам’ять даних з регістра методом непрямої адресації Z <— Z - 1, (Z) <— Rr Нема    
STD Z+q,Rr Запис у пам’ять даних з регістра методом непрямої адресації зі зміщенням (Z + q) <— Rr Нема    
STS k, Rr Запис у пам’ять даних регістра методом прямої адресації (k) <— Rr Нема    
LPM   Читання з пам’яті програм R0 <— (Z) Нема 3  
LPM Rd, Z Читання з пам’яті програм Rd <— (Z) Нема 3  
LPM Rd, Z+ Читання з пам’яті програм і наступною постінкрементацією Rd <— (Z), Z <— Z+1 Нема 3  
ELPM   Розширене читання з пам’яті програм R0 <— (RAMPZ:Z) Нема 3  
ELPM Rd, Z Розширене читання з пам’яті програм Rd <— (RAMPZ:Z) Нема 3  
ELPM Rd, Z+ Розширене читання з пам’яті програм наступною постінкрементацією Rd <— (RAMPZ:Z), RAMPZ:Z <— RAMPZ:Z+1 Нема 3  
SPM   Запис у пам’ять програм (Z) <— R1:R0 Нема -  
IN Rd, P Загрузити вмістиме регістрів вводу/виводу у регістр загального призначення Rd <— P Нема    
OUT P, Rr Записали вмістиме регістру загального призначення у регістр вводу/виводу P <— Rd Нема    
PUSH Rr “Заштовхати” регістр у стек STACK <— Rr Нема    
POP Rd “Виштовхати” регістр зі стеку Rd <— STACK Нема    
Бітові інструкції і інструкції тестуванні біт  
SBI P,b Установлення біту в регістрі вводу-виводу l/O(P,b) <— 1 Нема    
CBI P,b Очистка біту в регістрі вводу-виводу l/O(P,b) <— 0 Нема    
LSL Rd Логічний зсув вліво Rd(n+1) <— Rd(n), Rd(0) <— 0 Z,C,N,V    
LSR Rd Логічний зсув вправо Rd(n) <— Rd(n+1), Rd(7) <— 0 Z,C,N,V    
ROL Rd Зсув вліво через переном Rd(0)<— C,Rd(n+1)<— Rd(n),C <— Rd(7) Z,C,N,V 1  
ROR Rd Зсув вправо через переном Rd(7) <— C,Rd(n)<— Rd(n+1),C <— Rd(0) Z,C,N,V 1  
ASR Rd Арифметичний зсув вправо Rd(n)<— Rd(n+1), n=0..6 Z,C,N,V 1  
SWAP Rd Обмін тетрадами Rd(3..0) <— Rd(7..4), Rd(7..4) <— Rd(3..0) Нема 1  
BSET s Встановлення біту регістру статусу SREG SREG(s) <— 1 SREG(s) 1  
BCLR s Скидання біту регістру статусу SREG SREG(s) <— 0 SREG(s) 1  
BST Rr, b Запис біту регістра у біт T регістру статусу SREG T <— Rr(b) T 1  
BLD Rd, b Читання з біту T регістру статусу SREG у регістр Rd(b) <— T Нема 1  
SEC   Встановлення біту переносу (C) C <— 1 C 1  
CLC   Очистка біту переносу (C) C <— 0 C    
SEN   Встановлення біту N регістра статусу SREG N <— 1 N 1  
CLN   Очищення біту N регістра статусу SREG N <— 0 N 1  
SEZ   Встановлення біту Z регістра статусу SREG Z <— 1 Z 1  
CLZ   Очищення біту Z регістра статусу SREG Z <— 0 Z 1  
SEI   Встановлення біту глобального дозволу переривань l<— 1 I    
CLI   Скидання біту глобального дозволу переривань l <— 0 I    
SES   Встановлення біту S регістра статусу SREG S <— 1 S 1  
CLS   Очищення біту S регістра статусу SREG S <— 0 S 1  
SEV   Встановлення біту V регістра статусу SREG V <— 1 V 1  
CLV   Очищення біту V регістра статусу SREG V <— 0 V 1  
SET   Встановлення біту T регістра статусу SREG T <— 1 T 1  
CLT   Очищення біту T регістра статусу SREG T <— 0 T 1  
SEH   Встановлення біту H регістра статусу SREG H <— 1 H 1  
CLH   Очищення біту H регістра статусу SREG H <— 0 H 1  
Інструкції управління мікроконтролером  
NOP   Немає операції   Нема    
SLEEP   Перехід у режим сну (Sleep Mode) (см. подробное описание режима сна) Нема 1  
WDR   Скидання сторожового таймеру (WatchDog) (см. подробное описание сторожевого таймера) Нема 1  
BREAK   Перехід у Stop Mode Только для встроенной отладки Нема -  

 


[1] Наймолодший біт байту LSB (least significant bit – англ.) позначається номером 0, а найстарший біт байту MSB (most significant bit – англ.) позначається номером 7. Біт під номером 3 – це найстарший біт молодшої тетроди байту, а біт під номером 4 – це наймолодший біт старшої тетроди байту

[2] Для чисел без знаку (коли числа представляються у прямому коді і найстарший біт байту приймає участь у формування модуля числа) однобайтними числами є числа з діапазону [0; 255]. У випадку знакових чисел (коли числа представляються у додатковому коді і найстарший байт не приймає участь у формування модуля числа, а відповідає за знак) однобайтними числами є числа з діапазону [-127; 127]. Біт V встановлюється у тому випадку, коли у результаті арифметичної чи логічної операції ми виходимо за цей діапазон.

[3] Як правило (зокрема і для асемблера AVR Studio) під словом розуміють ціле число довжиною у два байти

[4] Біти встановлюються з урахуванням того, що відбувається додавання константи до двобайтного числа, а не однобайтного.

[5] У програмування зміщення вліво означає зміщення у сторону старших розрядів, а зміщення вправо – с сторону молодших розрядів.

[6] При відніманні чи додаванні від’ємного числа треба мати на увазі, що від’ємн числа представляються у додатковому коді

[7] Зручно при ініціалізації SP при ініціалізації програми вказати SP як адресу останньої комірки SRAM

[8] Ця фраза не стосується мікроконтролера ATMEGA128

[9][9] pre означає попередній

[10] Декрементація означає зменшення на одиницю

[11][11] post означає після

[12] Інкрементація означає збільшення на одиницю

[13] Номер відносно першої адреси регістрів вводу/виводу

[14] Опис цієї директиви читайте в описі AVR Studio асемблера

[15] Опис цієї директиви читайте у описі до лабораторної роботи № 5

[16] Існує ще інструкція переходу до підпрограми по абсолютній адресі без обмеження у адресному просторі CALL, абе вона виконується довше. Аналогічно існує налог команді відносного переходу RJMP - JMP

[17] К – це кількість проініціалізованих елементів арифметичної прогресії, яке відповідає умові завершення формування наступних елементів арифметичної прогресії, описане вище у програмі виконання роботи

[18] Вказівник – це об’єкт (наприклад змінна, чи регістр) який вказує на комірку пам’яті адресного простору

[19] Опис цієї директиви читайте в описі AVR Studio асемблера

[20] Перший символ (Z, Y чи Z) означає Z, Y чи Z регістр відповідно. Другий символ (L чи Н) є початковим символом слова LOW (молодший) і HIGH (старший) – що означає молодший чи старший байт регістра-вказівника.

[21] Можна реалізувати свій варіант алгоритму циклу. Є декілька можливостей його реалізації.

[22] Умовами даної лабораторної роботи передбачено що зупинкою підрахунку наступних елементів арифметичної прогресії є:

1-е) наступний елемент арифметичної прогресії стає двобайтних числом (додавання двох однобайтних чисел дає перенос у старші розряди)

2-е) Сума арифметичної прогресії стає трьохбайтним числом. Тобто третій байт суми стає відмінним від нуля.

А це означає, що треба розраховувати, що сума може стати трьохбайтним числом і вести відповідні розрахунки, маючи це на увазі.

[23] Умова даної лабораторної роботи передбачає, що всі елементи арифметичної прогресії і різниця арифметичної прогресії є однобайтними числами

[24] Оскільки вихід з циклу може бути не тільки при умові, коли всі елементи порініціалізовані, але і коли сума стане трьохбайтним числом чи елемент арифметичної прогресії стане двохбайтним числом, то кількість ітерацій не обов’язково має бути рівна N

[25] Наприклад:

stop: rjmp stop

[26] При виконанні інструкцій переходу після порівняння треба використовувати тільки ті інструкції, які підходять для знакових чисел і числами можуть бути тільки числа з діапазону

[27] зверніть увагу, що параметром є однобайтне беззнакове число. Тому при виконанні інструкцій переходу після порівняння треба використовувати тільки ті інструкції, які підходять для беззнакових чисел і числами можуть бути тільки числа з діапазону

[28] Для простоти у тілі циклу можна помістити тільки інструкцію NOP, або будь-яку іншу інструкцію яка не впливає на роботу циклу.

[29] Див. зноску 27

[30] Див. зноску 28

[31] Див. зноску 27

[32] Див. зноску 28

[33] Див. зноску 27

[34] Див. зноску 28

[35] Знакова однобайтна змінна, яка мала бути об’явлена згідно п.2 Див. зноску 26

[36] Див. зноску 35

[37] Див. зноску 28

[38] Див. зноску 35

[39] Див. зноску 35

[40] Див. зноску 28

[41] Див. зноску 28

[42] Див. зноску 35

[43] Див. зноску 35

[44] Біт, який відповідає за знак числа

[45] Див. зноску 44

[46] Множення на – це те саме, що зміщення вліво (у сторону старших біт) на 8 позицій. Іншими словами зміщення на 8 – це переміщення одного байту в старший наступний байт

[47] Номер відносно першої адреси регістрів вводу/виводу. Якщо у таблиці не вказано номер регістру вводу видоду. то це значить, що даний регістр відноситься до розширених регістрів вводу-виводу і доступитися до ним можна з допомогою відносної адресації через регістри X, Y і Z, а інструкції IN і OUT для них не підходять. Якщо ж номер регістру вводу-виводу вказаний, то цей регістр відноситься рдо регістрів вводу-виводу і до них можна використовувати як інструкції IN і OUT, так і методами непрямої адресації, як для розширених регістрів вводу виводу.

Зверніть увагу на те, що в інструкціях IN і OUT вказується не адреса комірки регістра у пам’яті даних. а номер регістра. При доступі до будь-якого регістра методом непрямої адресації через регістри X, Y і Z треба вказувати адресу комірки пам’яті даних, а не номер регістру!!!

[48] Цей режим не використовується у даній лабораторній роботі, тому опис його опущений

[49] Див. зноску 48

[50] Real Time Clock – годинник реального часу

[51] Див зноску 47 лабораторної роботи № 8 «Вивчення програмування паралельного порту вводу-виводу мікроконтролера AVR»

[52] Цю операцію треба виконати так, щоб інші біти регістру управління таймером-лічильником 0 залишилися незміненими. Тобто треба зчитати регістр управління TCCR0 у регістр загального призначення, потім змінити відповідні біти і змінений регістр загального призначення знову записати у регістр вводу-виводу TCCR0

[53] Про регістр TIFR і його біти читайте у теоретичному матеріалі до цієї лабораторної роботи

[54] Методика аналогічна, як у лабораторній роботі № 9

[55] Цей пункт є обов’язковим тільки у тому випадку, коли у таблиці переривань реалізовано перехід на цей обробник

[56] Другу breakpoint треба помістити не у підпрограмі очистки біту OCF0 (бо цю підпрограму ми видалили для цієї лабораторної роботи, так як цей біт автоматично очищується при генерації переривання при встановленні цього біту), а у обробнику переривання



Поделиться:


Последнее изменение этой страницы: 2016-04-18; просмотров: 333; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.128.129 (0.088 с.)