Главная Обратная связь Поможем написать вашу работу!

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Расчет времени выполнения одного цикла в таймере



Если тактовая частота генератора равна 20 МГц, то время выполнения одного такта равно 0,05 мкс. Время выполнения машинного цикла, состоящего из четырех тактов равно 0,2 мкс.

Фрагмент одного внутреннего цикла таймера в приведенной ниже программе выполняет команду вычитания за один цикл и команду безусловного перехода за 2 цикла, т.е. в сумме за 3 цикла. Максимально во внутреннем цикле может быть выполнено 255 подциклов (предельное значение десятичного числа, которое может быть введено в 8-ми разрядный регистр). При вычитании 255-й раз условие *(=0) выполняется и происходит выход из цикла, при этом команда DECF выполняется за два цикла. Общее время выполнения внутреннего цикла:

255*3*0,2 + 2*0,2=151,4 мкс

При организации одного внешнего цикла в нем выполняется операция вычитания и две операции безусловного перехода, т.е. 3 цикла + внутренний цикл:

3*0,2 + 151,4 = 152 мкс

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

 

Исходные данные и выполнение программы

Соедините разряды PORTC и разъемы сигнальных ламп также, как и в лабораторной работе №2. Запишите программу 4.1, отладьте ее в режиме MPlabSim. В окно наблюдения включите РСН STATUS, TRISC, W, PORTC, PCL, а также РОН Sch_in, Sch_out, Sch3. В пошаговом режиме перед запуском таймера CALL Timer сохраните в вордовском файле состояние окна наблюдения и далее сохраняйте эти окна после завершения каждого цикла. Сравните состояние регистров STATUS, W и PCL перед включением таймера и после выхода из него. Определите разницу в значениях разрядов. Измените в программе значения количества выполняемых циклов в соответствии с вариантами из таблицы 4. Сохраните программу в общей папке на компьютере, к которому подключен УМК-7. На этом компьютере откройте сохраненный текст программы и выполните последовательно пункты по созданию проекта в режиме MPLAB ICD2 c записью созданного проекта в память программ. Подготовьте секундомер для записи времени задержки. Запустите программу в режиме Run. При загорании лампы в разряде 7 включите секундомер, а при загорании лампы в разряде 0 зафиксируйте время. Запишите время в отчете.



 

Таблица 4 Задания по количеству операций в каждом цикле

Наимен.цикла Вариант 1 Вариант 2 Вариант 3
Sch_in
Sch_out
Sch3

 

 

Программа 4.1

Include<p16F877A.inc>

Sch_in EQU H'22'; счетчик внутреннего цикла задержки.

Sch_out EQU H'23' ; счетчик внешнего цикла задержки.

Sch3 EQU H'24' ; счетчик третьего цикла задержки.

ORG h'00'

NOP

NOP

NOP

ORG h'05'

CLRF STATUS

BSF STATUS,5

CLRF TRISC

BCF STATUS,5

MOVLW B'10000000'

MOVWF PORTC; в режиме Run по загоранию лампы в разряде 7 ;запускаем секундомер для определения времени работы таймера

MOVLW d'2'; задаем количество повторения третьего цикла ;таймера равное 2 только для отладки. Для выполнения на микроконтроллере ;в режиме Run используйте задание по варианту из таблицы 4

; сохранить окно в отладочном режиме

CALL Timer

MOVLW B'00000001'

MOVWF PORTC; по загоранию лампы Л-0 на УТК-7 фиксируем ;секундомер для определения времени работы таймера в режиме Run



; сохранить окно в отладочном режиме

GOTO $; разделитель основной программы и подпрограмм.

Timer; подпрограмма Timer. Применено два вложенных цикла.

MOVWF Sch3; значение W является аргументом для таймера.

;M3

MOVLW D'2'; для отладки 2, а для варианта-по заданию

MOVWF Sch_out; устанавливаем значение внешнего счетчика.

;M_out - метка внешнего счетчика.

MOVLW D'2'; для отладки 2, а для варианта-по заданию

MOVWF Sch_in; устанавливаем значение внутреннего счетчика.

;M_in - метка внутреннего счетчика.

DECF Sch_in,F; уменьшаем значение счетчика Sch_in на 1. Когда ;результат будет равен 0, то следующая команда пропускается

; сохранить окно в отладочном режиме, когда Sch_in=0

GOTO M_in; срабатывает только при Z=0.

DECF Sch_out,F; уменьшаем значение счетчика Sch_out на 1.

; если счётчик обнулился, пропускаем GOTO.

; сохранить окно в отладочном режиме, когда Sch_out=0

GOTO M_out; инструкция срабатывает только при Z=0.

DECF Sch3,F; уменьшаем значение счетчика Sch3 на 1

; сохранить окно в отладочном режиме, когда Sch3=0

GOTO M3; срабатывает только при Z=0.

RETURN; конец подпрограммы Timer.

END; конец текста всей программы.

 


Просмотров 480

Эта страница нарушает авторские права




allrefrs.ru - 2021 год. Все права принадлежат их авторам!