Лаборатория - 1- 5_Лаборатория_Микропроцесорни устройства и системи - LR1

Федерална агенция за образование на Руската федерация

ТОМСКИ УНИВЕРСИТЕТ ПО СИСТЕМИ ЗА УПРАВЛЕНИЕ И РАДИОЕЛЕКТРОНИКА

Лаборатория #1

"Микропроцесорни устройства и системи"

Цел на работата:Дебъгване на приложни програми за микроконтролера AVR от семейството Tiny с помощта на персонален компютър и софтуер за отстраняване на грешки.

1.ЗаредетеAVRStudioпрограма за преобразуване на 16-битово цяло число в BCD за отстраняване на грешки. Алгоритъмът на програмата "bin16BCD5" е следният. Да предположим, че имаме 16-битово цяло число без знак (от 0 до 65535). Очевидно е необходимо да се намерят 5 десетични цифри. Методът на преобразуване е да се извади числото 10000 от оригиналното число, като първо се определи десетичната цифра на десетките хиляди. След това цифрата на хилядите се намира чрез последователно изваждане на числото 1000 и т.н. Изваждането се извършва всеки път до получаване на отрицателна разлика, като се брои броят на изважданията. При преминаване към дефинирането на всеки следващ десетичен знак в регистрите на оригиналното число се възстановява последната положителна разлика. След намирането на десетичната цифра на десетиците, десетичната цифра на единиците ще остане в регистрите на оригиналното число.

Проследете изпълнението на програмата в поетапен и автоматичен режим, като предварително сте записали шестнадесетичното число $NNNN в регистрите r16 и r17, къдетоNе номерът на варианта, изчислен по метода TMC DO (число от 1 до 9). ВпрозорецI/OразгънетесъдържаниеРегистър 1-31, процесор, I/O ATTINY15 (CPU, WATCHDOG).Кои програмни команди влияят на флаговете на регистъра на състояниетоSREG? Запишете резултата от трансформацията в отчета. В програмата често се използват командиизваждане на константа от регистър. Командната системаAVRима ли подобни команди за регистър и постоянно добавяне? Как ще работи програмата, ако последната команда в нея бъде изтрита?

Какъв е периодът на наблюдение, зададен в програмата? Какво се случва, ако изчакате да работи?

системи

Фиг. 1. Резултатът от преобразуването на числото 0x5555 (21845)

1.1. програмни команди, които засягат флаговете на регистъра на състоянието SREG:

1.2. Резултатът от преобразуването на шестнадесетичното число 0x5555 в BCD е 21845.

1.3. в командната система на AVR липсва инструкция за добавяне на регистър с константа и инструкция за десетична корекция на акумулатора, както и за самия акумулатор.

1.4. когато редът m5:rjmpm5 бъде изтрит, дебъгерът продължава да изпълнява програмния код, докато изпълнението не бъде прекъснато от потребителя.

1.5. Периодът на изчакване на часовника се задава с помощта на битовете WDP2…WDP0 (000 = 16K).

1.6. Ако таймерът за наблюдение е активиран, тогава микроконтролерът се нулира на определени интервали.

Колко често T0 препълва? Как скоростта на броене може да бъде намалена 1024 пъти? Обяснете поведението на регистритеSREGиTIFRкогато програмата работи. Обяснете целта на директивата .DEVICE. Обяснете съдържанието на файлаclok.mapв прозорецаПроект.

.INCLUDE "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\tn15def.inc"

rjmp НУЛИРАНЕ ; преминете към етикет RESET

.org $005; рутина за обработка на прекъсване от T0

вкл. r16; увеличение на регистъра

cpi r16,$0A; сравнете случай с константа

breq m1; скочи, ако е равен

rjmp m3; преминете към етикет m3

m1: clr r16; почистванерегистрирам

cpi r17, $50; сравнете случай с константа

breq m2; скочи, ако е равен

rjmp m3; преминете към етикет m3

m2: clr r17 ; изчистване на регистъра

m3: mov r18,r17; препращане на данни

добавете r18,r16; добавяне на регистрови стойности

рети; изход от манипулатора на прекъсвания

НУЛИРАНЕ: ; основна програма

clrr16; изчистващи регистри

ldi r20,0b00000001; избор на източник на часовник

ldi r20,0b00000010; разрешаване на прекъсвания от таймер T0

сей; разрешаване на прекъсване

m4: rjmp m4; зацикляне на програмата

Колко често T0 препълва? Как скоростта на броене може да бъде намалена 1024 пъти? Обяснете поведението на регистритеSREGиTIFRкогато програмата работи. Обяснете целта на директивата .DEVICE. Обяснете съдържанието на файлаclok.mapв прозорецаПроект.

2.1. Т0 прелива от честотата на МК.

2.2. За да се намали скоростта на броене с 1024 пъти, е необходимо да се зададат трите най-младши цифри на контролния регистър TCCR0=101.

Носете знаме. Този флаг е зададен на 1, ако операцията е довела до препълване на байтове.

Нулев флаг. Този флаг е зададен на 1, ако резултатът от операцията е нула.

Отрицателен флаг. Този флаг е зададен на 1, ако най-значимият бит от резултата от операцията (бит 7) е 1.

Флаг за препълване на допълнителен код. Този флаг е зададен на 1, когато битовата решетка на резултата от знака препълва.

Знак знаме. Този флаг е равен на резултата от операцията XOR между флаговете N и V. Задава се на 1, ако резултатът от аритметична операция е по-малък от нула.

Флаг за обвиване на тетрадка. Този флаг е зададен на1, ако е имало прехвърляне от долната тетрада на байт (от 3-ти бит към 4-ти) или заемане от по-високата тетрада при извършване на някои аритметични операции.

Съхраняване на копирания бит. Дадена цифра от всеки ROH може да бъде копирана в тази цифра с командата BST или зададена в съответствие със съдържанието на тази цифра с командата BLD.

Разрешаване на общо прекъсване. За да разрешите прекъсвания, този флаг трябва да бъде зададен на 1. Флагът се изчиства от хардуера след влизане в рутинната услуга за прекъсване и се възстановява от инструкцията RETI, за да се даде възможност за обработка на следващите прекъсвания.

2.4. Директивата DEVICE ви позволява да посочите за кое устройство е компилирана програмата.

2.5. Файлът clok.map\съдържа описанието на регистрите чрез символно име, константен израз и началото на програмни сегменти.

3. Генерирайте PWM сигнал с честота 50 kHz на щифта PB1 (OC1A) на микроконтролера (програмаPWM1). Таймер T1 се използва като генератор на импулси с програмируем период (съдържание на сравнителен регистърOCR1B) и продължителност (съдържание на сравнителен регистърOCR1A). В прозорецI/OразгънетеРегистър1-31,Процесор,I/OATTINY15 (PORTB,TIMER_COUNTER_1).

Проследете работата на програмата в режим стъпка по стъпка. Колко се променя съдържанието на T1, когато се изпълни командатаrjmpm1? Защо? Какви флагове са зададени в регистъраTIFR?

Променете програмата така, че честотата на ШИМ да е 20 kHz, а работният цикъл да е 4 (съотношението на периода към продължителността на импулса).

.INCLUDE "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\tn15def.inc"

sbi DDRB,1; Настройване на първия ред на порт B за изход

ldi r16.0x9F ; Честота на импулса 20kHz

ldi r16.0x28 ; работен цикъл приблизително 4

3.1. Съдържанието на T1 се увеличава с 4, когато се изпълни командата rjmpm1.

3.2. стойността на нарастването T1 зависи от стойността на прескалера, в нашия случай CKx2. Командата rjmp m1 се изпълнява в 2 цикъла, стойността на нарастване е 2x2=4.

Променете програмата така, че да записва в клеткатаNEEPROMчислото 100+N и да чете записания байт в регистъраrN, къдетоN=5 е номерът на варианта.

лаборатория

Фиг. 4. Резултат от програматаEEPROM

4.1. Програмата за прекъсване увеличава съдържанието на регистър R25

Стекът не е директно достъпен от програмата, тъй като наборът от инструкции на микроконтролера не съдържа инструкции за добавяне към стека и изваждането му от стека. Указателят на стека също не е достъпен от програмата. Самият микроконтролер контролира движението на данните в стека.

Флагът I на регистъра SREG в манипулатора на прекъсвания може да бъде зададен на 1, за да се активират вложени прекъсвания.

Въпрос 2. Избройте всички източници на прекъсване вATtiny15 в низходящ ред по приоритет.

програмата

Въпрос 3. Как се програмираFLASH програмна паметATtiny15?

Отговор:Всички AVR микроконтролери имат Flash-програмна памет, която може да се зарежда както с помощта на конвенционален програматор, така и с помощта на SPI интерфейса, включително директно на целевата платка. Броят на циклите на презаписване е поне 1000.

Въпрос 4. Коя команда поставя микроконтролера в режим на заспиване?

Отговор:Сън (без операнди).

Въпрос 5. Кои регистрови битове могат да се задават и изчистват чрез командиsbiиcbi?

Заключение:Научих как да отстранявам грешки в приложенияза AVR микроконтролер от семейство Tiny, използващ персонален компютър и софтуер за отстраняване на грешки.