12-разрядный ЦАП DAC813 преобразует 12-ти битовый параллельный код в выходное униполярное напряжение. Время преобразования составляет 3,3 – 5мкс. В данном ЦАП есть возможность защелкивания раздельно младших 8 бит и старших 4-х. Преобразование осуществляется в 2 этапа: на первом – во внутренние регистры-защелки записываются цифровые данные (длительность записи не менее 55нс); на втором этапе в течение 50нс осуществляется перезапись данных из раздельных 4-х и 8-ми битовых регистров-защелок в общий 12-разрядный регистр–защелку, сразу после чего начинается преобразование данных, которое может длиться до 5мкс.
Для формирования на ШД номера прерывания, младшие 8 разрядов через резисторы R6-R13 (номиналом 1кОм каждый) соединены с источником питания. Они формируют на младших разрядах ШД сигнал слабой 1. Этот сигнал никак не влияет на работу МПС, но в момент считывания номера прерывания на ШД формируется число 255.
Обозначение |
Наименование (тип) |
Количество |
Диод |
||
VD1 |
Д9 |
1 |
Индикаторы |
||
L0-L7 |
TDSG1150 |
8 |
Кварцевый резонатор |
||
ZQ1 |
Кварц 15МГц |
1 |
Конденсаторы |
||
C1 |
К15-5-10пФ±20% |
1 |
С2 |
К53-1-10мкФ±20% |
1 |
Микросхемы |
||
DD1 |
К1810ГФ84 |
1 |
DD2 |
DAC813 |
1 |
DD3 |
КМ155ИД12 |
1 |
DD4 |
К1810ВМ86 |
1 |
DD5 |
К1810ВИ54 |
1 |
DD6, DD7 |
КР580ИР82 |
2 |
DD8, DD9 |
КР580ВА86 |
2 |
DD10, DD11 |
К573РФ2 |
2 |
DD12 |
КР531ИД7 |
1 |
DD13 |
К155ЛИ1 |
1 |
DD14 |
К155ЛЛ1 |
1 |
DD15, DD16 |
К537РУ9А |
2 |
DD17 |
КР580ВВ79 |
1 |
DD18 |
К155ЛН1 |
1 |
Резисторы |
||
R1 |
МЛТ-0,25-200кОм±10% |
1 |
R2, R3-R10, R11-R18 |
МЛТ-0,25-1кОм±10% |
17 |
R19-R26 |
МЛТ-0,25-20кОм±10% |
8 |
Транзисторы |
||
VT1-VT8 |
2N1613 |
8 |
;вектор 255-го прерывания
03fch: 500h
03feh: 0h
;точка старта при включении процессора
0ff0h: jmp far ptr start
;таблица замены цифр на индикаторные коды
400h:
db 00111111b ;код цифры 0
db 00000110b ;код цифры 1
db 01011011b ;код цифры 2
db 01001111b ;код цифры 3
db 01100110b ;код цифры 4
db 01101101b ;код цифры 5
db 01111101b ;код цифры 6
db 00000111b ;код цифры 7
db 01111111b ;код цифры 8
db 01101111b ;код цифры 9
;переменные в ОЗУ
1000h: tp db 0
1001h: Am db 3 dup (0)
1004h: Fr db 4 dup (0)
1008h: Umax dw 0
100ah: freq dw 0
100ch: it dw 0
100eh: max_it dw 0
420h:
start:
;инициализация стека
mov ax,100h
mov ds,ax
mov ss,ax
mov sp,0fffh
mov ax,0
mov es,ax
mov di,0
mov cx,10h
clear:
mov ds:[di],al ;очистка переменных в ОЗУ
loop clear
;инициализация таймера ВИ54
mov bx,3125
mov al,00010110b ;0-й канал во 3-й режим с 2-байтной константой
mov es:[2003h],al
mov es:[2000h],bl
mov es:[2000h],bh
mov bl,250
mov al,01110100b ;1-й канал в 2-й режим с 1-байтной константой
mov es:[2003h],al
mov es:[2001h],bl
;инициализация ВВ79
mov al,0 ;8-элементный, 8-символьный дисплей, ввод слева, внешн. дешифрация, запрет одновременного нажатия 2-х клавиш
mov es:[4001h],al
mov al,00100010b ;коэффициент деления тактовой частоты =2
mov es:[4001h],al
sti ;разрешение аппаратных прерываний
wt:
wait ;ожидание аппаратного прерывания
jmp wt ;переход на метку wt
;подпрограмма обработки прерывания
500h:
mov al,es:[4001h] ;считывание слова-состояния ВВ79
and al,0fh
jz next_ ;если клавиатурное ОЗУ пусто, перейти на метку next_
mov al,01010000b ;команда чтения символов из клавиатурного ОЗУ
mov es:[4001h],al
mov al,es:[4000h] ;считывание кода нажатой клавиши
cmp al,7
ja next_ ;если нажата цифра, проигнорировать нажатие и перейти на next_
cmp al,1
je A ;если нажата клавиша A (код =1), перейти на метку A
cmp al,2
je F ;если нажата клавиша F (код =2), перейти на метку F
;изменение типа генерируемого сигнала
typ:
mov al,es:[4001h] ;считывание слова-состояния ВВ79
and al,0fh
jz typ ;если в клавиатурном ОЗУ нет символов, вновь считываем слово-состояния
mov al,es:[4000h] ;считывание кода нажатой клавиши
cmp al,10
ja typ ;если нажата цифра >2, проигнорировать нажатие
cmp al,8
jb typ ;если нажата не цифра, проигнорировать нажатие
and al,7 ;отбрасывание ненужной информации
mov tp,al ;сохранение в переменной tp типа сигнала (0-меандр, 1-треугольный, 2-импульсный)
jmp indicate ;переход на метку indicate
;изменение амплитуды генерируемого сигнала
A:
mov cx,3
mov di,1
a1:
mov al,es:[4001h] ;считывание слова-состояния ВВ79
and al,0fh
jz a1 ;если в клавиатурном ОЗУ нет символов, вновь считываем слово-состояния
mov al,es:[4000h] ;считывание кода нажатой клавиши
cmp al,8
jb a1 ;если нажата не цифра, проигнорировать нажатие
cmp al,10h
jb a2 ;если нажата цифра в первом ряду, перейти на a2
and al,7
add al,5
jmp a3
a2:
and al,7
a3:
mov ds:[di],al ;сохранение нажатой цифры в ОЗУ по адресу ds:[di]
inc di ;di=di+1
loop a1 ;cx=cx-1, если cx>0, перейти на a1
;группировка цифр амплитуды в одно число
mov dx,0
mov cx,3
mov bl,10
mov si,1
mov ax,0
a4:
mul bl ;ax=ax*bl
mov dl,ds:[si] ;dl=очередной цифре (движемся от старших цифр к младшим)
add ax,dx ;ax=ax+dx
inc si ;si=si+1
loop a4 ;cx=cx-1, если cx>0, перейти на a4
mov Umax,ax ;сохранение посчитаной амплитуды в переменной Umax
jmp indicate ;переход на метку indicate
next_:
jmp next_iter ;переход на метку next_iter
;изменение частоты генерируемого сигнала
F:
mov cx,4
mov di,4
b1:
mov al,es:[4001h] ;считывание слова-состояния ВВ79
mov al,0fh
jz b1 ;если в клавиатурном ОЗУ нет символов, вновь считываем слово-состояния
mov al,es:[4000h] ;считывание кода нажатой клавиши
cmp al,8
jb b1 ;если нажата не цифра, проигнорировать нажатие
cmp al,10h
jb b2 ;если нажата цифра в первом ряду, перейти на b2
and al,7
add al,5
jmp b3
b2:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.