Обозначение |
Наименование (тип) |
Количество |
Датчики |
||
S1 |
AG1 |
1 |
S2 |
AG15 |
1 |
S3 |
AH200 |
1 |
Диод |
||
VD1 |
Д9 |
1 |
Индикаторы |
||
L0-L5 |
TDSG1150 |
6 |
Кварцевый резонатор |
||
ZQ1 |
Кварц 15МГц |
1 |
Конденсаторы |
||
C1 |
К15-5-10пФ±10% |
1 |
С2, С5, С8, С11 |
К52-1-10мкФ±20% |
1 |
C3, C6, C9 |
К15У-3-3300пФ±10% |
3 |
С4, С7, С10 |
К15У-3-470пФ±10% |
3 |
Микросхемы |
||
DA1 |
TDA1029 |
1 |
DA2-DA4 |
К140УД2А |
3 |
DD1 |
К1810ГФ84 |
1 |
DD2, DD3, DD9, DD10 |
КР580ИР82 |
4 |
DD4 |
К155ИД4 |
1 |
DD5 |
К155ТМ2 |
1 |
DD6 |
К1810ВМ86 |
1 |
DD7 |
К1810ВИ54 |
1 |
DD8 |
AD578 |
1 |
DD11, DD12 |
КР580ВА86 |
2 |
DD13, DD14 |
К573РФ2 |
2 |
DD15 |
К155ИД7 |
1 |
DD16 |
КМ155ИД12 |
1 |
DD17, DD18 |
К537РУ9А |
2 |
DD19 |
КР580ВВ79 |
1 |
DD20 |
К155ЛН1 |
1 |
DD21 |
К155ЛИ1 |
1 |
DD22 |
К155ЛЛ1 |
1 |
Резисторы |
||
R1 |
МЛТ-0,25-200кОм±10% |
1 |
R2, R6-R13, R14-R21 |
МЛТ-0,25-1кОм±10% |
17 |
R3, R4, R5 |
МЛТ-0,25-68кОм±10% |
3 |
R22-R29 |
МЛТ-0,25-20кОм±10% |
8 |
Транзисторы |
||
VT1-VT8 |
2N1613 |
8 |
;Вектор 255-го прерывания
03fch: 600h
03feh: 0h
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
k1 dw 48828
k2 dw 3662
k3 dw 244
0fff0h: jmp far ptr start ;переход на основную программу
500h:
start:
;инициализация стека
mov ax,100h
mov ds,ax
mov ss,ax
xor ax,ax
mov es,ax ;es=0
mov sp,0fffh ;указатель стека – на вершину ОЗУ
;инициализация таймера
mov al,00110100b ;0-й канал: 2-й режим, 2-хбайтная константа
mov es:[2003h],al
mov bx,5000
mov es:[2000h],bl
mov es:[2000h],bh
mov al,01110100b ;1-й канал: 2-й режим, 2-хбайтная константа
mov bx,333
mov es:[2001h],bl
mov es:[2001h],bh
mov bx,2500
mov al,10110110b ;2-й канал: 3-й режим, 2-хбайтная константа
mov es:[2002h],bl
mov es:[2002h],bh
;инициализация ВВ79
xor al,al ;8-разрядный, 8-символьный дисплей, ввод слева, внешняя дешифрация
mov es:[4001h],al
mov al,00100010b ;коэффициент деления тактовой частоты =2
mov es:[4001h],al
sti ;разрешение аппаратных прерываний
wt:
wait ;ожидание аппаратного прерывания
jmp wt
600h:
;очистка массива buf
mov cx,6
xor si,si
mov al,0
a:
mov ds:[si],al
inc si
loop a
;считывание с датчика 3
mov es:[3007h],al ;запуск преобразования на АЦП
mov cx,2
b:
loop b ;программная задержка на 3.6мкс
mov ax,es:[3003h] ;считывание с АЦП
mov bx,k1
mul bx
mov bx,10000
div bx
cmp ax,1500
ja preobr
;если масса<15кг считываем с датчика 2
mov es:[3006h],al ;запуск преобразования на АЦП
mov cx,2
c:
loop c ;программная задержка на 3.6мкс
mov ax,es:[3002h] ;считывание с АЦП
mov bx,k2
mul bx
mov bx,10000
div bx
cmp ax,100
ja preobr
;если масса<1кг считываем с датчика 1
mov es:[3005h],al ;запуск преобразования на АЦП
mov cx,2
d:
loop d ;программная задержка на 3.6мкс
mov ax,es:[3001h] ;считывание с АЦП
mov bx,k3
mul bx
mov bx,10000
div bx
;преобразование 16-ричного числа в 10-ричное
preobr:
mov es:[3000h],al ;отключение датчиков
mov bx,10
mov si,1
e:
xor dx,dx
div bx
mov ds:[si],dl ;загрузка остатка от деления на 10 по адресу ds:[si]
inc si
cmp ax,0
jne e
;передача символов в ВВ79
mov al,10010000b ;разрешение записи в индикаторное ОЗУ, начиная с 0-го адреса
mov es:[4001h],al
mov cx,6
mov si,5
xor bh,bh
f:
mov bl,ds:[si]
mov al,es:[bx+400h] ;десятичная цифра из di заменяется на индикаторный код
mov es:[4000h],al
dec si
loop f
iret
В момент включения питания программа начинает выполняться, начиная с адреса 0FFF0h. С этого адреса управление передается на основную программу, расположенную начиная с адреса 500h. В начале основной программы инициализируется стек, после чего идет инициализация таймера. В таймере используются все 3 канала. 0-й канал работает во 2-м режиме с константой 5000, т.е. на его выходе появляются импульсы с частотой 1кГц. 1-й канал каскадно соединен с нулевым, он также работает во 2-м режиме с константой 333. На его выходе появляются импульсы с частотой 3 Гц. 2-й канал работает в 3-м режиме с константой 2500, т.е. на его выходе имеем меандр с частотой 1кГц. ВВ79 инициализируется для работы с 8-символьным дисплеем с делением тактовой частоты на 2. После указанных операций инициализации разрешаются аппаратные прерывания и процессор переходит в режим ожидания прерывания.
В момент возникновения прерывания управление автоматически передается на подпрограму обработки прерываний, расположенную начиная с адреса 600h. В ней сначала производится очистка массива, храненящего массу, измеренную на предыдущем этапе. Далее идет считывание информации с самого неточного датчика, который измеряет вес до 200кг. Считывание идет следующим образом. Сначала на ША выставляется адрес 3007h, т.е. дешифратор номера датчика переключается на выбор 3-го датчика, и одновременно, единицей на разряде А3 ША, запускается процесс преобразования на АЦП. Далее в программе идет задержка на 18 тактов или 3,6мкс (организованная двумя холостыми циклами), после чего выполняется непосредственно считывание готовых данных с АЦП. Далее, ввиду отсутствия сопроцессора, выполняется многокомандное умножение на дробное число. Реализуется это умножением измеренной величины на константу, индивидуальную для каждого датчика, и последующим делением полученного числа на 10000. Так, например, для 3-го датчика в результате получаем умножение на 4,8828. Если полученная в результате этих вичислений масса меньше 15кг, производится считывание со второго датчика (более чувствительного) и производятся выше указанные действия. Если измеряемая масса оказывается меньше 1кг, то считывание идет с самого чувствительного (1-го) датчика. После нахождения массы результат необходимо вывести на дисплей. Для этого осуществляется преобразование 16-ричного числа в 10-ричное с разбиением последнего на отдельные цифры. Для этого 16-ричное число циклически делится на 10 и остатки от деления записываются в буфер. После разбиения числа на цифры, каждую цифру необходимо преобразовать в соответствующий ей семисегментный код. Это осуществляется через таблицу констант, записанную в начале листинга. Полученные семисегментные коды записываются в индикаторное ОЗУ. После этого осуществляется выход из подпрограммы обработки прерывания с последующм возвратом к ожиданию следующего прерывания.
1. Ю.М. Казаринов – «Микропроцессорный комплект К1810», “Высшая школа”, Москва, 1990г.
2. С.В. Якубовский и др. – Cправочник: «Цифровые и аналоговые интегральные микросхемы», “Радио и связь”, Москва, 1990г
3. Б.В. Тарабрин, С.В. Якубовский - «Справочник по интегральным микросхемам», Москва, “Энергия”, 1977.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.