Автор работы: Пользователь скрыл имя, 17 Апреля 2013 в 10:57, курсовая работа
Семейство 8-разрядных микроконтроллеров 68НМ08/908, выпуск которых начался в 1995г., является дальнейшим развитием семейства 68НС05/705. В этом семействе реализованы концепции, которые обеспечивают существенное увеличение производительности микроконтроллеров и расширение их функциональных возможностей. Микроконтроллеры этого семейства предназначены для замены семейства 68НС05/705 в новых разработках. Сохраняя архитектуру семейства 68НС05/705, микроконтроллеры 68НС08/908 позволяют обеспечить более высокие технико-экономические характеристики устройств, реализуемых на их основе.
ВВЕДЕНИЕ 4
1. Теоретическая часть
1.1. Структура микроконтроллера MC68HC908GP32 5
1.2. Организация памяти и портов ввода/вывода микроконтроллера 8
1.3. Организация прерываний в микроконтроллере 12
1.4. Цифровая индикация 15
2. Разработка аппаратной части МКУ
2.1. Постановка задачи 19
2.2. Разработка функциональной схемы 20
2.3. Описание принципиальной электрической схемы МКУ 21
3. Разработка программного обеспечения МКУ
3.1. Описание интегрированной среды разработки WinIDE 25
3.2. Описание программы 29
ЗАКЛЮЧЕНИЕ 34
Список используемой литературы 35
Таблица 1.2. Некоторые регистры служебных и периферийных модулей МК
Младшие 64 позиции адресного пространства (адреса $000-$003F) занимают регистры служебных и периферийных модулей (в табл. 1.2.
приведены не все регистры). Отметим, что 16-разрядные регистры таймерных модулей TCNТ, TMOD, TCHx занимают по две позиции адресного пространства: младший байт с суффиксом l, старший байт с суффиксом h.
В адресном пространстве ОЗУ располагаются ячейки стека, которые адресуются с помощью указателя стека SP. При установке микроконтроллера в начальное состояние (запуске) содержимое SP принимает значение $00FF, адресуя ячейку ОЗУ с данным адресом. В процессе выполнения программы можно установить любое значение указателя стека с помощью команды TXS, которая загружает в SP содержимое индексного регистра H:X, уменьшенное на 1. После записи байта в стек содержимое SP уменьшается на 1, адресуя следующую незаполненную ячейку стека. Таким образом, стек заполняется в направлении уменьшения адресов. Адрес вершины стека (последней заполненной ячейки стека) можно загрузить в регистр H:X с помощью команды TSX.
Микроконтроллер MC68HC908GP32 имеет внутреннюю Flash-память, содержимое которой может стираться и записываться при работе в режиме отладки или в процессе выполнения прикладной программы. Допускается до 10000 циклов стирания-программирования, время хранения информации составляет более 10 лет. Необходимое для программирования повышенное напряжение обеспечивается внутренним преобразователем, поэтому не требуется подключение внешнего источника. Специальный механизм защиты позволяет предотвратить случайное стирание содержимого Flash-памяти. Наличие байтов секретности позволяет предотвратить несанкционированное считывание информации.
На кристалле микроконтроллера содержится 512 байт статической оперативной памяти, ячейки которой имеют адреса в диапазоне $0040-$023F. Обычно ОЗУ используется для хранения переменных и реализации стека.
Часть адресного пространства занята ячейками служебного ПЗУ, в котором содержится программа-монитор, которая реализует необходимые
процедуры при работе микроконтроллера в режиме отладки, обеспечивая возможность контроля его внутреннего состояния. Это масочно-программируемое ПЗУ, содержимое которого записывается в процессе изготовления микроконтроллера.
В старших позициях адресного пространства
располагаются вектора
Запрос модуля ADC08 |
$FFDE-DF |
Запрос модуля KBI08 |
$FFE0-E1 |
Запрос канала 0 таймера TIM08-2 |
$FFF0-F1 |
Переполнение таймера TIM08-1 |
$FFF2-F3 |
Запрос канала 1 таймера TIM08-1 |
$FFF4-F5 |
Запрос канала 0 таймера TIM08-1 |
$FFF6-F7 |
Прерывание по внешнему запросу IRQ# |
$FFFA-FB |
Команда SWI (программное прерывание) |
$FFFC-FD |
Вектор начального запуска (Reset) |
$FFFE-FF |
Таблица 1.3. Размещение некоторых векторов прерываний МК
Поступление запросов прерывания проверяется
микроконтроллером после
1.3. Организация прерываний в микроконтроллере
Прерывания изменяют текущую последовательность выполнения команд с целью обслуживания внешнего или внутреннего события, вызывавшего прерывание. Прерывание в отличие от сброса не останавливает выполнение текущей инструкции. При поступлении запроса на прерывание МК завершает выполнение текущей команды, а затем реализует механизм перехода к подпрограмме прерывания:
- регистры центрального
- младший байт счетчика адреса PCL; по завершении прерывания инструкция возврата из прерывания RTI восстанавливает в обратном порядке все регистры центрального процессора для возобновления выполнения фоновой программы;
- бит глобальной маски
- счетчик адреса PC загружается адресом начала подпрограммы прерывания, который называют вектором прерывания.
В МК семейства НС08 реализован традиционный для всех МК фирмы «Motorola» механизм загрузки векторов прерывания. В адресном пространстве памяти программ МК выделена специальная область, которая носит название сегмента векторов прерывания. Каждому источнику запросов на прерывание в этой области отведено по два байта памяти с фиксированными адресами. Пользователь на этапе программирования МК заносит в эти ячейки памяти адрес начала подпрограммы прерывания. При переходе к выполнению подпрограммы прерывания этот адрес автоматически загружается в счетчик адреса центрального процессора. В рассматриваемом сегменте памяти размещается также вектор сброса.
Аппаратные средства прерывания МК семейства НС08 имеют следующие особенности:
- выполнение команды возврата из прерывания RTI автоматически разрешает прерывания;
- выполнение команды возврата из прерывания RTI не блокирует прерывания на период выполнения следующей команды;
- вход в новую подпрограмму возможен сразу после выполнения команды RTI.
Дело в том, что при входе в подпрограмму прерывания бит глобальной маски прерывания I обязательно равен 0. Иначе прерывания были бы запрещены и говорить о подпрограмме прерывания не имело бы смысла. Содержимое регистра признаков, в котором располагается маска I, сохраняется в стеке при входе в подпрограмму прерывания. Следовательно, при восстановлении регистра признаков из стека по команде RTI бит глобальной маски прерывания установится в «0», и прерывания будут разрешены.
Все источники прерываний МК семейства НС08 можно разделить на три группы:
- немаскируемое программное прерывание по команде SWI;
- маскируемые внешние
- по некоторому числу линий портов ввода/вывода, которые принадлежат модулю сканирования клавиатуры КВI08.
Маскируемые прерывания от периферийных модулей.
Механизм программного прерывания позволяет обратиться к какой-либо подпрограмме прерывания по ходу выполнения прикладной программы и предоставляется возможность программного прерывания SWI. Эта команда автоматически загружает в стек регистры CCR, АСС, X и увеличенное на
единицу содержимое счетчика команд PC, а затем осуществляет переход по адресу, который указан в ячейках памяти $FFFC и $FFFD сегмента векторов прерывания. Этот адрес может быть начальным адресом подпрограммы
прерывания или же находиться внутри нее. При выходе из подпрограммы прерывания команда RTI восстановит содержимое регистров центрального процессора и МК продолжит выполнение прикладной программы с команды, которая была следующей за командой SWI. Таким образом, программисту предоставляется возможность обращения в произвольный момент времени к фрагменту подпрограммы прерывания, который начинается с произвольно выбранной инструкции внутри подпрограммы прерывания, но заканчивается обязательно командой RTI.
Число линий МК MC68HC908GP32 для приема внешних запросов на прерывания варьируется от одной линии (вход IRQ) до 9 линий. Обслуживание запросов по входу IRQ осуществляет модуль внешних прерываний IRQ08. Активный уровень сигнала запроса на входе IRQ - низкий логический, длительность сигнала запроса должна составлять не менее t = 50нс. Дополнительные входы внешних запросов могут быть получены путем, соответствующей инициализации модуля сканирования клавиатуры KBI08, который позволяет настроить некоторое число линий ввода/вывода МК для приема внешних запросов на прерывание.
Все прерывания, кроме программного по команде SWI, могут быть разрешены или запрещены сбросом или установкой глобальной маски прерывания I в регистре признаков CCR:
cli ;команда сбрасывает в «0» бит I, т. е. разрешает прерывания.
sei ;команда устанавливает бит I в «1», т. е. запрещает прерывания.
Кроме того, каждому источнику прерывания, за исключением программного, поставлена в соответствие индивидуальная маска прерываний, которая расположена в одном из регистров специальных функций соответствующего периферийного модуля.
1.4. Цифровая индикация
Семисегментный индикатор — устройство отображения цифровой информации. Сегментный индикатор был запатентован в 1910 году Фрэнком Вудом. Эта реализация была восьмисегментной — был дополнительный косой сегмент для отображения четвёрки. Патент был практически забыт — вплоть до 1970-х годов радиолюбителям приходилось применять для отображения цифр знаковые индикаторы тлеющего разряда или просто десять лампочек. В 1970 году американская компания RCA выпустила семисегментную лампу накаливания «Нумитрон».
Для отображения букв появились четырнадцатисегментн
Вероятно, самый простой способ вывода числовых десятичных и шестнадцатеричных данных − это использование 7-сегментного светодиодного индикатора.
Каждый светодиод в индикаторе имеет свой буквенный идентификатор (А, В, С, D, Е, F или G), и одна из ножек светодиода подключена к соответствующему внешнему выводу. Вторые ножки всех светодиодов соединены вместе и подключены к общему выводу. Этот общий вывод определяет тип индикатора: с общим катодом или с общим анодом. Подключение индикатора к микроконтроллеру осуществляется весьма просто: обычно индикатор подключают как семь или восемь (если используется десятичная точка) независимых светодиодов.
Наиболее важной частью работы при
подключении к микроконтроллеру нескольких
7-сегментных индикаторов является назначение
линий ввода-вывода для каждого
светодиода. Решение этой задачи в
начале выполнения проекта упростит
монтаж разводки и отладку устройства
в дальнейшем.
Типичный способ подключения нескольких индикаторов состоит в том, чтобы включить их параллельно и затем управлять протеканием тока через общие выводы отдельных индикаторов. Так как величина этого тока обычно превышает допустимое значение выходного тока микроконтроллера, то для управления током включаются дополнительные транзисторы, которые выбирают, какой из индикаторов будет находиться в активном состоянии.
В цифровых устройствах для индикации параметров текущего состояния системы и ее компонентов, результатов измерений наиболее часто применяют именно семисигментные индикаторы, в которых стилизованное изображение цифр составляется семью сегментами.
Свечение сегмента может происходить при подаче на него напряжения логической единицы (индикаторы с общим катодом) или напряжения логического нуля (индикатор с общим анодом).
В зависимости от того, как работает в схеме индикатор (непрерывно или периодически), различают соответственно статический и динамический типы индикации.
В основе той или другой индикации лежит представление двоичного кода двоично-десятичным кодом и последующее преобразование его в последовательность единиц и нулей, обеспечивающих свечение цифры, соответствующей весу двоичного кода. Указанную последовательность принято называть сегментным кодом.
1.4.1. Статическая индикация
Статическая индикация иллюстрируется на рис. 1.2. В десятичных счетчиках СТ1-СТ3 сосредоточены три разряда двоично-десятичного кода. С выхода каждого счетчика двоичный код десятичного разряда возбуждает соответствующие выходы семисегментного дешифратора, в результате чего на индикаторе высвечивается та или иная цифра.
Используемые в схеме
Рисунок 1.2. Статическая индикация
Для индикации каждой десятичной цифры необходимы отдельный семисегментный дешифратор и 11 соединительных проводников.
1.4.2. Динамическая индикация
Динамическая индикация