Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sykhanov_курсовая (1).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
174.25 Кб
Скачать

4 Разработка программы

В таблице 4.1 перечислены переменные, используемые в программе.

Таблица 4.1 – Переменные, используемые в программе

Имя переменной

Адрес регистра

Назначение переменной

MINE

R16

Регистр единиц минут

MIND

R17

Регистр десятков минут

V

R18

Регистр знакоместа

temp

R19

Временный регистр

SEK

R20

Счетчик секунд

INE

R21

Регистр индикации единиц

IND

R22

Регистр индикации десятков

kdel

константа

62500

После подачи напряжения питания к микроконтроллеру, происходит первичная инициализация микроконтроллера. В регистры ввода-вывода SPH и SPL загружается значение верхнего адреса внутреннего ОЗУ, для того чтобы проинициализировать стек, который в свою очередь будет обеспечивать корректный переход на подпрограмму и возврат из неё.

Затем линии РА0 - РА5 порта А настраиваются на ввод, линия RA7 на вывод загрузкой кода $80 в регистр DDRА. Для обеспечения высокого уровня напряжения на входах PA0 - PA5 при не нажатом состоянии кнопок SB1-SB6 подключаются подтягивающие резисторы PORTA загрузкой кода $3F6.

Линии РС0 – РС1 и РВ0 – РВ6 настраиваются на вывод, установкой в 1 разрядов регистров DDRC и DDR. Обнуляются РОНы ind и ine.

Настройка таймера Т0 начинается с загрузки в OCR0 количества тактов, после которого микроконтроллер вызовет прерывание. Затем загружаем 1 в биты TOIE0 и OCIE0 регистра TIMSK для разрешения прерываний от таймера Т0.

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

Рассчитывается такт микроконтроллера

, (4.1)

где – длительность такта микроконтроллера, мкс;

– частота микроконтроллера, МГц.

.

Рассчитывается коэффициент деления для формирования длительности сигнала 4мс:

, (4.2)

где – коэффициент деления;

– время задержки, мкс;

– длительность такта микроконтроллера, мкс.

Восьмиразрядный таймер T0 имеет максимальный коэффициент деления 256, необходимо использовать предварительный делитель. Выбирается коэффициент деления предделителя 64.

Рассчитывается коэффициент деления таймера Т0.

(4.3)

где – коэффициент деления таймера, т;

– коэффициент деления, т;

– коэффициент деления предделителя.

Так как таймер Т0 будет работать в режиме сравнения, необходимо загрузить число 250 в регистр сравнения OCR0.

Разрешается прерывание таймера Т0 в режиме совпадения CTC, установкой бита OCIE0 в регистр TIMSK. Структура регистра TIMSK приведена в таблице 4.2

Таблица 4.2 – структура регистра TIMSK

Номер бита

Имя

Назначение

Пояснение

0

TOIE0

Прерывание по переполнению

1-разрешено

0-запрешено

1

OCIE0

Прерывание по событию «Совпадение»

1-разрешено

0-запрешено

2

TOIE1

Прерывание по переполнению

1-разрешено

0-запрешено

3

OCIE1B

Прерывание по событию «Совпадение В»

1-разрешено

0-запрешено

4

OCIE1A

Прерывание по событию «Совпадение А»

1-разрешено

0-запрешено

5

TICIE1

Прерывание по событию «Захват»

1-разрешено

0-запрешено

6

TOIE2

Прерывание по переполнению

1-разрешено

0-запрешено

7

OCIE2

Прерывание по событию «Совпадение»

1-разрешено

0-запрешено

После разрешения прерываний от таймера Т0, меняется режим работы на CTC(режим по совпадению), загрузкой в TCCR0 код 00001011. Структура регистра TCCR0 приведена на рисунке 4.1

Рисунок 4.1 – Структура регистра TCCR0

Биты CS02, CS01, CS00 (Clock Select) - определяют источник тактовой частоты для таймера Т0 и задают коэффициент предделителя. Все возможные состояния описаны на рисунке 4.2.

Рисунок 4.2 – Состояния битов CS02 - CS00

Биты WGM10, WGM00 (Wave Generator Mode) - определяют режим работы таймера-счетчика Т0. Их состояния приведены на рисунке 4.3.

Рисунок 4.3 – Состояния битов WGM10, WGM00

Настройка таймера завершена и остается только установить флаг I в регистре SREG.

После инициализации микроконтроллера начинается опрос кнопок если на линии РA1 появится низкий потенциал, т.е. кнопка SB1 нажата, то в регистры MINE и MIND загрузится количество минут, которое нужно отсчитать(выбирается в зависимости от нажатой кнопки). Загружаем в регистры OCR1AH и OCR1AL количество тактов. Выбираем режим в TCCR1B номер режима и коэффициент деления. После чего таймер начинает работу. Выводим значение MINE и MIND на индикатор. Ждем прерывания от таймера и вычитаем единицу из MINE, выводим новое значение на индикатор. После того, как MINE и MIND станут равными 0, подается звуковой сигнал. И микроконтроллер возвращается к опросу кнопок.

Для формирования таймером Т1 1 секунды будет использоваться режим сброса по совпадению. Расчет значения загружаемого в регистр сравнения OCR1.

Рассчитывается длительность такта микроконтроллера:

, (4.4)

где – длительность такта микроконтроллера, мкс;

– частота микроконтроллера, МГц.

.

Рассчитывается количество тактов микроконтроллера для формирования длительности сигнала 1 секунда:

, (4.5)

где N – количество тактов микроконтроллера;

– время задержки, мкс;

– длительность такта микроконтроллера, мкс;

.

Шестнадцатиразрядный таймер T1 имеет максимальный коэффициент деления 65536, необходимо использовать предварительный делитель. Выбираем коэффициент деления 64. Рассчитывается частота сигнала на выходе предварительного делителя.

, (4.6)

где – частота сигнала на выходе предделителя, Гц;

– частота микроконтроллера, МГц;

– коэффициент деления предделителя;

.

Рассчитывается период сигнала на выходе предделителя.

, (4.7)

где – длительность такта на выходе предделителя, мкс.

,

Рассчитывается коэффициент деления таймера Т1.

, (4.8)

.