Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПСМПС (лаб)

.pdf
Скачиваний:
20
Добавлен:
10.06.2015
Размер:
1.42 Mб
Скачать

101

полнения читают защелки (регистры портов), а другие – значение сигналов на линиях портов.

Для выполнения портом Р3 альтернативных функций в соответствующий разряд регистра порта должна быть записана «1». Во время обращения к внешней памяти во все разряды порта Р0 автоматически записываются «1», значения защелок порта Р2 не изменяются.

Чтобы вывести значение «0» или «1» на внешний вывод, необходимо записать это значение в соответствующий разряд регистра параллельного порта. Для использования линии порта в качестве входа, ее защелка должна содержать «1». При этом у портов Р1, Р2 и Р3 соответствующая линия внутри подтягивается к уровню «1», но может быть внешним источником переведена в состояние «0». Из-за такого механизма порты Р1-Р3 называют «квазидвунаправленными».

Порт Р0 не имеет элементов постоянного подтягивания к уровню логической единицы. Запись «1» в защелку Р0 переводит соответствующую линию в высокоимпедансное состояние, поэтому этот порт является действительно двунаправленным. При работе порта Р0 на ввод/вывод данных его линии должны быть подтянуты к уровню «1» внешними резисторами, т.е. каждый из выводов должен быть подключен к шине питания через резистор номиналом 10…20 кОм. При использовании Р0 в качестве шины адреса/данных необходимость в этом отпадает.

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

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

Управление светодиодами – самое простое, что может применяться в схемотехнической практике. Схемы управления светодиодами могут различаться в зависимости от нагрузочной способности портов конкретного контроллера и числа одновременно включаемых светодиодов. Нагрузочная способность портов большинства микроконтроллеров семейства MCS-51 составляет 10…15 мА, что в принципе достаточно для зажигания одного светодиода при его непосредственном соединении с линией порта через ограничительный резистор (рис. 6.2 а). При необходимости повышения яркости индикации, как правило, приходится применять примитивный транзисторный

102

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

(рис. 6.2 б).

MCS-51

+5 B

Px.0 220 . . . 330

Px.1

Px.2

Px.3

MCS-51

+5 B

Px.y

 

4.7 К

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а)

б)

Рис. 6.2. Схемы подключения светодиодиодов

Ограничительный резистор выбирается в зависимости от требуемой силы тока. Учитывая значение сопротивления в цепи базы транзистора и коэффициент его усиления, через диод можно получать ток 100 мА и более, чего вполне достаточно. Если микроконтроллер должен управлять больше чем четырьмя светодиодами или светодиодными семисегментными индикаторами, целесообразно использовать интегральную микросхему с несколькими усилителями тока. К таким микросхемам относятся ULN2003 и ULN2803, которые содержат семь и восемь таких усилителей. В качестве усилителя тока в них используется схема Дарлингтона, а на выходе включается защитный диод для возможного управления индуктивными нагрузками. Каждый выход таких микросхем обеспечивает токовую нагрузку до 500 мА. В цепи базы токового усилителя в них включен резистор, который ограничивает входной ток и позволяет подключаться к портам микроконтроллера.

Отечественная промышленность выпускает аналогичные микросхемы из серии 1109 – КР1109КТ22 и КР1109КТ63 – для управления семисегментными индикаторами, которые также содержат семь и восемь электронных ключей также с мощным открытым коллекторным выходом.

Программное управление светодиодами осуществляется путем изменения выходных состояний линий соответствующих портов в/в. Например, для зажигания четырех светодиодов, подключенных к порту Р2, необходимо перевести соответствующие четыре линии в состояние логического нуля.

103

mov P2, #0

Если старшие четыре разряда порта Р2 используется другим устройством, то для раздельного управления линиями можно использовать команду логического «И», что, например, позволит гарантированно сбросить биты младшей тетрады не измерив состояние старшей.

anl P2, #11110000

Для раздельного зажигания светодиодов можно применить инструкцию сброса разрядов регистра – CLR

clr P2.0

clr P2.3

Соответственно, для гашения светодиодов необходимо перевести линию порта в состояние логической единицы. Например:

or P2, #00001111

или

setb P2.0

Управление оптронной парой осуществляется аналогично управлению светодиодами. Поэтому все, что было сказано выше о светодиодах применимо и для оптронов. Значения ограничительных сопротивлений для них должны выбираться с учетом максимально допустимой силы тока светодиодов, которые используются в оптронах. Микроконтроллерами могут управляться оптроны самых различных типов, в том числе содержащие фотосимисторы, которые предназначены для управления сильноточных приборов. На рис. 6.3 приведена схема управления нагрузкой с током до 8 А через симисторный оптрон фирмы Моторола – MOC3082. Отечественным аналогом данного фотосимистора является оптрон АОУ163А выпускаемый фирмой Протон.

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

104

 

+ 5 В

 

470

 

 

 

 

 

MOC3082

390

 

 

 

 

 

 

КУ208Г

Px.y

330

 

~ 220 В

 

 

 

 

 

 

 

 

Рис. 6.3. Схемы управления нагрузкой с помощью фотосимистора

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

+5 B

2.2 К Px.y

Рис. 6.4. Схемы управления нагрузкой с помощью фотосимистора

Цифровой семисегментный светодиодный индикатор представляет собой семь или восемь объединенных в одном корпусе светодиодов. Поэтому принципы управления светодиодными индикаторами и простым светодиодом аналогичны. Каждый разряд такого индикатора представлен семью или восмью светодиодами, у которых объединены катоды или аноды.

Если надо управлять только одним разрядом и имеется достаточное количество портов, то можно использовать непосредственное подключение индикатора к микроконтроллеру (рис. 6.5.)

105

 

 

 

a

Px.0

220…330

 

 

a

f

b

Px.1

b

g

Px.2

c

 

Px.3

d

 

 

Px.4

e

 

 

Px.5

f

e

c

Px.6

g

 

DP

Px.7

DP

 

 

 

 

d

Рис. 6.5. Схема непосредственного подключения к микроконтроллеру одного разряда семисегментного индикатора

Для организации программного управления элементами семисегментного индикатора необходимо учитывать, что десятичной цифре, отображаемой на индикаторе, соответствует значение так называемого 7-сегментного кода, которое находится в соответствии с зажигаемыми сегментами индикатора (табл. 6.1):

 

 

Таблица 6.1.

Семисегментный код

 

 

 

 

 

 

 

 

 

 

 

 

Символ

a

b

c

 

d

e

f

g

Десятичное

 

 

 

 

 

 

 

 

 

значение

0

1

1

1

 

1

1

1

0

126

1

0

1

1

 

0

0

0

0

48

2

1

1

0

 

1

1

0

1

109

3

1

1

1

 

1

0

0

1

121

4

0

1

1

 

0

0

1

1

51

5

1

0

1

 

1

0

1

1

91

6

1

0

1

 

1

1

1

1

95

7

1

1

1

 

0

0

0

0

112

8

1

1

1

 

1

1

1

1

127

9

1

1

1

 

1

0

1

1

123

106

Так для отображения на одном из разрядов индикатора числа 5 необходимо в порт вывести десятичное число 91:

mov P2, #91

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

В большинстве практических применений используется индикация с несколькими цифровыми разрядами. Непосредственное подключение сегментных линий к отдельным линиям порта в/в не представляется возможным. В этом случает необходимо использовать так называемое динамическое управление. Оно предполагает быструю коммутацию индицируемых разрядов (временное уплотнение), когда одноименные линии сегментов всех разрядов объединяются и используются каждым разрядом попеременно. Динамическое управление позволяет обойтись при схемотехнической реализации минимальным числом линий портов в/в, но существенно усложняет программную логику. Однако даже в этом случае при динамическом управлении требуется значительное число (по числу разрядов) линий портов для управления током объединенного катода (анода). В общем случае для сокращения числа линий используемых для подключения сегментов разрядов целесообразно применять дешифраторы-преобразователи двоичного кода в семисегментный, которые выпускаются как для индикаторов с объединенным катодом, так и с объединенным анодом. Хорошим вариантом при схемотехническом проектировании является в данном случае применение интегральных схем периферийной знакосинтезирующей серии 514. Например, дешифратор К514ИД1 – для индикаторов с объединенным катодами, а К514ИД2 – с объе диненным анодами. Они могут подключаться непосредственно без токоограничивающих резисторов, так как выходы образуют открытые эмиттеры оконечных формирователей (для К514ИД2 включается токоограничивающий резистор). Использование дешифраторов позволяет управлять 4-х разрядным индикатором с помощью восьми линий, т.е. обойтись одним портом в/в. На рис. 6.6 приведена схема управления двумя семисегментными индикаторами AЛС314А с использованием дешифратора в семисегментный код.

Для сокращения числа линий портов в/в используемых для управления анодами (катодами) разрядов, когда их число больше или равно четырех, можно применить дешифратор/демультиплексор 3х8, например К555ИД7 (К1533ИД7).

107

+5В

4.7 К

RESET

 

µ10

 

AT89С2051

3.3 К х 2

P1.4

 

 

P1.5

P1.0

µ30

XTAL2

 

P1.1

КТ3107 х 2

 

P1.2

 

P1.3

 

XTAL1

µ30

 

 

 

µ10

10 К

АЛС314А х 2

a b c d e f g

 

 

 

a

13

 

 

1

b

12

 

 

c

11

7

1

ИД

d

10

1

2

514

e

9

2

4

8

6

8

КР

f

g

7

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 6.6. Принципиальная схема подключения семисегментного индикатора к микроконтроллеру с использованием дешифратора-преобразователя

2.2. Отладчик среды µVision2

Интегрированный отладчик среды µVision2 используется для тестирования программ разработанных как на языке Си, так и на макроассемблере A251/51. Отладчик имеет два основных режима работы, которые выбираются командой главного меню Project (Project | Option for Target | Debug):

режим симулятора (Use Simulator) позволяет конфигурировать отладчик на программную симуляцию большинства свойств микроконтроллера. При этом появляется возможность тестировать встраиваемое приложение еще до аппаратной реализации конечного устройства. Среда µVision2 симулирует широкое разнообразие периферийных компонентов, включая последовательный порт, внешний в/в и таймеры. Набор доступной отладчику периферии устанавливается автоматически при выборе контроллера из базы данных устройств.

режим драйвера графического интерфейса для внутрисхемных эмуляторов (Use advance GDI drivers). При выборе данной опции интегрированный отладчик может использоваться совместно с внутрисхемными аппаратными

эмуляторами, которые аппаратно реализуют работу микроконтроллера.

108

Среда µVision2 позволяет симулировать до 16 Мб памяти микроконтроллера, отображая ее на различные области памяти программ и данных. µVision2 создавать ловушки, точки остановки, а также ситуации неверного доступа к памяти. В дополнение к поддержке симуляции памяти отладчик, как упоминалось, симулирует разнообразные периферийные устройства микроконтроллера в зависимости от его модели.

Для начала работы отладчика используется команда меню Debug (Debug | Start/Stop Debug Session). В течение отладки большинство свойств редактора остаются доступными, в том числе модификация исходного кода программы.

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

Для отладки приложения, в ряде случаев, бывает необходимо видеть как исходный текст приложения, написанного, например, на языке Си, так и ассемблерный код программы. Для этого может быть использован встроенный дизассемблер отладчика. Для отображения окна дизассемблирования (Disassembly Window) используется команда главного меню View (View | Disassembly Window…) (рис. 6.7). Наряду с ассемблерным кодом в окне дизассемблирования отображаются адреса и коды инструкций, а также адреса целевых переходов команд ветвления и передачи управления.

Рис. 6.7. Внешний вид окна дисассемблирования (Disassembly Window)

Другим важнейшим инструментом отладчика µVision2 является возможность устанавливать точки остановка (breakpoints). Точки останова позволяют осуществлять принудительную остановку выполнения приложения в

109

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

Точки останова могут быть заданы несколькими различными способами. Так в ходе редактирования исходного текста точки останова может быть установлены с помощью команды контекстного меню Insert (Insert / Remove Breakpoint) редактора кода или команды главного меню Debug (Debug | Insert / Remove Breakpoint) (рис. 6.8);

Рис. 6.8. Установка исполняемой точки останова в редакторе кода

В режиме отладки приложения точки останова могут также быть установлены и отредактированы с помощью с помощью команд BreakSet, BreakKill, BreakList, BreakEnable и BreakDisable в закладке Command окна Output Window.

Мощным инструментом отладки программ являются условные точки останова (conditional breakpoints), которые активизируются не просто на определенной строке текста программы, а в зависимости от состояния (значения) определенной ячейки памяти, регистра или типа операции, выполняемой над ней. Для работы с условными точками останова предназначено диалоговое окно Breakpoints, которое становится доступным с помощью команды меню Debug (Debug | Breakpoints…) (рис. 6.9). Используя этот инструмент можно определять условия возникновения останова в программе. Такие условия задаются с помощью простых выражений, в которых используются логические операторы и операторы сравнения, а также мнемонические имена переменных, регистров или адреса памяти. Для построения условных выражений используется синтаксис языка Си, а их ввод выполняется в строке редактирования Expression. Например:

110

R0 > 10

(D:0 == 0xFF && R7 >= 8) || R0 != 0

(D:0x10 == 0x1F || D:0x11 > 100) || R5 <= 15

Если условная точка останова должна активизироваться только после определенного числа раз, когда условие становиться верным, то используется счетчик Count. Диалоговое окно Breakpoints позволяет также указать имя отладочной или сигнальной функции, которая выполниться при той или иной точке останова.

Одним из видов условных точек останова являются точки останова по доступу к памяти (access breakpoints ). Такого вида точки останова позволяют контролировать операции чтения или записи к различным видам памяти. Для зания такой точки останова в диалоговом окне Breakpoints активизируются флажки Read/ Write, а строке редактирования Expression задается адрес целевой ячейки памяти.

Рис. 6.9. Диалоговое окно Breakpoints

Другим весьма значительным инструментом отладчика среды µVision2 является окно просмотра объектов программы (Watch Window) (рис. 6.10). Окно просмотра позволяет контролировать и модифицировать значения