Разработка электронных весов с автоматическим выбором диапазона измерения, страница 2

Обозначение

Наименование (тип)

Количество

Датчики

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


6. Программа

;Вектор 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


7. Алгоритм работы программы

В момент включения питания программа начинает выполняться, начиная с адреса 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 и остатки от деления записываются в буфер. После разбиения числа на цифры, каждую цифру необходимо преобразовать в соответствующий ей семисегментный код. Это осуществляется через таблицу констант, записанную в начале листинга. Полученные семисегментные коды записываются в индикаторное ОЗУ. После этого осуществляется выход из подпрограммы обработки прерывания с последующм возвратом к ожиданию следующего прерывания.


8. Список литературы

1. Ю.М. Казаринов – «Микропроцессорный комплект К1810», “Высшая школа”, Москва, 1990г.

2. С.В. Якубовский и др. – Cправочник: «Цифровые и аналоговые интегральные микросхемы», “Радио и связь”, Москва, 1990г

3. Б.В. Тарабрин, С.В. Якубовский - «Справочник по интегральным микросхемам», Москва, “Энергия”, 1977.