Выбор структурной схемы прибора
MOV TEMP,#66H; то присваиваем ему четвёрку в семисегментном коде. MOV TEMP,#6FH; то присваиваем ему девятку в семисегментном коде. MOV TEMP,#6DH; то присваиваем ему пятёрку в семисегментном коде. MOV TEMP,#07H; то присваиваем ему семёрку в семисегментном коде. MOV TEMP,#06H; то присваиваем ему единицу в семисегментном коде. LCALL HEX2HIBCD; Преобразуем двоичное число в двоично-десятичное. MOV… Читать ещё >
Выбор структурной схемы прибора (реферат, курсовая, диплом, контрольная)
На трубопроводе монтируются излучатель ультразвука 1, который излучает полученный от генератора ультразвук по направлению к приемнику под углом к потоку жидкости, и приемник 2. Колебания, принимаемые приемником, усиливаются усилителем и подаются на блок обработки результатов измерения, который измеряет разность фаз колебаний, поступающих с приемника, пропорциональную расходу жидкости. Выходное напряжение фазометра подается на индикатор. Основным недостатком фазового расходомера является зависимость его показаний от скорости распространения ультразвука в жидкости.
Выбор элементов принципиальной схемы
- · микросхема питания REF192GP
- · С1 = С2 = 30 Ф
- · С3 = 0.1 Ф
- · R8 = 10 kОм
- · R1 = R2…= R7 = 510 Ом
- · одноразрядные цифробуквенные индикаторы KingBriht (B*56) -3 шт
- · микроконтроллер ADuC812 со встроенным АЦП
- · резисторы светодиодов — 7 шт
- · датчик — 1 шт
Текст программы
Программа измерения разности фаз двух сигналов.
ANODY EQU P 1; Аноды индикаторов.
CATSOT EQU P 2.7; Катод «сотен» .
CATDES EQU P 2.6; Катод «десятков» .
CATED EQU P 2.5; Катод «единиц» .
IN1 EQU P 1.3; Вход первого сигнала.
IN2 EQU P 1.4; Вход второго сигнала.
HEX EQU R 7; Регистр содержит разницу между первым и вторым каналом в ;шестнадцатеричном виде.
SOT EQU R6; Сотни HEX-числа.
DES EQU R5; Десятки HEX-числа.
ED EQU R4; Единицы HEX-числа.
TEMP EQU R3; Регистр для хранения временных данных Программа.
ORG 0.
LJMP NACHALO;
NACHALO: Начало главного цикла программы.
MOV HEX,#0;Обнуляем значение сдвига фаз между сигналами Ожидание импульса с первого канала.
IMP1: Ждём импульса первого канала.
JNB IN1, INP1; Если не пришёл, то ждём дальше Ожидание импульса со второго канала.
IMP2:
JB IN2, INDIC; Если пришёл импульс 2-го канала, отображаем ;значение.
INC HEX; Увеличиваем значение сдвига фаз на единицу.
JMP IMP2 Если не пришёл, то ждём дальше Подготовим данные к индикации.
INDIC:
LCALL HEX2HIBCD; Преобразуем двоичное число в двоично-десятичное.
MOV TEMP, SOT; Преобразуем двоично-десятичное значение TEMP.
LCALL SEGM7; в код семисегментного индикатора.
MOV SOT, TEMP; возвращаем значение регистр сотен.
MOV TEMP, DES; Преобразуем двоично-десятичное значение TEMP.
LCALL SEGM7; в код семисегментного индикатора.
MOV SOT, DES; возвращаем значение регистр десяток.
MOV TEMP, ED; Преобразуем двоично-десятичное значение TEMP.
LCALL SEGM7; в код семисегментного индикатора.
MOV SOT, ED; возвращаем значение регистр единиц Выводим значение на индикатор
SETB CATSOT; Отключаем общий катод сотен.
SETB CATDES; Отключаем общий катод десятков.
SETB CATED; Отключаем общий катод единиц Отправляем сотни на светодиодный индикатор
MOV ANODY, SOT; Выводим значение сотен на индикатор
CLR CATSOT; Включаем катоды сотен.
NOP.
NOP.
NOP.
SETB CATSOT; Отключаем катоды сотен Отправляем десятки на светодиодный индикатор
MOV ANODY, DES; Выводим значение десятков на индикатор
CLR CATDES; Включаем катоды десятков.
NOP.
NOP.
NOP.
SETB CATDES; Отключаем катоды десятков Отправляем единицы на светодиодный индикатор
MOV ANODY, ED; Выводим значение сотен на индикатор
CLR CATED; Включаем катоды единиц.
NOP.
NOP.
NOP.
SETB CATED; Отключаем катоды единиц Зацикливание программы.
LJMP NACHALO; Начинаем все процедуры заново Подпрограммы.
HEX2HIBCD.
Подпрограмма преобразует шестнадцатеричное число в двоично-десятичное.
HEX2HIBCD:
MOV SOT,#0; Обнуляем сотни.
MOV DES,#0; Обнуляем десятки.
MOV ED,#0; Обнуляем единицы.
SOTNI:
SUBB HEX,#100; Вычитаем из HEX-числа сотню.
JC DESYATKI; Если теперь HEX-;число меньше нуля, то ;переходим к десякам.
INC SOT; Увеличиваем значение сотен на единицу.
JMP SOTNI; Повторяем цикл.
DESYATKI:
ADD HEX,#100; Прибавляем к HEX-числу сотню.
DESYAT1:
SUBB HEX,#10; Вычитаем из HEX-числа десяток.
JC EDINICY; Если теперь HEX-;число меньше нуля, то ;переходим к единицам.
INC DES; Увеличиваем значение десятков на единицу.
JMP DESYT1; Повторяем цикл.
EDINICY:
ADD HEX,#10.
EDIN1:
SUBB HEX,#1; Вычитаем из HEX-числа единицу.
JC VYPOLNENO; Если теперь HEX-число меньше нуля, значит ;всё преобразовали.
INC ED; Увеличиваем значение единиц на единицу.
JMP EDIN1; Повторяем цикл.
VYPOLNENO:
RET; Возвращаемся из ;подпрограммы ;преобразований.
SEGM7.
Подпрограмма преобразует двоично-десятичное число в код для вывода на семисегментный индикатор
SEGM7:
MOV A,#0; Загружаем в аккумулятор проверяемое значение.
SUBB A, TEMP; Если разность между аккумулятором и ;регистром TEMP равна нулю,.
JZ SEGM70; то переходим на соответствующую метку.
MOV A,#1.
SUBB A, TEMP.
JZ SEGM71.
MOV A,#2.
SUBB A, TEMP.
JZ SEGM72.
MOV A,#3.
SUBB A, TEMP.
JZ SEGM73.
MOV A,#4.
SUBB A, TEMP.
JZ SEGM74.
MOV A,#5.
SUBB A, TEMP.
JZ SEGM75.
MOV A,#6.
SUBB A, TEMP.
JZ SEGM76.
MOV A,#7.
SUBB A, TEMP.
JZ SEGM77.
MOV A,#8.
SUBB A, TEMP.
JZ SEGM78.
MOV A,#9.
SUBB A, TEMP.
JZ SEGM79.
SEGM70:; Если значение TEMP равняется нулю,.
MOV TEMP,#3FH; то присваиваем ему нуль в семисегментном коде.
RET; и возвращаемся из подпрограммы.
SEGM71:; Если значение TEMP равняется единице,.
MOV TEMP,#06H; то присваиваем ему единицу в семисегментном коде.
RET; и возвращаемся из подпрограммы.
SEGM72:; Если значение TEMP равняется двум,.
MOV TEMP,#5BH; то присваиваем ему двойку в семисегментном ;коде.
RET; и возвращаемся из подпрограммы.
SEGM73:; Если значение TEMP равняется трём,.
MOV TEMP,#4FH; то присваиваем ему тройку в семисегментном коде.
RET; и возвращаемся из подпрограммы.
SEGM74; Если значение TEMP равняется четырём,.
MOV TEMP,#66H; то присваиваем ему четвёрку в семисегментном коде.
RET; и возвращаемся из подпрограммы.
SEGM75:; Если значение TEMP равняется пяти,.
MOV TEMP,#6DH; то присваиваем ему пятёрку в семисегментном коде.
RET; и возвращаемся из подпрограммы.
SEGM76:; Если значение TEMP равняется шести,.
MOV TEMP,#7DH; то присваиваем ему шестёрку в семисегментном коде.
RET; и возвращаемся из подпрограммы.
SEGM77:; Если значение TEMP равняется семи,.
MOV TEMP,#07H; то присваиваем ему семёрку в семисегментном коде.
RET; и возвращаемся из подпрограммы.
SEGM78:; Если значение TEMP равняется восьми,.
MOV TEMP,#7FH; то присваиваем ему восьмёрку в ;семисегментном коде.
RET; и возвращаемся из подпрограммы.
SEGM79:; Если значение TEMP равняется девяти,.
MOV TEMP,#6FH; то присваиваем ему девятку в семисегментном коде.
RET; и возвращаемся из подпрограммы.
END.