Прерывания от таймеров /счетчиков

Для разрешения/запрещения прерываний от таймеров/счет-чиков Т0, Т1, Т2 предназначен регистр TIMSK (табл. 5.10). Для разрешения какого-либо прерывания необходимо установить в 1 соответствующий разряд регистра TIMSK и, разумеется, флаг I регистра SREG. Для индикации наступления прерываний от таймеров/счетчиков Т0, Т1, Т2 предназначен регистр TIFR (табл. 5.11).

 

Таблица 5.10 – Регистр масок прерываний TIMSK

 

OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 TOIE0

 

OCIEnx – биты разрешения прерывания выходного сравнения;

TICIE1 – бит разрешения прерывания входного захвата;

TOIEn – биты разрешения прерывания по переполнению счётчика.

 

Таблица 5.11 – Регистр флагов прерываний от таймеров/счётчиков TIFR

 

OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 TOV0

 

OCFnx – флаги прерывания выходного сравнения.;

ICF1 – флаг прерывания входного захвата;

TOVn – флаг прерывания по переполнению счётчика.

 

Программа работы

1. Рассчитав номер варианта (от N=1 до N=9), загрузить для отладки программу преобразования двоично-десятичного кода числа (байт) в двоичный (программа decbin_to_bin).

Перед выполнением программы необходимо в окне «Workspace» загрузить в регистр r16 число 10N+N в двоично-десятичном виде, которое подвергнется преобразованию.

;****** Программа decbin_to_bin

 

mov r17,r16 ; Исходное двоично-десятичное число

; хранится в r16

andi r17,0xF0 ; Выделение старшей тетрады (десятков)

swap r17 ;

ldi r18,10 ; Умножение десятков на десять

mul r17,r18 ;

mov r17,r16 ; Выделение младшей тетрады (единиц)

andi r17,0x0F ;

add r17,r0 ; Сложение результатов. Результат остаётся в r17

 

При выполнении программы число копируется в регистр r17, там на него накладывается маска 0b11110000 при помощи команды логического умножения (andi), которая выделяет десятки десятичного кода. После этого результат перемещается в младшую тетраду и умножается на 10. Результат умножения сохраняется в регистровой паре r1:r0. Т.к. наше число не может быть больше 99, то оно целиком поместится в младший байт результата, т.е. в r0. После этого повторно загружаем исходное число в r17, ещё раз накладываем маску, только на этот раз для выделения младшей тетрады, и суммируем результат с содержимым регистра r0, в котором хранились десятки. Конечный результат будет представлен в регистре r17.

Проследите процесс выполнения программы в пошаговом и автоматическом режиме. Поясните содержимое строк окна «Disassembler».

Внести ошибки в программу (неверная мнемоника команды, неверный операнд и т.п.) и проследить сообщения ассемблера при этом в окне View Output.

Модифицировать программу в соответствии со своим вариантом индивидуального задания:

1. Преобразовать дополнительный код числа (байт) в прямой.

2. Преобразовать двоичный код (от 0 до 99) в двоично-десятичный.

3. Просуммировать два числа в двоичном коде. Сумму, большую 255, заменить байтом единиц.

4. Сложить два двухбайтовых числа.

5. Вычесть два числа в двоичном коде. Разность, меньшую нуля, заменить байтом нулей.

6. Умножить на два двухбайтовое содержимое регистров R9..R10 (меньшее 32 000).

7. Сложить два десятичных числа (байт) в двоично-десятичном коде.

8. Реализовать суммирующий двоично-десятичный счетчик.

9. Реализовать вычитающий двоично-десятичный счетчик.

 








Дата добавления: 2016-01-09; просмотров: 985;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.