
- •Алматы 2011
- •1 Лекция 1. Микроконтроллеры в современном мире
- •2 Лекция 2. Выполнение арифметических операций в мп
- •3 Лекция 3. Регистры общего и специального назначения
- •4 Лекция 4. Косвенная адресация. Логика. Маскирование
- •5 Лекция 5. Маскирование. Стек
- •7 Лекция 7. Выполнения умножения и деления
- •8 Лекция 8. Программирование клавиатуры. Дешифратор.
- •9 Лекция 9. Основные элементы цифровой техники
- •10 Лекция 10. Структура микроконтроллера, 2-10 система
- •11 Лекция 11. Прерывания и сторожевой таймер
- •12 Лекция 12. Фактор времени и аналоговый мир
- •Приложение а Список некоторых сокращений
- •Литература
- •Оглавление
- •0 50013, Алматы, Байтурсынова, 126
10 Лекция 10. Структура микроконтроллера, 2-10 система
Цель лекции: применение операций сдвига, перевод чисел в двоично-десятичную систему. Рассмотрение структуры микроконтроллера.
10.1 применение операций сдвига
Одним из использований операций сдвига является побитовая проверка данных. Предположим, что состояние 8 кнопок мобильного телефона сохранено в регистре данных h'20'. Были считаны следующие состояния:
Кнопка |
К7 |
К6 |
К5 |
К4 |
К3 |
К2 |
К1 |
К0 |
Состояние |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
Требуется определить самую левую разомкнутую кнопку, при этом считаем, что разомкнутой кнопке соответствует 1, замкнутой — 0. Рабочий регистр W в программе используется в качестве счетчика. Поскольку флаг переноса сбрасывается перед каждым сдвигом, вдвигается всегда логический 0. В какой-то момент остаток становится равным нулю, и процесс завершается. Циклический сдвиг регистра на один бит вправо показан на рисунке 10.1.
|
|
Рисунок 10.1. Циклический сдвиг регистра на один бит вправо
Последовательность сдвигов: 00101111 (0)00010111 (1) 00001011 (2) 00000101 (3) 00000010 (4) 00000001 (5) 00000000 (6). Всё на шестом шаге регистр равен нулю, следовательно, шестая кнопка К5 разомкнута.
Блок-схема алгоритма показана на рисунке 10.2. При сдвиге вправо во флаг переноса выдвигается самый правый (младший) бит. Мы сможем определить позицию самого правого бита, заменив команду BTFSC STATUS, Z командой BTFSC STATUS, С.
Во
многих случаях циклическое выдвигание
бита во флаг переноса может использоваться
для побитовой проверки данных.
Например, мы можем модифицировать свою
программу таким образом, чтобы она
подсчитывала число установленных битов
в байте.
10.2 Цифровой индикатор
В качестве следующего примера напишем подпрограмму, результатом работы которой будет однобайтное значение, определяющее цифру на индикаторе. Эта подпрограмма используется совместно с цифровым индикатором. Большинство таких индикаторов работают по принципу выборочного включения требуемых сегментов, как показано на рисунке 10.3. Обычно эти сегменты представляют собой светодиоды или электроды элемента на жидких кристаллах.
Рисунок 10.3 – Семи - сегментный индикатор
Входным сигналом в данном случае является 4-битный двоичный код, находящийся в рабочем регистре. Этот код представляет собой десять десятичных цифр в виде b’0000’…b’1001’. Выходным значением, также возвращаемым в W, является соответствующий 7-сегментный код, необходимый для отображения соответствующей цифры. Причем предполагается, что включение сегмента происходит при подаче на него 1, а выключение — соответственно при подаче 0. При необходимости можно реализовать и обратную полярность.
Преобразования реализуются в виде наборов команд Retlw, каждая из которых возвращает однобайтную константу. Каждая команда retlw помещает в рабочий регистр W 8-битное значение, неиспользуемый 7-й бит сброшен в 0.
При использовании таблиц извлечение n-го элемента таблицы заключается в выполнении N-ой команды. При этом константа, находящаяся в коде команды, будет помещена в рабочий регистр, после чего произойдет нормальный возврат в вызывающую программу. Если К=6, то исполнится 6-я команда Retlw, возвращающая в W код b'011I1000' для символа 6.
Подпрограмма, код которой приведен ниже, осуществляет выборку элемента таблицы, прибавляя число N, передаваемое через рабочий регистр, к младшему байту счетчика команд (регистр PCL, расположенный по адресу h'02'). Поскольку PC уже указывает на 1-ю команду Retlw, то после прибавления N он будет указывать на N-ю команду, что нам и требуется.
Подпрограмма дешифратора семи - сегментного индикатора.
VYBOR_SEG
addwf PCL, f; прибавим W к PCL, получая PCL + W.
retlw b'00111111'; код для цифры 0. Возвращается при W=0.
retlw b'00000110'; код для цифры 1. Возвращается при W=1.
retlw b'10101101'; код для цифры 2. Возвращается при W=2.
retlw b'01001111'; код для цифры 3. Возвращается при W=3.
retlw b'01100110'; код для цифры 4. Возвращается при W=4.
retlw b'01101101'; код для цифры 5. Возвращается при W=5.
retlw b'01111101'; код для цифры 6. Возвращается при W=6.
retlw b'00000111'; код для цифры 7. Возвращается при W=7.
retlw b'01111111'; код для цифры 8. Возвращается при W=8.
retlw b'01101111'; код для цифры 9. Возвращается при W= 9.
В программе не учитывается возможность того, что входное значение в может быть больше h’09’.
10.3 Структурная схема МК
Из рисунка 10.4 видно, что микроконтроллер может управлять различными устройствами и принимать от них данные при минимуме дополнительных устройств, так как большое число периферийных схем уже имеется непосредственно на кристалле микроконтроллера. Это позволяет уменьшить размеры конструкции и снизить потребление энергии от источника питания.
Рассмотрим типичные элементы микроконтроллеров.
1. Последовательный порт. Он позволяет обмениваться данными с внешними устройствами при малом количестве проводов.
2. Цифровые линии ввода/вывода.
3. Аналоговый порт.
4. Центральное процессорное устройство (ЦПУ) это мозг микроконтроллера. Оно принимает из памяти программ коды команд, декодирует их и выполняет. ЦПУ состоит из регистров, арифметически- логического устройства (АЛУ) и цепей управления.
Рисунок 10.4 - Структура микроконтроллера
5. Сторожевой таймер. Это специальный таймер, предназначенный для предотвращения сбоев программы. Он работает следующим образом: после включения питания начинает отсчет заданного временного интервала. Если программа не перезапустит его до истечения этого интервала времени, сторожевой таймер перезапустит микроконтроллер. Таким образом, программа должна давать сторожевому таймеру сигнал - все в порядке. Если она этого не сделала, значит, по какой-либо причине произошел сбой.
6. Аналого-цифровой преобразователь. В моделях старшего класса есть и цифро-аналоговый преобразователь.
7. Тактовый генератор. Этот генератор определяет скорость работы микроконтроллера и синхронизирует работу всех устройств.
8. Память программ. ОЗУ. Здесь хранятся переменные, стек и коды команд, формирующих программу для микроконтроллера.
9. Встроенные таймеры-счетчики, которые используется для отсчета временного интервала или счета объектов.