- •По дисципліні
- •Харків 2010
- •1 Вивчення системи команд і основних принципів програмування мікроконтролерів на прикладі керування блоком світлодіодів
- •1.1 Вказівки по організації самостійної роботи
- •1.1.2. Програмна модель мікроконтролера avr mega128. Механізм роботи з регістрами, пам'яттю й портами вводу/вивода.
- •1.1.3 Система команд мікроконтролера avr mega128.
- •1.1.4. Синтаксис і основні оператори мови с.
- •1.1.5. Принципи програмного керування світлодіодами, підключеними до зовнішніх виводів портів вводу/виводу мікроконтролера avr atmega128.
- •1.2 Опис лабораторної установки
- •1.2.1. Опис лабораторного макета.
- •Мікроконтролера avr atmega 128
- •1.2.2. Опис блоку світлодіодів лабораторного макета.
- •1.2.3. Опис інтерфейсу компілятора мови з CodeVision avr.
- •1.3 Порядок проведення роботи й вказівки по її виконанню
- •1.5 Контрольні питання й завдання
- •2 Вивчення режиму програмного опитування клавіатури
- •2.1 Вказівки по організації самостійної роботи
- •2.1.1. Принципи аналізу натискання стандартних кнопок за допомогою мікроконтролера avr mega128.
- •2.1.2. Принципи зчитування даних з матричної клавіатури за допомогою мікроконтролера avr атmega128 у режимі програмного опитування.
- •2.2 Опис лабораторної установки
- •2.3 3Порядок проведення роботи й вказівки по її виконанню.
- •Контрольні питання й завдання
- •3 Вивчення принципів програмного керування зовнішніми пристроями на прикладі виводу інформації на цифровий індикатор
- •3.1 Вказівки по організації самостійної роботи
- •3.2 Опис лабораторної установки
- •3.3 Порядок проведення роботи й вказівки по її виконанню
- •Контрольні питання й завдання
- •4 Вивчення принципів обробки переривань на прикладі керування вбудованими у мікроконтролер таймерами-лічильниками
- •4.1 Вказівки по організації самостійної роботи
- •4.1.1. Система переривань у мікроконтролері avr атmega 128.
- •4.1.2. Принципи функціонування апаратних таймерів-лічильників, що входять до складу мікроконтролера avr атmega 128.
- •4.2 Опис лабораторної установки
- •Порядок проведення роботи й вказівки по її виконанню
- •Контрольні питання й завдання
- •5 Вивчення принципів організації обміну даними по послідовному інтерфейсі rs-232c між мікроконтролером avr атmega128 і пеом
- •Вказівки по організації самостійної роботи.
- •5.1.1. Принципи обміну даними по послідовному інтерфейсі rs-232c.
- •5.2 Опис лабораторної установки
- •5.3 Порядок проведення роботи й вказівки по її виконанню
- •Контрольні питання й завдання
- •6 Вивчення принципів роботи з вбудованим у мікроконтролер аналого-цифровим перетворювачем на прикладі виміру температури за допомогою аналогового термодатчика.
- •6.1 Вказівки по організації самостійної роботи
- •6.2 Опис лабораторної установки
- •6.3 Порядок проведення роботи й вказівки по її виконанню
- •6.5 Контрольні питання й завдання
- •Рекомендована література
- •Додаток 1 розташування виводів мікроконтроллера
- •Додаток 2 інструкції процесорів avr
- •До лабораторних робіт з дисциплін
6.5 Контрольні питання й завдання
Поясніть принцип роботи вбудованого в мікроконтролер 10-розрядного АЦП.
Назвіть основні керуючі регістри АЦП, вбудованого в мікроконтролер, і поясніть їх функції.
Поясніть принцип виміру температури за допомогою термодатчика.
Для чого застосовується вирівнювання результату по лівій або правій границі слова ?
Поясніть можливості передачі даних про температуру в ПЕОМ.
Поясніть можливість відображення даних про температуру на екрані цифрового індикатора Holtek НТ1613, розглянутого в лабораторній роботі № 3.
Рекомендована література
Евстифеев А.В. Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL. – М.: Изд. дом Додэка-ХХI, 2004. – 560 с.
Голубцов М.С., Кириченкова А.В. Микроконтроллеры AVR: от простого к сложному.- М.: СОЛОН-Пресс, 2004. – 304 с.
Баранов В.Н. Применение микроконтроллеров AVR: схемы, алгоритмы, программы.- М.: Издательский дом “Додэка-XXI”, 2004. – 288 с.
http://www.atmel.ru/ – описание микроконтроллеров фирмы ATMEL на русском языке.
Додаток 1 розташування виводів мікроконтроллера
AVR АТMEGA 128
Додаток 2 інструкції процесорів avr
Таблиця П. 2.1 – Арифметичні й логічні команди.
Мнемоніка |
Операнди |
Опис |
Операція |
Прапори |
Цикли |
ADD |
Rd,Rr |
Підсумовування без переносу |
Rd = Rd + Rr |
Z,C,N,V,H,S |
1 |
ADC |
Rd,Rr |
Підсумовування з переносом |
Rd = Rd + Rr + C |
Z,C,N,V,H,S |
1 |
SUB |
Rd,Rr |
Вирахування без переносу |
Rd = Rd - Rr |
Z,C,N,V,H,S |
1 |
SUBI |
Rd,K8 |
Вирахування константи |
Rd = Rd - K8 |
Z,C,N,V,H,S |
1 |
SBC |
Rd,Rr |
Вирахування з переносом |
Rd = Rd - Rr - C |
Z,C,N,V,H,S |
1 |
SBCI |
Rd,K8 |
Вирахування константи з переносом |
Rd = Rd - K8 - C |
Z,C,N,V,H,S |
1 |
AND |
Rd,Rr |
Логічне І |
Rd = Rd · Rr |
Z,N,V,S |
1 |
ANDI |
Rd,K8 |
Логічне І с константою |
Rd = Rd · K8 |
Z,N,V,S |
1 |
OR |
Rd,Rr |
Логічне АБО |
Rd = Rd V Rr |
Z,N,V,S |
1 |
ORI |
Rd,K8 |
Логічне АБО з константою |
Rd = Rd V K8 |
Z,N,V,S |
1 |
EOR |
Rd,Rr |
Логічне виключаюче АБО |
Rd = Rd EOR Rr |
Z,N,V,S |
1 |
COM |
Rd |
Побітна Інверсія |
Rd = $FF - Rd |
Z,C,N,V,S |
1 |
NEG |
Rd |
Зміна знака (Доп. код) |
Rd = $00 - Rd |
Z,C,N,V,H,S |
1 |
SBR |
Rd,K8 |
Установити біт (біти) у регістрі |
Rd = Rd V K8 |
Z,C,N,V,S |
1 |
CBR |
Rd,K8 |
Скинути біт (біти) у регістрі |
Rd = Rd · ($FF - K8) |
Z,C,N,V,S |
1 |
INC |
Rd |
Інкрементувати значення регістру |
Rd = Rd + 1 |
Z,N,V,S |
1 |
DEC |
Rd |
Декрементувати значення регістру |
Rd = Rd -1 |
Z,N,V,S |
1 |
TST |
Rd |
Перевірка на нуль або заперечність |
Rd = Rd · Rd |
Z,C,N,V,S |
1 |
CLR |
Rd |
Очистити регістр |
Rd = 0 |
Z,C,N,V,S |
1 |
SER |
Rd |
Установити регістр |
Rd = $FF |
None |
1 |
ADIW |
Rdl,K6 |
Скласти константу й слово |
Rdh:Rdl = Rdh:Rdl + K6 |
Z,C,N,V,S |
2 |
SBIW |
Rdl,K6 |
Відняти константу зі слова |
Rdh:Rdl = Rdh:Rdl - K6 |
Z,C,N,V,S |
2 |
MUL |
Rd,Rr |
Множення чисел без знака |
R1:R0 = Rd * Rr |
Z,C |
2 |
MULS |
Rd,Rr |
Множення чисел зі знаком |
R1:R0 = Rd * Rr |
Z,C |
2 |
MULSU |
Rd,Rr |
Множення числа зі знаком із числом без знака |
R1:R0 = Rd * Rr |
Z,C |
2 |
FMUL |
Rd,Rr |
Множення дробових чисел без знака |
R1:R0 = (Rd * Rr) << 1 |
Z,C |
2 |
FMULS |
Rd,Rr |
Множення дробових чисел зі знаком |
R1:R0 = (Rd *Rr) << 1 |
Z,C |
2 |
FMULSU |
Rd,Rr |
Множення дробового числа зі знаком із числом без знака |
R1:R0 = (Rd * Rr) << 1 |
Z,C |
2 |
Таблиця П. 2.2. – Команди розгалуження
Мнемоніка |
Операнди |
Опис |
Операція |
Прапори |
Цикли |
RJMP |
k |
Відносний перехід |
PC = PC + k +1 |
None |
2 |
IJMP |
Немає |
Непрямий перехід на (Z) |
PC = Z |
None |
2 |
EIJMP |
Немає |
Розширений непрямий перехід на (Z) |
STACK = PC+1, PC(15:0) = Z, PC(21:16) = EIND |
None |
2 |
JMP |
k |
Перехід |
PC = k |
None |
3 |
RCALL |
k |
Відносний виклик підпрограми |
STACK = PC+1, PC = PC+k+1 |
None |
3/4* |
ICALL |
Немає |
Непрямий виклик (Z) |
STACK = PC+1, PC = Z |
None |
3/4* |
EICALL |
Немає |
Розширений непрямий виклик (Z) |
STACK = PC+1, PC(15:0) = Z, PC(21:16) =EIND |
None |
4* |
CALL |
k |
Виклик підпрограми |
STACK = PC+2, PC = k |
None |
4/5* |
RET |
Немає |
Повернення з підпрограми |
PC = STACK |
None |
4/5* |
RETI |
Немає |
Повернення з переривання |
PC = STACK |
I |
4/5* |
CPSE |
Rd,Rr |
Зрівняти, пропустити якщо рівні |
if (Rd ==Rr) PC = PC 2 or 3 |
None |
1/2/3 |
CP |
Rd,Rr |
Зрівняти |
Rd -Rr |
Z,C,N,V,H,S |
1 |
CPC |
Rd,Rr |
Зрівняти з переносом |
Rd - Rr - C |
Z,C,N,V,H,S |
1 |
CPI |
Rd,K8 |
Зрівняти з константою |
Rd - K |
Z,C,N,V,H,S |
1 |
SBRC |
Rr,b |
Пропустити якщо біт у регістрі очищений |
if(Rr(b)==0) PC = PC+2 or 3 |
None |
1/2/3 |
SBRS |
Rr,b |
Пропустити якщо біт у регістрі встановлений |
if(Rr(b)==1) PC = PC+2 or 3 |
None |
1/2/3 |
SBIC |
P,b |
Пропустити якщо біт у порту очищений |
if(I/O(P,b)==0) PC = PC+ or 3 |
None |
1/2/3 |
SBIS |
P,b |
Пропустити якщо біт у порту встановлений |
if(I/O(P,b)==1) PC = PC+2 or 3 |
None |
1/2/3 |
BRBC |
s,k |
Перейти якщо прапор в SREG очищений |
if(SREG(s)==0) PC = PC+k+1 |
None |
1/2 |
BRBS |
s,k |
Перейти якщо прапор в SREG установлений |
if(SREG(s)==1) PC = PC+k+1 |
None |
1/2 |
BREQ |
k |
Перейти якщо дорівнює |
if(Z==1) PC = PC + k + 1 |
None |
1/2 |
BRNE |
k |
Перейти якщо не дорівнює |
if(Z==0) PC = PC + k + 1 |
None |
1/2 |
BRCS |
k |
Перейти якщо перенос установлений |
if(C==1) PC = PC + k + 1 |
None |
1/2 |
BRCC |
k |
Перейти якщо перенос очищений |
if(C==0) PC = PC + k + 1 |
None |
1/2 |
BRSH |
k |
Перейти якщо дорівнює або більше |
if(C==0) PC = PC + k + 1 |
None |
1/2 |
BRLO |
k |
Перейти якщо менше |
if(C==1) PC = PC + k + 1 |
None |
1/2 |
BRMI |
k |
Перейти якщо мінус |
if(N==1) PC = PC + k + 1 |
None |
1/2 |
BRPL |
k |
Перейти якщо плюс |
if(N==0) PC = PC + k + 1 |
None |
1/2 |
BRGE |
k |
Перейти якщо більше або дорівнює (зі знаком) |
if(S==0) PC = PC + k + 1 |
None |
1/2 |
BRLT |
k |
Перейти якщо менше (зі знаком) |
if(S==1) PC = PC + k + 1 |
None |
1/2 |
BRHS |
k |
Перейти якщо прапор внутрішнього переносу встановлений |
if(H==1) PC = PC + k + 1 |
None |
1/2 |
BRHC |
k |
Перейти якщо прапор внутрішнього переносу очищений |
if(H==0) PC = PC + k + 1 |
None |
1/2 |
BRTS |
k |
Перейти якщо прапор T установлений |
if(T==1) PC = PC + k + 1 |
None |
1/2 |
BRTC |
k |
Перейти якщо прапор T очищений |
if(T==0) PC = PC + k + 1 |
None |
1/2 |
BRVS |
k |
Перейти якщо прапор переповнення встановлений |
if(V==1) PC = PC + k + 1 |
None |
1/2 |
BRVC |
k |
Перейти якщо прапор переповнення очищений |
if(V==0) PC = PC + k + 1 |
None |
1/2 |
BRIE |
k |
Перейти якщо переривання дозволені |
if(I==1) PC = PC + k + 1 |
None |
1/2 |
BRID |
k |
Перейти якщо переривання заборонені |
if(I==0) PC = PC + k + 1 |
None |
1/2 |
* Для операцій доступу до даних кількість циклів зазначена за умови доступу до внутрішньої пам'яті даних, і не коректно при роботі із зовнішнім ОЗУ. Для інструкцій CALL, ICALL, EICALL, RCALL, RET і RETI, необхідно додати три цикли плюс по два циклу для кожного очікування в контролерах з PC меншим 16 біт (128KB пам'яті програм). Для пристроїв з пам'яттю програм понад 128KB , додайте п'ять циклів плюс по три циклу на кожне очікування.
Таблиця П. 2.3 – Команди пересилання даних
Мнемоніка |
Операнди |
Опис |
Операція |
Прапори |
Цикли |
MOV |
Rd,Rr |
Скопіювати регістр |
Rd = Rr |
– |
1 |
MOVW |
Rd,Rr |
Скопіювати пари регістрів |
Rd+1:Rd = Rr+1:Rr, r,d even |
– |
1 |
LDI |
Rd,K8 |
Завантажити константу |
Rd = K |
– |
1 |
LDS |
Rd,k |
Пряме завантаження |
Rd = (k) |
– |
2* |
LD |
Rd,X |
Непряме завантаження |
Rd = (X) |
– |
2* |
LD |
Rd,X+ |
Непряме завантаження з пост-інкрементом |
Rd = (X), X=X+1 |
– |
2* |
LD |
Rd,-X |
Непряме завантаження із пре-декрементом |
X=X-1, Rd = (X) |
– |
2* |
LD |
Rd,Y |
Непряме завантаження |
Rd = (Y) |
– |
2* |
LD |
Rd,Y+ |
Непряме завантаження з пост-інкрементом |
Rd = (Y), Y=Y+1 |
– |
2* |
LD |
Rd,-Y |
Непряме завантаження із пре-декрементом |
Y=Y-1, Rd = (Y) |
– |
2* |
LDD |
Rd,Y+q |
Непряме завантаження із заміщенням |
Rd = (Y+q) |
– |
2* |
LD |
Rd,Z |
Непряме завантаження |
Rd = (Z) |
– |
2* |
LD |
Rd,Z+ |
Непряме завантаження з пост-інкрементом |
Rd = (Z), Z=Z+1 |
– |
2* |
LD |
Rd,-Z |
Непряме завантаження із пре-декрементом |
Z=Z-1, Rd = (Z) |
– |
2* |
LDD |
Rd,Z+q |
Непряме завантаження із заміщенням |
Rd = (Z+q) |
– |
2* |
STS |
k,Rr |
Пряме збереження |
(k) = Rr |
– |
2* |
ST |
X,Rr |
Непряме збереження |
(X) = Rr |
– |
2* |
ST |
X+,Rr |
Непряме збереження з пост-інкрементом |
(X) = Rr, X=X+1 |
– |
2* |
ST |
-X,Rr |
Непряме збереження із пре-декрементом |
X=X-1, (X)=Rr |
– |
2* |
ST |
Y,Rr |
Непряме збереження |
(Y) = Rr |
– |
2* |
ST |
Y+,Rr |
Непряме збереження з пост-інкрементом |
(Y) = Rr, Y=Y+1 |
– |
2 |
ST |
-Y,Rr |
Непряме збереження із пре-декрементом |
Y=Y-1, (Y) = Rr |
– |
2 |
ST |
Y+q,Rr |
Непряме збереження із заміщенням |
(Y+q) = Rr |
– |
2 |
ST |
Z,Rr |
Непряме збереження |
(Z) = Rr |
– |
2 |
ST |
Z+,Rr |
Непряме збереження з пост-інкрементом |
(Z) = Rr, Z=Z+1 |
– |
2 |
ST |
-Z,Rr |
Непряме збереження із пре-декрементом |
Z=Z-1, (Z) = Rr |
– |
2 |
ST |
Z+q,Rr |
Непряме збереження із заміщенням |
(Z+q) = Rr |
– |
2 |
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), Z = Z+1 |
– |
3 |
SPM |
Немає |
Збереження в програмній пам'яті |
(Z) = R1:R0 |
– |
- |
ESPM |
Немає |
Розширене збереження в пам'яті програм |
(RAMPZ:Z) = R1:R0 |
– |
- |
IN |
Rd,P |
Читання порту |
Rd = P |
– |
1 |
OUT |
P,Rr |
Запис у порт |
P = Rr |
– |
1 |
PUSH |
Rr |
Занесення регістра в стек |
STACK = Rr |
– |
2 |
POP |
Rd |
Витяг регістра зі стека |
Rd = STACK |
– |
2 |
* Для операцій доступу до даних кількість циклів зазначена за умови доступу до внутрішньої пам'яті даних, і не коректно при роботі із зовнішнім ОЗУ. Для інструкцій LD, ST, LDD, STD, LDS, STS, PUSH і POP, необхідно додати один цикл.
Таблиця П. 2.4 – Команди для роботи з бітами.
Мнемоніка |
Операнди |
Опис |
Операція |
Прапори |
Цикли |
LSL |
Rd |
Логічний зсув вліво |
Rd(n+1)=Rd(n), Rd(0) =0, C=Rd(7) |
Z,C,N,V,H,S |
1 |
LSR |
Rd |
Логічний зсув вправо |
Rd(n)=Rd(n+1), Rd(7) =0, C=Rd(0) |
Z,C,N,V,S |
1 |
ROL |
Rd |
Циклічний зсув вліво через C |
Rd(0) =C, Rd(n+1)=Rd(n), C=Rd(7) |
Z,C,N,V,H,S |
1 |
ROR |
Rd |
Циклічний зсув вправо через C |
Rd(7) =C, Rd(n)=Rd(n+1), C=Rd(0) |
Z,C,N,V,S |
1 |
ASR |
Rd |
Арифметичний зсув вправо |
Rd(n)=Rd(n+1), n=0,...,6 |
Z,C,N,V,S |
1 |
SWAP |
Rd |
Перестановка тетрад |
Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0) |
None |
1 |
BSET |
s |
Установка прапора |
SREG(s) = 1 |
SREG(s) |
1 |
BCLR |
s |
Очищення прапора |
SREG(s) = 0 |
SREG(s) |
1 |
SBI |
P,b |
Установити біт в порту |
I/O(P,b) = 1 |
None |
2 |
CBI |
P,b |
Очистити біт в порту |
I/O(P,b) = 0 |
None |
2 |
BST |
Rr,b |
Зберегти біт з регістра в T |
T = Rr(b) |
T |
1 |
BLD |
Rd,b |
Завантажити біт з T у регістр |
Rd(b) = T |
None |
1 |
SEC |
Немає |
Установити прапор переносу |
C =1 |
C |
1 |
CLC |
Немає |
Очистити прапор переносу |
C = 0 |
C |
1 |
SEN |
Немає |
Установити прапор негативного числа |
N = 1 |
N |
1 |
CLN |
Немає |
Очистити прапор негативного числа |
N = 0 |
N |
1 |
SEZ |
Немає |
Установити прапор нуля |
Z = 1 |
Z |
1 |
CLZ |
Немає |
Очистити прапор нуля |
Z = 0 |
Z |
1 |
SEI |
Немає |
Установити прапор переривань |
I = 1 |
I |
1 |
CLI |
Немає |
Очистити прапор переривань |
I = 0 |
I |
1 |
SES |
Немає |
Установити прапор числа зі знаком |
S = 1 |
S |
1 |
CLN |
Немає |
Очистити прапор числа зі знаком |
S = 0 |
S |
1 |
SEV |
Немає |
Установити прапор переповнення |
V = 1 |
V |
1 |
CLV |
Немає |
Очистити прапор переповнення |
V = 0 |
V |
1 |
SET |
Немає |
Установити прапор T |
T = 1 |
T |
1 |
CLT |
Немає |
Очистити прапор T |
T = 0 |
T |
1 |
SEH |
Немає |
Установити прапор внутрішнього переносу |
H = 1 |
H |
1 |
CLH |
Немає |
Очистити прапор внутрішнього переносу |
H = 0 |
H |
1 |
NOP |
Немає |
Немає операції |
Немає |
None |
1 |
SLEEP |
Немає |
Спати (зменшити енергоспоживання) |
Дивіться опис інструкції |
None |
1 |
WDR |
Немає |
Скидання сторожового таймера |
Дивіться опис інструкції |
None |
1 |
У мові Assembler немає розходження в регістрі символів.
Операнды можуть бути наступних видів:
Rd: Результуючий (і вихідний) регістр у регістровому файлі;
Rr: Вихідний регістр у регістровому файлі;
b: Константа (3 біти), або константне вираження;
s: Константа (3 біти), або константне вираження;
P: Константа (5-6 біт), або константне вираження;
K6; Константа (6 біт), або константне вираження;
K8: Константа (8 біт), або константне вираження;
k: Константа (розмір залежить від інструкції), або константне вираження;
q: Константа (6 біт), або константне вираження;
Rdl: R24, R26, R28, R30. Для інструкцій ADIW і SBIW ;
X,Y,Z: Регістри непрямої адресації
(X=R27:R26, Y=R29:R28, Z=R31:R30).
Навчальне видання
МЕТОДИЧНІ ВКАЗІВКИ
