Главное


Технические и организационные мероприятия, обеспечивающие безопасность работ в действующих ЭУ

Прибор удобен в обращении, так как предоставляет возможности для его управления и отображает необходимую пользователю информацию на семисегментных индикаторах. Пользователь может получить информацию как об уровне жидкости, так и о емкости, вычисленных программно, используя код на выходах АЦП, пропорциональный измеренному уровню. Погрешность измерения - менее 1%. Кроме того, возможно отображение времени работы системы.

Система состоит из шести датчиков, каждый из которых имеет возможность измерения в высоту до 2 м. Наличие интерфейса RS-232C позволяет осуществлять передачу данных о текущем состоянии системы на внешнюю ПЭВМ.

Данное устройство обеспечивает надежный контроль за уровнем жидкости в резервуарах, а также соответствует заданным параметрам.

Приложения

Приложение 1

Текст программы для микроконтроллера

; Основная программа

ORG 000H

; начальный адрес

JMP BEGIN

ORG 100H

BEGIN:

ACALL INIT

; п/п инициализации ККД

START:

CLR P1.0

; запуск АЦП

WAIT:

JNB P1.1, WAIT

; переход, если данные не готовы

CLR P1.2

; сброс Р1.2

MOV A, P0

; данные из АЦП в аккумуляторе

MOV 30H, A

; данные из АЦП в ячейке 30Н ОЗУ

SETB P1.0

; гашение АЦП

SETB P1.2

; регистр в Z-состояние

ACALL LEVEL

; вызов п/п вычисления уровня

ACALL CAPACITY

; вызов п/п вычисления емкости

ACALL TIME

; вызов п/п вычисления времени

SETB P3.0

; установить сигнал DTR

NOP

NOP

CLR P3.0

; снять сигнал DTR

SETB EA

; разрешение прерывания

SETB ЕХ1

SETB ЕХ0

ACALL DELAY1

; п/п задержки на 1 минуту

JMP START

; цикл

; Подпрограмма перекодировки из двоично-десятичного в семисегментный код

ORG 40H

TABLECOD:

DB 3FH

; "0”

DB 06H

; "1”

DB 5BH

; "2”

DB 4FH

; "3”

DB 66H

; "4”

DB 6DH

; "5”

DB 7DH

; "6”

DB 87H

; "7”

DB 7FH

; "8”

DB 6FH

; "9”

; Подпрограмма инициализации контроллера клавиатуры и дисплея

INIT:

MOV A, #C0H

; очистка дисплея

Продолжение приложения 2

MOV P0, A

SETB P1.4

; выбор ККД

SETB P1.3

; РУС ККД

MOV A, #00H

; установка режима

MOV P0, A

SETB P1.3

; РУС ККД

MOV A, #22H

; управление частотой сканирования

MOV P0, A

SETB P1.3

; РУС ККД

CLR P1.4

; ККД не выбран

RET

; Подпрограмма преобразования данных с АЦП в значение уровня жидкости. ; Входной параметр: ячейка 30Н - последние данные с АЦП ; Выходные параметры: ячейки 50Н, 51Н, 52Н, 53Н, 54Н - соответственно сотни, ; десятки, единицы, десятые, сотые значения уровня

LEVEL:

MOV A, 30H

; в (А) данные АЦП в двоичном коде

MOV B, #78

; (В) ←78 множитель

MUL AB

; (В) (А) ← (А) (В)

MOV R7, A

; (R7) ← (А) Мл.Б. произведения

XCH A, B

; (А) ↔ (В)

MOV R6, A

; (R6) ← (А) Ст.Б. произведения

ACALL PREOBR2-210

; вызов п/п преобразования

MOV 50H, R3

; по адресу 50Н количество сотен

MOV A, R4

; (А) ← (R4)

SWAP A

; обмен тетрад в аккумуляторе

ANL A, 00001111B

; (А) ← (А) &0FH

MOV 51H, A

; по адресу 51Н количество десятков

MOV A, R4

; (А) ← (R4)

ANL A, 00001111B

; (А) ← (А) &0FH

MOV 52H, A

; по адресу 52Н количество единиц

MOV A, R5

; (А) ← (R5)

SWAP A

; обмен тетрад в аккумуляторе

ANL A, 00001111B

; (А) ← (А) &0FH

MOV 53H, A

; по адресу 53Н количество десятых

MOV A, R5

; (А) ← (R5)

ANL A, 00001111B

; (А) ← (А) &0FH

MOV 54H, A

; по адресу 54Н количество сотых

RET

; Подпрограмма преобразования данных с АЦП в значение емкости. ; Входной параметр: ячейка 30Н - последние данные с АЦП.

; Выходные параметры: ячейки 55Н, 56Н, 57Н, 58Н, 59Н - соответственно десятки,

; единицы, десятые, сотые, тысячные значения емкости

CAPACITY:

MOV A, 30H

; в (А) данные АЦП в двоичном коде

MOV B, #59

; (В) ←59 множитель

MUL AB

; (В) (А) ← (А) (В)

MOV R7, A

; (R7) ← (А) Мл.Б. произведения

XCH A, B

; (А) ↔ (В)

MOV R6, A

; (R6) ← (А) Ст.Б. произведения

ACALL PREOBR2-210

; вызов п/п преобразования

MOV 55H, R3

; по адресу 55Н количество десятков

MOV A, R4

; (А) ← (R4)

SWAP A

; обмен тетрад в аккумуляторе

ANL A, 00001111B

; (А) ← (А) &0FH

MOV 56H, A

; по адресу 56Н количество единиц

MOV A, R4

; (А) ← (R4)

ANL A, 00001111B

; (А) ← (А) &0FH

MOV 57H, A

; по адресу 57Н количество десятых

MOV A, R5

; (А) ← (R5)

SWAP A

; обмен тетрад в аккумуляторе

ANL A, 00001111B

; (А) ← (А) &0FH

MOV 58H, A

; по адресу 58Н количество сотых

MOV A, R5

; (А) ← (R5)

ANL A, 00001111B

; (А) ← (А) &0FH

MOV 59H, A

; по адресу 59Н количество тысячных

RET

; Подпрограмма вычисления значения времени ; Выходные параметры: ячейка 5АН - десятки часов, ячейка 5ВН - единицы часов

TIME:

SETB P1.6

; установка Р1.6

MOV A, P0

; данные о времени в (А)

CLR P1.6

; сброс Р1.6

ADD A, #00H

; (А) ← (А) +00Н

DA A

; десятичная коррекция

MOV R0, A

; (R0) ← (А)

ANL A, #00001111B

; (А) ← (А) &0FH

MOV 5BH, A

; по адресу 5ВН единицы часов

MOV A, R0

; (А) ← (R0)

SWAP A

; обмен тетрад аккумулятора

ANL A, #00001111B

; (А) ← (А) &0FH

MOV 5AH, A

; по адресу 5АН десятки часов

RET

; Подпрограмма преобразования двоичного целого беззнакового числа формата 16

; в двоично-десятичное число формата 5х4

; Входные параметры: R6 - Ст.Б., R7 - Мл.Б.

; Выходные параметры: R3 - Ст.Б., R4 - Ср.Б., R5 - Мл.Б.

; обнуление текущей суммы

PREOBR2-210:

CLR A

MOV R4, A

MOV R5, A

MOV A, R6

MOV R1, A

MOV A, R7

MOV R2, A

MOV R0, #16H

; счетчик циклов

CLR A

; сдвиг двоичного числа влево

CYCLE:

XCH A, R4

XCH R1, A

XCH R4, A

XCH A, R5

XCH R2, A

XCH R5, A

MOV A, R5

ADD A, R5

MOV R5, A

MOV A, R4

ADDC A, R4

XCH A, R4

XCH R1, A

XCH R4, A

XCH A, R5

XCH R2, A

XCH R5, A

; двоично-десятичное удвоение суммы с учетом переноса

MOV A, R5

ADDC A, R5

DA A

MOV R5, A

MOV A, R4

ADDC A, R4

DA A

MOV R4, A

MOV A, R7

ADDC A, R7

DA A

MOV R7, A

; проверка конца цикла

DJNZ R0, CYCLE

MOV A, R7

MOV R3, A

RET

; Подпрограмма перекодировки из двоичного в семисегментный код

CROSSCOD:

ADD A, #40H

; (А) ← (А) +40Н

MOV R1, A

MOV A, @R1

MOV R1, A

RET

; Подпрограмма задержки на 1 минуту

DELAY1:

MOV R7, #00H

; обнулить счетчик переполнения

MOV R6, #00H

; обнулить счетчик переполнения

SETB EA

; общее разрешение прерывания

SETB ET0

; разрешение прерывания от Т/С0

MOV TMOD, #01H

; режим 1 Т/С0

MOV TL0, #0B0H

MOV TH0, #3CH

; загрузка числа

SETB TR0

; запуск Т/С0

LOOP:

CJNE R6, #60, LOOP

; переход при (R6) ≠60

RETI

ORG 000BH

; вектор прерывания

CLR TR0

; остановить Т/С0

CLR TF0

; сбросить TF0

INC R7

; инкремент

JMP MET

ORG 0030Н

MET:

CJNE R7, #20, AGAIN

; переход при (R7) ≠20

MOV R7, #00H

; обнуление

INC R6

; инкремент

RETI

AGAIN:

MOV TL0, #0B0H

MOV TH0, #3CH

; загрузка числа

MOV TR0

; запуск Т/С0

Продолжение приложения 2

RETI

; Подпрограмма обработки прерывания по входу INT0

ORG 0003H

; вектор прерывания

INT:

CLR ES

; запрет прерываний от УАПП

MOV SCON, #42H

; режим УАПП

CLR TR1

; останов Т/С1

MOV R0, #50H

; адрес пересылаемых данных

ACALL USTAN

; вызов п/п

RET

USTAN:

MOV TMOD, #20H

; режим 2 Т/С1

MOV TH1, #0FAH

; загрузка числа

SETB TR1

; запуск Т/С1

PROV:

MOV A, @R0

SPOUT:

JNB TI, SPOUT

; ожидание готовности передатчика

CLR TI

; сброс TI

INC R0

; инкремент

MOV SBUF, A

; пересылка символа

CJNE R0, #5CH, PROV

; все переслали?

RET

; Подпрограмма обработки прерывания по входу INT1

ORG 0013H

; вектор прерывания

MOV A, 40H

; команда чтения FIFO

MOV P0, A

SETB P1.4

; выбор ККД

CLR P1.3

; регистр DAN ККД

MOV A, P0

; в (А) код нажатой клавиши

RRC A

; сдвиг

JB C, UR

; переход, если перенос

RRC

; сдвиг

JB C, EMK

; переход, если перенос

RRC

; сдвиг

JB C, WR

; переход, если перенос

UR:

ACALL UROVEN

; вызов п/п

RET

EMK:

ACALL EMKOST

; вызов п/п

RET

WR:

ACALL VREMY

; вызов п/п

RET

Продолжение приложения 2

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

UROVEN:

MOV R0, #50H

; (R0) ←50Н

CJNE R0, #52H, PRY

MOV A, @R0

ACALL CROSSCOD

; вызов п/п перекодировки

MOV A, R1

ADD A, #10000000B

MOV R1, A

JMP DAL

PRY:

MOV A, @R0

ACALL CROSSCOD

DAL:

MOV A, #80H

; команда запись в ОЗУ дисплея

MOV P0, A

SETB P1.3

; РУС ККД

MOV A, R1

MOV P0, A

CLR P1.3

; вывод на дисплей

INC R0

; инкремент

CJNE R0, #55H, PRY

; все выведено?

RET

; Подпрограмма вывода на дисплей значения емкости

EMKOST:

MOV R0, #55H

; (R0) ←55Н

CJNE R0, #56H, PRY1

MOV A, @R0

ACALL CROSSCOD

; вызов п/п перекодировки

MOV A, R1

ADD A, #10000000B

MOV R1, A

JMP DAL1

PRY1:

MOV A, @R0

ACALL CROSSCOD

DAL1:

MOV A, #80H

; команда запись в ОЗУ дисплея

MOV P0, A

SETB P1.3

; РУС ККД

MOV A, R1

MOV P0, A

CLR P1.3

; вывод на дисплей

INC R0

; инкремент

CJNE R0, #5AH, PRY1

; все выведено?

RET

Продолжение приложения 2

; Подпрограмма вывода на дисплей значения времени

VREMY:

MOV R0, #5AH

; (R0) ←5АН

PRY2:

MOV A, @R0

ACALL CROSSCOD

; вызов п/п перекодировки

MOV A, #80H

; команда запись в ОЗУ дисплея

MOV P0, A

SETB P1.3

; РУС ККД

MOV A, R1

MOV P0, A

CLR P1.3

; вывод на дисплей

INC R0

; инкремент

CJNE R0, #5CH, PRY2

; все выведено?

RET

Перейти на страницу: 1 2 3 4 5

Другие статьи по теме

Аппаратная реализация модулярного сумматора и умножителя на базе ПЛИС
В настоящее время невозможно представить себе сложную автоматическую систему без того, чтобы ее центральную часть не составляли вычислительные машины, выполняющие функц ...

Исследование параметров и аномалий длинной оптической линии
В настоящее время системы связи стали одной из основ развития общества. Спрос на услуги связи, от обычной телефонной связи до широкополосного доступа в Интернет, постоянно растет. Это п ...

Моделирование в системе MICRO-CAP измерительных преобразователей на основе датчиков температуры
В наше время измерению температуры придается большое значение в различных отраслях промышленного производства. Температура является наиболее массовым и, зачастую, решающим параметром, ха ...

www.techspirit.ru © 2019