Вывод информации из микроконтроллерной системы

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

Рассмотрим программу, выполнение которой приводит к зажиганию светодиода, подключенного к одному из выводов порта ввода–вывода PTD.

Ниже представлен текст программы формирования управляющего сигнала на выводе PTD5 порта вывода PTD.

ramstart equ $0040 ;команды присвоения переменным символьных
romstart equ $8000 ;имен
vectorstart equ $FFDC  
PTD equ $0003  
DDRD equ $0007  
  org romstart ;директива установки записи команд в блок Flash-памяти
  mov   $20, DDRD ;конфигурировать вывод PTD5 порта D на вывод ;информации
loop: mov $00,PTD ;установить низкий потенциал на выводе для ;зажигания светодиода
  bra loop ;организация цикла для постоянного горения светодиода
  end    

Начало данной программы аналогично программе реализации контроля переключения ключа, подключенного к выводу порта ввода-вывода РТD. Благодаря команде EQU присваиваются переменным символьные имена. Команда ORG задает начальный адрес программы в памяти МК.

Команда mov $20, DDRD необходима для конфигурации вывода PTD5 порта D на вывод информации. В регистр направления и передачи данных DDRD загружается код $20 (%100000).

 
  DDRD7 DDRD6 DDRD5 DDRD4 DDRD3 DDRD2 DDRD1 DDRD0
Состояние до записи
после записи

Таким образом, запрограммировали PTD5 на вывод информации.

После этого на биты данных порта D подается код $00 при помощи команды mov, устанавливается низкий уровень на PTD5 для зажигания светодиода. Далее организуется цикл для постоянного горения светодиода при помощи команды bra loop, которая обеспечивает безусловный переход на метку loop, таким образом, на PTD5 будет всегда низкий уровень.

На рис. 3.13 представлены схемы подключения светодиодов к МК.

Вывод информации из микроконтроллерной системы - student2.ru

а) б)

Рис. 3.13 Подключение светодиода к МК:

а) включение логической «1»; б) включение логическим «0»

Рассмотрим особенности подключения светодиодных индикаторов к микроконтроллеру. На рис. 3.14 и рис. 3.15 представлены схемы подключения светодиодного индикатора с общим катодом и общим анодом к МК.

МС
  PTC0   PTC1   PTC2   PTC3   PTC4
          Гаш
DC
  а b c d e f g
  а b c d e f g h   KA  
LED  
d
c
e
f
g
b
a
К514ИД1
АЛС314А

Рис. 3.14. Подключение светодиодного индикатора с общим катодом к МК

+5В
R7
R1
МС
  PTC0   PTC1   PTC2   PTC3   PTC4
          Гаш
DC
  а   b c d e f g
  а   b c d e f g   h   KA  
LED  
d
c
e
f
g
b
a
К514ИД2
АЛС314Б

Рис. 3.15. Подключение светодиодного индикатора с общим анодом к МК

Рассмотрим пример вывода информации на 2-разрядный 7-сегментный индикатор с использованием динамической индикации, которая заключается в следующем. Информация (числа), которые необходимо высветить через выводы порта РТС РТС0 – РТС3 подаются на дешифратор. Дешифратор необходим для преобразования двоичного кода в код семисегментного индикатора. Через PТС4 осуществляется управление десятичной точкой индикатора. А через выводы PТС5, PТС6 подаются управляющие импульсы, которые определяют тот разряд, который будет активным.

Очевидно, что необходимо синхронизировать информационные сигналы с управляющими. На рис. 3.16 приведена блок-схема программы вывода информации на 2-разрядный 7-сегментный индикатор.

Текст программы вывода информации на 2-х разрядный семисегментный индикатор представлен ниже.

romstart: equ $8000  
ramstart: equ $0038  
vectorstart: equ $FFDC  
vectorTIM1 equ $FFF2  
T1SC: equ $0020  
T1MODh: equ $0023  
T1MODl: equ $0024  
PTDPUE: equ $000A  
DDRC: equ $0006  
PTC: equ $0002  
count equ $0039 ;счетчик
rezultat equ $0053 ;результат, который надо вывести
syncro equ $0055 ;ячейка, которая используется для ;синхронизация разрядов при выводе ;информации на 7-сегментный индикатор
syncro+1: equ $0056  
reserve: equ $0057 ;ячейка для временного хранения результатов ;промежуточных операций
odin equ $0058 ;ячейка, которая используется для определения ;номера работающего разряда при выводе ;информации на 7-сегментный индикатор
  org romstart  
main1: clra   ;очистить используемые регистры и ячейки ;памяти
  clrx    
  clr count  
  clr rezultat  
  clr syncro  
  clr syncro+1  
  clr reserve  
  clr odin  
  mov #%0100000,syncro ;1-й разряд
  mov #%1000000,syncro+1 ;2-й разряд
  mov #$1,odin  
  mov #%1111111,DDRC ;установить все биты PTC на вывод
  mov #$00,PTC ;обнулить порт С
obnulenie: mov #$0,count ;обнулить счетчик
flag: bsr display  
  inc count ;увеличить содержимое счетчика на 1
  lda count  
  cmp odin ;сравнить содержимое А с odin
  bhi obnulenie ;если больше 1, обнулить count
  jmp flag  
display: lda #rezultat  
  add count ;сложить содержимое А с содержимым ;count
  tax   ;переслать содержимое А в Х
  lda ,x ;установить в А содержимое ячейки адрес ;которой указан в Х
  sta reserve ;установить содержимое А в reserve
  lda #syncro ;установит в А адрес syncro
  add count ;сложить содержимое А с содержимым count
  tax    
  lda ,x  
  add reserve ;сложить содержимое А с содержимым reserve
  mov #1250,$59  
  sta PTC ;установить в PTC
izo: mov #%0100110,T1SC ;запустить т/с
  mov #$FF,T1MODH  
  mov #$FF,T1MODL  
  jmp *  
prer2: dec $59 ;уменьшить содержимое ячейки $59 на 1
  bne izo  
  mov T1SC,$50 ;выключить т/с
  bclr 7,T1SC  
  mov #0,PTC ;выключить индикатор
  rts    
  rti    
  end    

Для того чтобы программа могла начать работу, должны быть определены через команды присвоения EQU все спецификации аппаратных средств, такие как имена регистров и области памяти. С помощью объявлений определяются все переменные. Команда ORG сообщает ассемблеру адрес начала оперативной памяти. Программа MAIN – начало главной программы, которая вызывается после аппаратного сброса МК или команды RESET отладчика (команды Power-on для некоторых отладчиков).

Основная программа начинается с очистки необходимых при работе регистров и ячеек памяти. Заметим, что эта процедура является важной и необходимой для обеспечения нормальной работы программы. После данной процедуры в ячейки syncro, syncro+1, odin загружаются значения, которые понадобятся при работе. Далее происходит инициализация порта РТС. В регистр DDRC порта записывается следующее число: %1111111, таким образом, все выводы порта программируются на вывод информации. После этого начинается выбор того разряда 7-сегментного индикатора, на который будет подаваться информация.

Здесь реализована динамическая индикация. Работа индикатора осуществляется следующим образом: разряды индикатора работают поочередно, т.е. в один момент времени может работать только один разряд. Время переключения между разрядами настолько малое, что человеческому глазу оно практически не заметно. Поэтому оператор будет наблюдать постоянно высвеченное значение. По этой причине необходимо синхронизировать управляющие 7-сегментным индикатором сигналы с информационными сигналами.

Происходит очистка счетчика (count). Далее происходит безусловный переход к подпрограмме DISPLAY, в которой происходит синхронизация управляющих 7-сегментным индикатором сигналов с информационными. После выполнения данной подпрограммы процессор возвращается к команде, следующей за командой bsr DISPLAY, происходит увеличение содержимого счетчика на единицу, загрузка содержимого счетчика в аккумулятор А, сравнение содержимого аккумулятора с содержимым ячейки odin, т.е. с единицей. Если содержимое счетчика больше единицы, то обнуляем счетчик, в противном случае начинает выполняться подпрограмма DISPLAY.

Рассмотрим подробнее выполнение подпрограммы DISPLAY. В начале в аккумулятор загружается адрес ячейки rezultat. Затем содержимое аккумулятора А складывается с содержимом счетчика count, после чего результат арифметической операции посылается в индексный регистр H:X. В аккумулятор загружается число, адрес которого указан в ячейке Н:Х, это число из аккумулятора пересылается в ячейку reserve. Далее в аккумулятор загружается адрес ячейки syncro, происходит сложение содержимого аккумулятора с содержимым счетчика count. Результат этой операции посылается в индексный регистр Н:Х. В аккумулятор после этого записывается число, адрес которого указан в регистре Н:Х. В результате происходит сложение содержимого аккумулятора с содержимым ячейки reserve. Таким образом, в аккумуляторе содержится синхронизированный сигнал, который уже можно посылать на вывод.

Сигнал на индикатор поступает с частотой 100 Гц. Эта частота реализуется при помощи модуля TIM08 следующим образом. В биты PS2 PS1 PS0 регистра T1SC записывается код 1 1 0, соответственно. Это необходимо для задания коэффициента деления. Частота тактирования = fbus/64. fbus для МС68HC908GP32 = 8 МГц. Подставляя в формулу, указанную выше, находим, что частота тактирования = 125000 Гц. В самой подпрограмме прерывания необходимо организовать цикл, в котором таймер-счетчик прокручивается 1250 раз. После 2-го раза таймер-счетчик необходимо остановить. Таким образом, частота сигнала, поступающего на индикатор, = 125000/1250 = 100 Гц.

Наши рекомендации