Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Написание программы для разрабатываемого микропроцессорного устройства

Теперь необходимо разделить аппаратную и программную часть схемы часов. В состав генератора эталонных интервалов времени входит делитель частоты, часть которого можно реализовать аппаратно при помощи делителя, входящего в состав одного из таймеров микроконтроллера.

Максимальный коэффициент деления на таймере можно получить 65536. Попробуем необходимый коэффициент деления генератора эталонных интервалов времени равный 12000000 разделить на несколько сомножителей. Прежде всего, выделим сомножитель, равный 12. Это внутренний делитель таймера, который всегда присутствует в составе микросхемы и не может быть нами отключен. То есть нам остаётся реализовать делитель на 1000000.

Выберем коэффициент деления таймера равным 50000. Это число меньше максимально возможного числа, допустимого для шестнадцатиразрядного таймера. В результате деления числа 1000000 на число 50000 остаётся число 20. Этот коэффициент деления можно реализовать программно на одной ячейке внутренней памяти данных.

Как уже обсуждалось ранее, алгоритм и программу можно писать одновременно. Начнём написание программы с организации простейшей программы-монитора. Этот первоначальный вариант программы приведен на рисунке 9.18.

Как видно из приведённого исходного текста программы эта программа пока ничего не делает. Однако в этой программе предусмотрен бесконечный цикл, который не позволит программе когда-либо завершиться до выключения питания устройства. По циклу при подключенном к микроконтроллеру кварцевом резонаторе 12МГц программа будет проходить один раз за 2 мкс.

;-------------СБРОС МИКРОКОНТРОЛЛЕРА---------------------------

ORG 0

Jmp init;Переход на начало выполнения программы

 

;-------------ИНИЦИАЛИЗАЦИЯ МИКРОКОНТРОЛЛЕРА-------------------

init:

;-------------ОСНОВНАЯ ПРОГРАММА МИКРОКОНТРОЛЛЕРА--------------

Begin:

Jmp begin;Переход на начало выполнения программы

end

Рисунок 9.18. Исходный текст первоначального варианта программы.

Теперь реализуем проход по этому циклу один раз в 50 мс. Как уже упоминалось выше, это мы реализуем при помощи таймера. Выберем в качестве рабочего таймер T0. Настройка таймера нам потребуется только один раз (при включении часов). Поэтому настройку таймера поместим в блок инициализации микроконтроллера.

Программа в основном режиме может ожидать переполнения таймера, опрашивая флаг TF0, но при использовании прерываний от таймера можно значительно снизить потребление микроконтроллера. Экономия реализуется при переведении микроконтроллера в спящий режим командой orl PCON,#1. После выполнения этой команды микроконтроллер может проснуться только после сброса микроконтроллера или возникновения прерывания.

Для реализации прохождения микроконтроллером по основному циклу один раз в 50мс разместим команду orl PCON,#1 в конце цикла. В качестве источника прерываний будет служить таймер T0. Переход на начало цикла будет осуществляться сразу после возврата из подпрограммы обслуживания прерывания.

Так как прерывания нам потребуются каждые 50 мс, то разрешение прерываний от таймера разместим тоже в подпрограмме инициализации таймера. Разрешение прерываний от таймера производится записью единиц в биты регистра специального назначения IE. Разрешение прерываний от таймера производится битом ET0, а общее разрешение всех прерываний битом EA. Установим эти биты в единичное состояние командой orl IE,#10000010b.

Теперь микроконтроллер каждые 50 мс будет не только просыпаться, но и передавать управление на вектор прерывания таймера T0. Этот вектор находится по адресу 0Bh. Подпрограмму повторной записи числа 50мс в таймер нужно поместить точно на этот адрес. Размещение подпрограммы на векторе прерывания можно произвести директивой ORG 0Bh. Так как пока нет прерываний от других источников, то подпрограмму обслуживания прерывания не будем выносить в конец программы.

;-------------СБРОС МИКРОКОНТРОЛЛЕРА---------------------------------

ORG

 

jmp init;Переход на начало выполнения программы

 

;-------------ВЕКТОР ПРЕРЫВАНИЯ ТАЙМЕРА T0---------------------------

ORG 0Bh

mov TH0, #HIGH(-50000);Загрузить старший байт таймера

mov TL0, #LOW(-50000);Загрузить младший байт таймера

reti

 

;-------------ИНИЦИАЛИЗАЦИЯ МИКРОКОНТРОЛЛЕРА-------------------------

init:

call Timer0_Init;Настроить таймер T0 на прерывания с периодом 50мс

 

;-------------ОСНОВНАЯ ПРОГРАММА МИКРОКОНТРОЛЛЕРА--------------------

Begin:

orl PCON,#1;Перевести микроконтроллер в пониженный режим

;потребления тока и подождать переполнения таймера

jmp begin;Переход на начало выполнения программы

;-------------КОНЕЦ ОСНОВНОЙ ПРОГРАММЫ МИКРОКОНТРОЛЛЕРА--------------

 

;********************************************************************

;Подпрограмма настройки таймера T0 на 50мс режим работы

;********************************************************************

Timer0_Init:

mov TMOD,#00000001b;перевести таймер T0 в первый режим

;

<== предыдущая лекция | следующая лекция ==>
Разработка принципиальной схемы | Жилищные кооперативы. Понятие, виды, цели деятельности
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 219; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.