В номенклатуру задач вывода информации входят как задачи вывода управляющей информации, поступающей в виде различных сигналов (амплитудных, частотных и других), на объекты управления, так и организация вывода информации на пульт оператора.
Рассмотрим программу, выполнение которой приводит к зажиганию светодиода, подключенного к одному из выводов порта ввода–вывода 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 представлены схемы подключения светодиодов к МК.
Рассмотрим особенности подключения светодиодных индикаторов к микроконтроллеру. На рис. 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 Гц.
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав!Последнее добавление