5
.2.pdfРис.8. Схема программы klav_jki
Текст программы:
klav_jki_main.asm org 8400h
include asms\4081_4\Bs\5.2\2.asm
include asms\4081_4\Bs\5.2\klav_jki.asm include asms\4081_4\Bs\5.2\klav_mon.asm ret
|
klav_jki.asm |
|
|
mov r1, #34h |
|
|
mov r0, #30h |
|
|
mov dptr,#FFE2h |
; адрес внешней памяти для записи номера нажатой клавиши |
cols: |
cjne @r0, #70h, cols1 |
|
|
mov a,#00h |
|
|
jmp end |
|
cols1: |
cjne @r0, #b0h,cols2 |
|
|
mov a,#01h |
|
|
jmp end |
|
cols2: |
cjne @r0, #d0h, cols3 |
|
|
mov a,#02h |
|
|
jmp end |
|
cols3: |
cjne @r0, #e0h,cols0 |
|
|
mov a,#03h |
|
|
jmp end |
|
end: |
mov r3,a |
|
|
mov a,r0 |
|
|
subb a,#30h |
|
|
rl a |
|
|
rl a |
|
|
add a,r3 |
|
|
mov r3,a |
|
; Получение HEX-кода для вывода на экран ЖКИ |
||
|
clr c |
; очищаем флаг С |
|
subb a,#0ah |
|
|
jc l30 |
; проверка номера нажатой клавиши |
|
|
; если он меньше 10, то прибавляем 30 для получения HEX-кода |
|
|
; если 10 или больше, то прибавляем 37 |
l40: |
mov a,r3 |
|
|
add a,#37h |
|
|
jmp l |
|
l30: |
mov a,r3 |
|
|
add a,#30h |
|
|
jmp l |
|
; записываем HEX-код нажатой клавиши по адресу внешней памяти
l:mov @r1, a movx @dptr, a jmp endend
; если не нажато ни одной клавиши, то записываем символ «X» cols0: cjne @r0, #f0h,colsF
n1: |
inc r0 |
|
cjne r0,#34h,cols |
|
mov a,#d5h |
|
mov @r1, a |
|
movx @dptr, a |
|
jmp endend |
; если нажато несколько клавиш, то выводим символ «>» colsF: mov a,#3eh
mov @r1, a movx @dptr, a
endend: mov a,#ffh
Описание программы:
Данная программа использует алгоритмы предыдущих программ по определению и выводу номера нажатой клавиши.
Отметить следует процесс преобразования номера клавиши в HEX-код.
Если номер нажатой клавиши меньше 10, то к номеру прибавляется 30h и получается символ от 0 до 9. Если номер 10 и более, то к номеру прибавляется и получается символ от A до F. HEX-коды приведены в таблице
В ходе тестирования программы были проверены разные комбинации нажатых клавиш: одна клавиша, две клавиши и ни одной клавиши. Результаты показывают, что программа работает корректно.
Результаты испытаний и анализ результатов:
Результатами испытания явилось отображение на экране необходимого текста. Не нажато ни одной клавиши:
Number of button X Нажата четвертая клавиша:
Number of button 04 Нажато две клавиши:
Number of button >
4.5. Аналого-цифровое преобразование
Необходимо разработать и выполнить программы, преобразующие аналоговые сигналы от потенциометра и интегратора в цифровые коды и выводящие эти коды на ЖКИ. Отличием этих программ друг от друга является номер входа АЦП, на который подается аналоговый сигнал, так же отличается способ исследования преобразований, в остальном программы совпадают.
Преобразование аналогового сигнала и вывод данных на экран должен осуществляться в три этапа (три подпрограммы):
1.непосредственно само аналого-цифровое преобразование;
2.преобразование двоичного кода, полученного на выходе АЦП, в HEX-коды;
3.вывод HEX-кодов на ЖКИ.
Схема программы:
Рис.9. Схема программ
Текст программы:
adc_mai.asm
org 8400h |
|
include asms\adc.asm |
;подключение подпрограммы adc.asm |
include asms\to_int.asm |
;подключение подпрограммы to_int.asm |
include asms\indic.asm |
;подключение подпрограммы indic.asm |
ret |
|
adc.asm
;регистры АЦП ADCON: equ D8h ADDAT: equ D9h DAPR: equ Dah
U:equ 40h
mov a, #00000011 ;задание режима работы и номера канала (для потенциометра – 3, для интегратора – 4)
|
anl ADCON, #E0h |
;настройка АЦП |
|
orl ADCON, A |
|
|
mov DAPR, #0h |
;задание опорных напряжений и запуск преобразования |
|
mov r7, #15 |
;формирование задержки |
r1: |
djnz R7, r1 |
|
|
mov U, ADDAT |
;запись результата в ячейку 40h |
to_int.asm
B: |
equ F0h |
|
|
mov a, 40h |
|
|
mov B, #10 |
;основание системы счисления |
|
div ab |
;деление |
|
mov r1, a |
|
|
mov a, b |
|
|
add a, #30h |
;в аккумуляторе HEX-код |
|
mov dptr, #FFD2h |
|
|
movx @dptr, a |
;запись третьего символа в видеобуфер |
|
mov a, r1 |
|
|
mov B, #10 |
;основание системы счисления |
|
div ab |
;деление |
|
mov r1, a |
|
|
mov a, b |
|
|
add a, #30h |
;в аккумуляторе HEX-код |
|
mov dptr, #FFD1h |
|
|
movx @dptr, a |
;запись второго символа в видеобуфер |
|
mov a, r1 |
|
|
mov B, #10 |
;основание системы счисления |
|
div ab |
;деление |
|
mov r1, a |
|
|
mov a, b |
|
|
add a, #30h |
;в аккумуляторе ASCII-код |
|
mov dptr, #FFD0h |
|
|
movx @dptr, a |
;запись первого символа в видеобуфер |
|
mov a, r1 |
|
Описание программы:
Подпрограмма adc.asm управляет АЦП. В ней указывается номер входа, на который поступает аналоговый сигнал, так что для преобразования сигналов от потенциометра и от интегратора она будет отличаться. Преобразование двоичного кода в HEX -коды выполняется программой to_int.asm. Она считывает из ячейки памяти двоичное число и три раза делит это число на 1010. Остатки от деления будут разрядами десятичного числа. Чтобы из них получить HEX-коды, нужно добавить код 30h. Так же подпрограмма to_int.asm записывает получившиеся коды в видеобуфер.
Вывод HEX-кодов на ЖКИ осуществляется с помощью подпрограммы из первого задания.
Для преобразования использовались сигналы от двух источников аналоговых сигналов: от потенциометра, и от интегратора, к которому был подключен генератор прямоугольных сигналов.
При испытаниях был использован осциллограф, позволяющий определять реальные значения аналоговых сигналов.
Испытания с потенциометром проводились следующим образом. По осциллографу определялось реальное значение на выходе с потенциометра, затем этот сигнал был дважды преобразован сначала при диапазоне 5 В, затем при диапазоне 1,25 В. Таких значений аналоговых сигналов было использовано 5 штук.
В ходе испытаний с интегратором, сначала по осциллографу измерялось среднее значение сигнала с выхода интегратора. Затем этот сигнал несколько раз преобразовывался при диапазоне 5 В, а после при диапазоне 1,25 В.
Результаты измерений наблюдались на осциллографе и на ЖКИ. Они представлены в таблицах № - №
Результаты:
Таблица . Результаты преобразования аналогового сигнала с потенциометра.
Диапазон |
U осц. |
Цифровой |
Результат |
Погрешность |
Абсолютная |
|
эквивалент |
преобразования |
погрешность (мВ) |
||||
|
|
|
||||
|
1 |
51 |
55 |
4 |
80 |
|
0-5 В |
2 |
103 |
106 |
3 |
60 |
|
3 |
154 |
160 |
6 |
120 |
||
(DAPR = 0) |
||||||
4 |
205 |
211 |
6 |
120 |
||
|
||||||
|
5 |
256 |
255 |
1 |
20 |
|
|
|
|
|
|
|
|
0-1,25 (40) |
1 |
204 |
214 |
10 |
50 |
|
1,25-2,5 (84) |
2 |
153 |
167 |
14 |
70 |
|
2,5-3,75 (C8) |
3 |
102 |
112 |
10 |
50 |
|
3,125-4,375 (EA) |
4 |
179 |
184 |
5 |
25 |
|
3,75-5 (0C) |
5 |
255 |
255 |
0 |
0 |
Видно, что АЦП выполняет преобразование с заметной ошибкой, причем, чем дальше реальное значение сигнала от границ диапазона преобразований, тем больше погрешность. Однако уменьшение диапазона преобразований довольно сильно уменьшает погрешность.
Таблица 2. Результаты преобразования аналогового сигнала с интегратора.
Диапазон |
U осц. |
Цифровой |
Результат |
Погрешность |
Абсолютная |
|
эквивалент |
преобразования |
погрешность (мВ) |
||||
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
124 |
1 |
20 |
|
|
|
|
|
|
|
|
|
|
|
125 |
2 |
40 |
|
|
|
|
|
|
|
|
0-5 В |
2.4 |
123 |
128 |
5 |
100 |
|
(DAPR = 0) |
125 |
2 |
40 |
|||
|
|
|||||
|
|
|
|
|
|
|
|
|
|
130 |
7 |
140 |
|
|
|
|
|
|
|
|
|
|
|
131 |
8 |
160 |
|
|
|
|
110 |
3 |
15 |
|
|
|
|
|
|
|
|
|
|
|
98 |
9 |
45 |
|
|
|
|
|
|
|
|
1,875- |
|
|
112 |
5 |
25 |
|
|
|
|
|
|
||
2.4 |
107 |
97 |
10 |
50 |
||
3,125 (A6) |
||||||
|
|
|
|
|
||
|
|
107 |
0 |
0 |
||
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
124 |
17 |
85 |
|
|
|
|
|
|
|
|
|
|
|
94 |
13 |
65 |
|
|
|
|
|
|
|
Видно, что из-за пульсации сигнала на выходе интегратора, значения на выходе АЦП меняются, даже не смотря на то, что среднее значение сигнала остается неизменным.
Так же как и при потенциометре, после уменьшения диапазона преобразования, уменьшилась погрешность.
4.6.Аналого-цифровое преобразование и демонстрация скорости обработки изменяющегося сигнала
Анализ задания:
Необходимо с помощью цифрового осциллографа продемонстрировать скорость обработки изменяющегося аналогового сигнала. Для этого необходима программа adc_mai.asm. Эта программа должна реализовывать бесконечный цикл, в котором должны по очереди обрабатываться сначала сигнал от потенциометра, а затем сигнал от интегратора. Запись результатов преобразований должна производиться в различные ячейки. После каждого преобразования необходимо вызвать подпрограмму монитора (lcall 128h).
Рис.. Схема программы adc_mai.asm.
При преобразовании аналогового сигнала в цифровой код используется тот же алгоритм, что и в предыдущем задании.
Текст программы: adc_mai.asm
|
org 8400h |
|
|
m1: |
lcall adc |
;вызов подпрограммы adc, преобразующей аналоговые сигналы в цифровые коды |
|
|
lcall 128h |
;вызов подпрограммы монитора |
|
|
sjmp m1 |
;бесконечный цикл |
|
|
ret |
|
|
|
include asms\adc.asm |
;подключение подпрограммы adc.asm |
|
adc.asm |
|
|
;регистры АЦП |
|
ADCON: equ D8h |
|
|
ADDAT: |
equ D9h |
|
DAPR: |
equ Dah |
|
U1: |
equ 40h |
|
U2: |
equ 41h |
|
adc: |
mov a, #00000011 |
;преобразование сигнала от потенциометра |
|
anl ADCON, #E0h |
|
|
orl ADCON, A |
|
|
mov DAPR, #0h |
|
|
mov r7, #15 |
|
p1: |
djnz R7, p1 |
|
|
mov U1, ADDAT |
|
|
mov a, #00000100 |
;преобразование сигнала от интегратора |
|
anl ADCON, #E0h |
|
|
orl ADCON, A |
|
|
mov DAPR, #0h |
|
|
mov r7, #15 |
|
i1: |
djnz R7, i1 |
|
mov U2, ADDAT |
|
ret |
Описание программы:
В качестве сигналов использовались выход потенциометра и выход интегратора, подключенного к генератору прямоугольных импульсов. Для изменения аналоговых сигналов использовался регулятор потенциометра, а так же регуляторы постоянной времени интегратора и скважности генератора прямоугольных импульсов.
Результаты:
Результаты наблюдались в «Окне управления» в виде графиков зависимости цифрового эквивалента аналогового сигнала от времени. Результаты представлены на рисунках 11 - 13 Для потенциометра:
Рис.. График зависимости цифрового эквивалента аналогового сигнала на выходе потенциометра от времени.
Для интегратора:
Рис.. График зависимости цифрового эквивалента аналогового сигнала на выходе интегратора, регулируемого постоянной времени, от времени.
Рис.. График зависимости цифрового эквивалента аналогового сигнала на выходе интегратора, регулируемого скважностью, от времени.
Из графиков видно, что при изменении аналогового сигнала, изменение цифрового эквивалента происходит довольно быстро.
Выводы:
В результате работы были изучены основы работы с портами микроконтроллера SAB 80C515, ЖКИ, клавиатуры, потенциометра и генератора прямоугольных импульсов лабораторного стенда.
Всего в микроконтроллере SAB 80C515 шесть портов ввода-вывода цифровой информации и один порт ввода аналоговой информации. Это является недостатком данного микроконтроллера, потому что данного количества портов не всегда достаточно для подключения периферийных устройств:
∙Два порта заняты для подключения внешней памяти данных.
∙Для подключения ЖКИ требуется один порт и еще 3 разряда от другого порта на подключение управляющих линий, то есть 11 выводов.
∙Для подключения клавиатуры требуется 1 порт.
Врезультате имеется только 1 свободный порт и один порт частично. И это без учёта подключения источников прерываний и блока быстрого ввода-вывода. В итоге для ввода-вывода цифровой информации может не оказаться портов.
К достоинствам микроконтроллера отнесём возможность портов к передаче информации, как на вход, так и на выход, причем это можно осуществлять одновременно. Данная возможность экономит малое количество портов в микроконтроллере.