Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное_пособие.doc
Скачиваний:
70
Добавлен:
10.11.2019
Размер:
8.13 Mб
Скачать

5.6 Особенности схемы дисплея в учебной системе управления.

1) В учебной системе управления (рисунок 62) на шине данных включен последовательный сдвиговый регистр DD2. Обработчик дисплея, кроме выполнения основных функций, должен обеспечить процедуру последовательной записи данных (семисегментного кода) в сдвиговый регистр DD2. Данные должны выдаваться в разряд РС0 микроконтроллера младшим битом семисегментного кода вперед. Запись и сдвиг бита в регистр должена производиться положительным импульсом в разряде РС.7 микроконтроллера (вход С регистра DD2). После выполнения этой процедуры семисегментный код из регистра DD2 через резисторы R1-R8 поступают на сегментные входы индикаторов.

2) Выбор (включение) разряда индикатора производится сигналом низкого уровня с соответствующего выхода дешифратора DD3. Этот уровень поступает на базу одного из ключей VT1-VT4 и открывает ключ. Напряжение +5В поступает через открытый транзистор и включает соответствующий разряд индикатора. Таким образом, обработчиком выбор разряда индикатора должен производиться двоичным кодом в разрядах РС0 и РС1. Соответственно разряд РС6 должен быть установлен в единицу.

Рисунок 62

3) При загрузке семисегментного кода в регистр DD2, во избежание подсветки включенного разряда, необходимо установить РС6 микроконтроллера в состояние логической единицы, что приведет к выключению всех разрядов.

Текст программы:

.include "m16def.inc"

.org 0

;***********Definition********************************

.equ Set_razr = 0b11000011

.def adr_cnt = r20

.def Num_segments = r22

Start:

ldi r16,low(RAMEND) ;установка указателя стека на

out SPL,r16 ;максимальный адрес SRAM ATmega16

ldi r16,high(RAMEND)

out SPH,r16

sbi PORTC,6 ;Выключение индикатора (см. схему)

ldi r16,Set_razr ;Линии 0,1,6,7 PORTC на вывод(см. схему)

out DDRC,r16 ;входы D и С регистра,входы дешифратора

Cikl: ldi adr_cnt,0 ; двоичный адрес разряда индикатора,и

;счетчик числа разрядов индикатора

ldi XH,$00 ;адрес первой ячейки области ОЗУ, в которой

;хранятся данные (ячейки $60-$63)

ldi XL,$60

Nxt_razr:

Ldi r31,High(Tab_code*2);загрузка старшей и младшей

ldi r30,Low(Tab_code*2) ;половин адреса начала таблицы

;кодов символов

ld r16,x+ ;загрузить в R16 первый байт данных из ячейки

;памяти, адрес которой находится в Х

add r30,r16 ;сложить содержимое регистров R30 и R16 для

;получения адреса ячейки таблицы

;перекодировки, в которой находится

;семисегментный код символа соответствующий ;содержимому отображаемой в данный момент ;ячейки дисплея

ldi r16,0

adc r31,r16;если адрес таблицы больше чем 255, то учтем

;перенос в регистр R31

lpm ;загрузить в R0 семисегментный код из таблицы ;перекодировки

ldi Num_segments, 8; Количество сегментов и

;одновременно счетчик загрузки

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

;****Процедура последовательной загрузки регистра DD2(см. схему)

Load_regist:MOV R16,R0 ;сохранить копию сегм. кода в R16

;будем загружать R16 в порт, (а на вход D регистра поступит через РС0

;только младший разряд кода из младшего разряда регистра R16). Перед

;выгрузкой R16 надо установить шестой разряд байта в R16(он через РС6

;микроконтроллера выключит индикатор, так как нулевой уровень

;сместится на один из неиспользуемых выходов дешифратора) и сбросить

;седьмой разряд в R16, чтобы на входе С регистра установился нуль.

SBR R16,$40 ;установить 1 на входе дешифратора для выкл.

;текущего разряда перед загрузкой регистра

;семисегментным кодом для след. разряда

CBR R16,$80 ;ноль на входе С регистра

out PORTC,r16 ;выключается индикатор и один разряд ;семисегментного кода через РС0 ;поступает на вход ;D регистра

sbi PORTC,Sinhr ;Запись разряда в регистр - посылаем ;синхроимпульс

cbi PORTC,Sinhr

roR r0 ;следующий разряд семисегментного кода ;в младшем разряде r0

dec Num_segments ;отсчет в сторону вычитания счетчика

;числа импульсов при последовательной

;записи семисегм. кода в регистр

brne Load_regist ;Пока не загрузятся все 8 разрядов

out portc,adr_cnt ;включить разряд индикатора

rcall Time_light ;Задержка свечения разряда индикатора

inc adr_cnt ;Переход на следующее знач. счетчика

;циклов дисплея

cpi adr_cnt,4 ;Он - последний?

brne Nxt_razr ;След разряд индикатора

rjmp Cikl

Time_light: ;*** Задержка 3,75 мс

ldi r16,2

m3: ldi r17,100

m2: ldi r18,100

m1: dec r18

brne m1

dec r17

brne m2

dec r16

brne m3

ret

Tab_code:

.Db 3,$9f,$25,$d,$99,$49,$41,$1f,1,9,$11,$c1,$63,$85,$61,$71