Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР4_метод_25_04_08.doc
Скачиваний:
19
Добавлен:
02.04.2015
Размер:
163.84 Кб
Скачать

Подготовить ”бегущий 0”

Установить начальный адрес кс

Выделить значащие разряды и записать в ячейку КС

Сдвинуть”0”в следующую позицию

Перейти к следующей ячейке КС

ДА

НЕТ

Установить начальный адрес КС

Прочитать очередную ячейку КС

ДА

НЕТ

Перейти к следующей ячейки КС

Определение № строки

dck:

Определение №столбца

ДАdloop1:

НЕТ

row_n =8

col_n =2

Определение № нажатой клавиши

Программа опроса клавиатуры.

row_n: egu 41h

col_n: egu 42h

N: egu 40h ; номер нажатой клавиши

map start: egu 30h ; начало области хранения КС клавиатуры

klav: push psw. ; сохранение используемых

push a ; ресурсов МК в стеке

push 0

push 1

; формирование КС и запись в память МК

установка ”0”в начальные позиции

mov a,#07Fh ; подготовкабегущего нуля

mov r0,#map_start ; адрес начала карты

;состояние клавиатуры

opros: mov 0E8h,a ;выдача байта, вида ”бегущий 0” в порт 4

setb p1.1 ;настройка на

setb p1.0 ;

mov b,p1 ;чтение состояние клавиши очередной строки клав-ры

anl b,#03h ;маска, выделение значащих разрядов

mov @r0,b

setb c

rrc a ;подготовка нового опроса сдвиг “0”в следующую

позицию

inc r0 ;в очередную позицию карты, перейти к следующей

ячейки КС

cjne a,#11111111b,opros ; дешифрация карты

mov r0,#map_start,

dc: mov a,@r0

cjne a,#03h,dck ; нажата клавиша?

inc r0 ;нет просмотр карты далее

cjne r0?#(map_start+8),dc

mov row_n, #8 ; если клавиша не нажата, row_n=8, col_n=2

mov col_n, #2 ; если клавиша нажата, row_n=0..7, col_n=0..1

sjmp end1

dsk: mov a, 0 ;клавиша нажата, R0 содержит адрес ячейки

clr c

subb a,# map-start

mov row_n, a

mov a,@r0 ;содержимое ячейки КС для определения № колонки

mov col_n, #0

dloop1: rrc a

jnc end1

inc col_n

mov r1, col_n

cjne r1,#2. dloop1

end1: lcall get_num

pop 1

pop 0

pop a

pop psw

ret

get_num: push a

mov a, row_n

cjne a,#8, gn_end

mov N,#0

pop a

ret

gn_end: clr c

rlc a ;умножить row_n на два

add a, col_n

inc a

mov N,a

pop a

ret

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

1.2 Сопряжение мк с жки. Вывод заголовков.

В большинстве встраиваемых систем управления необходимо организовать связь с оператором для вывода информации о параметрах работы системы.

Рассмотрим задачу вывода информации на алфавитно-цифровой жидкокристаллический индикатор (ЖКИ) модели DM2021 фирмы Sanyo. Данная модель ЖКИ имеет поле вывода информации размером две строки по двадцать символов в каждой. ЖКИ содержит видеопамять, в которой хранятся отображаемые символы, а также обладает собственной системой управления жидкокристаллической панелью. Наличие указанных узлов существенно упрощает работу с ЖКИ, так как собственно управление отображением точек - элементов изображения – производится автоматически в соответствии с поданной на ЖКИ командой.

Пример подключения ЖКИ к МК показан в левой части на рис.1.

ЖКИ содержит восьмиразрядную шину команд-данных, которая подключена к порту Р4, и шину управления, в состав которой входят одноразрядные линия разрешения программирования (E), выбора типа посылки “команда данные” (RS) и выбора направления передачи данных “чтение-запись” (RW). Эти линии подключены к старшим трем разрядам порта Р1 (Р1.7, Р1.5 и Р1.6 соответственно). Переменный резистор необходим для регулировки контрастности изображения. Он позволяет плавно менять напряжение питания драйвера ЖКИ, что приводит к изменению угла поворота жидких кристаллов. Этим резистором можно отрегулировать фактическую контрастность при некотором преимущественном угле наблюдения (снизу-вверх или сверху - вниз). Последовательность действий, которые необходимо выполнить, управляющей системе при совершении операций записи для 8-ми разрядной шины приведена ниже:

1. установить значение линий RS;

2. вывести значение байта данных на линии шины DB0…DB7;

3. установить линию Е = 1;

4. установить линию Е = 0;

5. установить линии DB0…DB7=HI в состояние высокого импеданса ( Е=1).

Процедура записи в ЖКИ выполняется в три этапа: на шине DB устанавливается информация, отражающая подаваемые в ЖКИ команды-данные, затем устанавливаются необходимые значения RW и RS и, наконец на выходе Е формируется переход от высокого логического уровня к низкому. Для возврата системы управления ЖКИ в исходное состояние следует перевести вход Е в состояние логической единицы.

Не приводя всей системы команд ЖКИ, остановимся на следующих из них:

38h-установка восьмибитного режима обмена с ЖКИ, использование для вывода обеих строк символов размером 7×5 точек;

0Chактивизация всех знакомест :RB в режиме погашенного курсора;

80h- установка адреса, начиная с которого записываемые в ЖКИ данные будут последовательно располагаться в видеопамяти;

06H- устанавливает режим автоматического перемещения курсора слева – направо после вывода каждого символа.

Примеры программирования.

а) вывод команды

mov switch, #0

mov byte, #38h

lcall indic_wr

б) Вывод байта данных - символа

mov switch, #1

mov byte, #symbol

lcall indic_wr

Графическая схема алгоритма и текст программы, осуществляющей вывод на ЖКИ сорока символов, коды которых расположены во внешней памяти данных микроконтроллера, начиная с адреса 0FFD0h, приведены ниже

инициализировать ЖКИ

настроить адрес 1-ой строки ЖКИ

считать очередной код из памяти МК и выдать на ЖКИ

ДА

НЕТ

настроить адрес 2-ой строки ЖКИ

считать очередной код из памяти МК и выдать на ЖКИ

ДА

НЕТ

Текст программы вывода заголовков на ЖКИ.

(RS:=0)

indic: ;инициализация ЖКИ

indic_init: switch,#0 ;переключить на команду

mov byte,#38h ;определить передаваемый байт (команда - данных )

lcall indic_wr

mov byte,#0ch

lcall indic_wr

mov byte,#06h ;режим автоматического перемещения курсора слева

направо после вывода каждого символа

lcall indic_wr

mov byte,#80h ;установка адреса первого символа

lcall indic_wr ;первой строки

mov switch,#1 ;переключить на данные (RS=1)

mov dptr,#0FFD0h

indic_data_wr1: movx a,@dptr ; вывод символов первой строки

ind_row1: mov byte,a ;передаваемый байт в буфер

lcall indic_wr

inc dptr

mov a, dpl

cjne a,#0E4h, indic_data_wr1 ;

mov switch,#0 ;RS=0-команда

mov byte,#0C0h ;установка адреса первого символа

lcall indic_wr ;второй строки

mov switch,#1 ;RS=1 - данные

indic_data_wr2: movx a,@dptr ; вывод символов второй строки

ind_row2: mov byte,a

lcall indic_wr

inc dptr

mov a,dpl

cjne a,#0F8h, indic_data_wr2 ;E4h+14h=F8h – адрес конца второй строки

indic_exit: ret

indic_wr: mov 0e8h, byte ; передаваемый байт в Р4, процедура записи в ЖКИ

setb p1.7 ;E:=1

clr p1.6 ;RW:=0(запись)

mov a, switch

mov c,acc.0

mov p1.5,c ;RS:=0 (команда - данные; )

lcall indic_delay

clr p1.7 ;E:=0

lcall indic_delay

setb p1.7 ;E:=1 (установка DB0…DB7 в состояние HI)

indic_delay: nop ; процедура программной задержки

nop

nop

nop

nop

nop

nop

nop

ret

org 0FFD0h

data: db “it is test example.” ; пример организации выводимых данных

db “0123456789ABCDFI@#$”