Изучение и исследование среды разработки электронных устройств PROTEUS. Коммерческий пакет программ САПР, страница 10

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

Задание  1 для самостоятельной работы. Используя схему МКУ, приведенную на рис. 3, разработайте программу, выполняющую следующий алгоритм. После включения питания микроконтроллера светодиод горит. При нажатии на кнопку (даже кратковременного) диод гаснет на 5 с, а затем вновь загорается. Текст программы сохраните в файле с именем  but2.asm в папке с вашими проектами. Проверьте правильность работы программы на открытом проекте  but.dsn.

3.5.  Разработка проекта управления от микроконтроллера

семисегментным светодиодным индикатором

3.5.1. Теперь разработаем МКУ, в котором микроконтроллер выводит данные на семисегментный светодиодный индикатор. Принципиальная схема такого МКУ может иметь вид, приведенный на рис. 4. В этой схеме используется индикатор с общими катодами. Сегменты индикатора подключены к выводам порта В, а общий вывод индикатора (катоды светодиодов) – к общему проводу схемы. Сегмент индикатора будет светиться при высоком уровне на соответствующем выводе порта В. На изображении индикатора выводы сегментов располагаются с левой стороны сверху вниз по порядку: a, b, c, d, e, f, g.

3.5.2. Создайте новый проект, используя пункт меню File > New Design.

3.5.3. Откройте библиотеку компонентов и выберите из нее микроконтроллер PIC16F84A. Затем выберите в окне Category пункт Optoelectronics (оптоэлектронные приборы) и выделите в окне Results строку 7SEG-COM-CATODE. Это 7-ми сегментный индикатор красного цвета с общими катодами светодиодов. Щелкните два раза по строке, а затем закройте библиотеку.

3.5.4. Теперь разместите элементы МКУ в окне редактирования. Вначале поместите микроконтроллер. Постарайтесь, чтобы вывод RB0/INT оказался на линии  точек сетки. Это в дальнейшем упростит рисование соединений в схеме. Затем поместите в окно редактирования индикатор. Постарайтесь, чтобы верхний вывод индикатора (сегмент a) оказался на одной горизонтальной линии с выводом RB0/INT микроконтроллера. Для удобства размещения увеличьте масштаб отображения элементов. Затем перейдите в режим Terminals Mode и выберите из списка клемму Ground. Поместите ее ниже  общего вывода индикатора.

3.5.5. Выполните соединение элементов между собой согласно принципиальной схеме, приведенной на рис. 4.

Рис. 4. Схема МКУ для управления индикатором

После завершения разводки необходимо сохранить проект. Для этого выберите пункт меню File > Save Design As… Раскройте вашу папку и сохраните проект под именем ind.dsn.

3.5.7. Следующим этапом проектирования МКУ является разработка программы для МК. Пусть после включения питания на индикатор постоянно выводится определенный код символа.

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

list p=16f84a

#include<p16f84a.inc>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

Number  equ  0x06  ; символ для вывода – цифра 6

org  0x000

clrf  PORTB  ; очистить триггеры-защелки порта В

bsf  STATUS,RP0  ; выбрать банк 1

clrf  TRISB             ; настроить все линии порта В на вывод

bcf  STATUS,RP0  ; выбрать банк 0

again

movlw  Number      ; переслать в регистр W символ

call  crosscode         ; перекодировка в семисегментный код,

; в регистре  W – семисегментный код

movwf  PORTB      ; вывод на индикатор

goto  again              ;  зацикливание программы

#include”cross.asm”              ; файл подпрограммы перекодировки

end

Задание 1. Наберите текст программы управления индикатором и сохраните в папке с вашим проектом под именем ind.asm.

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

; crosscode – подпрограмма перекодировки (получения

; семисегментного кода)

; входной параметр: регистр W – число в HEX-коде;

; выходной параметр: регистр W – семисегментный код числа

crosscode

andlw  0x0F     ; обнулить старшую тетраду регистра W