Смекни!
smekni.com

Разработка программной и аппаратной поддержки к методическим указаниям Программирование микроконтроллеров (стр. 15 из 18)

Представлен набор типовых примеров с наиболее распространенными задачами программирования МК. Предложены классификация и принципы выполнения заданий. Дано описание универсального макета программатора.

Изготовлен универсальный макет программатора, позволяющий проводить не только прошивку МК AVR четырех типов (AT90S1200, AT90S2313, AT90S4414, AT90S8515), но и управление проектируемыми внешними устройствами.

Реализован ряд задач по работе с памятью, по перекодировке, сложению и делению чисел, по работе с динамической индикацией и матричной клавиатурой. На основе этого смакетированы реальные устройства кодового замка на основе AT90S1200 и измерителя частоты в звуковом диапазоне на основе AT90S8515.

Предлагаемая на этой основе методика обучения программирования и применения МК позволяет ввести интересующихся в эту перспективную область.

БИБЛИОГРАФИЧЕСКИЙ СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Предко М. Руководство по микроконтроллерам. Том 1. / Пер. с англ. под ред. И. И. Шагурина и С. Б. Лужанского – М.: Постмаркет, 2001. – 416 с.

2. Предко М. Руководство по микроконтроллерам. Том 2. / Пер. с англ. под ред. И. И. Шагурина и С. Б. Лужанского – М.: Постмаркет, 2001. – 488 с.

3. Cady, Fredrick M. Microcontrollers and microcomputers: principles of software
and hardware engineering. – New York – Oxford, Oxford University Press,
1997. – 252 p.

4. Вуд А. Микропроцессоры в вопросах и ответах. / Пер. с англ. под ред. Д. А. Поспелова. – М.: Энергоатомиздат. 1985. – 184 с.

5. Уильямс Г.Б. Отладка микропроцессорных систем: / Пер. с. англ. – М.: Энергоатомиздат, 1988. – 253с.

6. Угрюмов Е.П. Цифровая схемотехника. – Спб.: БВХ – Санкт-Петербург,
2000. – 528 с.

7. Алексенко А.Г., Шагурин И.И. Микросхемотехника. – М.: Радио и связь,
1990. – 496 с.

8. Бродин Б.В., Шагурин И.И. Микроконтроллеры: Справочник. – М.: ЭКОМ, 1999. – 395 с.

9. Программируемые логические ИМС на КМОП-структурах и их применение. / П.П. Мальцев, Н.И. Гарбузов, А.П. Шарапов, А.А. Кнышев. – М.: Энергоатомиздат, 1998. – 158 с.

10. Соловьев В.В., Васильев А.Г. Программируемые логические интегральные схемы и их применение. – Мн.: Беларуская наука, 1998. – 270 с.

11. Bursky D. Embedded Logic and Memory Find a Home in FPGA. – Electronic Design, 1999, №14, pp. 43-56.

12. Chang D., Mazek-Sadowska M. Dynamically Reconfigable FPGA. – JEEE Transition on Computers, 1999, №6, pp. 565 – 578.

13. Bursky D. Advanced CPLD Architectures Challenge FPGA, Gas. – Electronic Design, 1998, №22, pp. 78 – 86.

14. Takai Y. a.o. 250 Mbytes Synchronous DRAM Using a 3-Stage-Pipeline Architecture. – JEEE. Journal of Solid-Stage Circuits. – 1994, v.29, №4,
pp. 426 – 429.

15. Лаптев В. Цифровой измеритель температуры на базе AVR микроконтроллера и RC-цепочки. – Электронные компоненты, 2001. №2, с. 46 – 49.

16. http://www.atmel.ru/ - описание AVR микроконтроллеров, русскоязычный сайт.

17. http://www.dontronics.com/atmel.html - программные проекты по AVR.

18. http://www.gaw.ru/, http://www.cec-mc.ru - информация о МК фирмы ATMEL

19. http://trush.da.ru/, http://avr.da.ru/ - описание МК AT90S1200 фирмы Atmel

20. http://www.ln.com.ua/~real/avreal, http://www.chat.ru/~avreal: - AVReAl: программа прошивки At90sXXXX через LPT порт

21. http://trush.pp.ru/avr/ - полезные ссылки по AVR.


ПРИЛОЖЕНИЕ 1
Инструкции процессоров AVR.

Ниже приведен набор команд процессоров AVR, более детальное описание их можно найти в AVR Data Book [16,19].

Таблица А.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. Инструкции ветвления.

Мнемоника

Опе­ранды

Описание

Операция

Флаги

Циклы

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 , добавьте пять циклов плюс по три цикла на каждое ожидание.