Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kharakhnin / ПОСОБИЕ_Харахнин.doc
Скачиваний:
274
Добавлен:
08.03.2016
Размер:
17.89 Mб
Скачать

5.3.3. Применение таблиц для вычисления функций

Большинство процессов, для контроля и управления которыми применяются микропроцессорные системы с аналоговым вводом/выводом информации, требуют использования методов табличного поиска.

Рассмотрим пример. Пусть нам требуется разработать устройство для измерения натяжения полотна. Натяжение материала изменяется в диапазоне 0 – 200kН, на выходе силоизмерительного датчика имеем изменение напряжения от 0 до 10 В. Код на выходе АЦП будет изменяться от 00 до FFH. На дисплей должна выводиться информация в десятичном виде (рис.59).

Рис. 59. Функциональная схема микропроцессорного устройства для измерения натяжения полотна

Для решения поставленной задачи программист должен составить таблицу соответствия кода АЦП и контролируемого технологического параметра. В нашем случае объем таблицы составит 255 байт. Однако можно существенно уменьшить объем таблицы и использовать интерполяцию промежуточных значений функции. Восемь разрядов независимой переменной можно представить как два четырехразрядных поля. Старшие четыре разряда будут использоваться для нахождения одного из табличных значений, младшие разряды – для интерполяции между этим значением и значением, которое отсчитывается четырьмя старшими разрядами следующей тетрады таблицы. Если обозначить старшую тетраду I, а младшую – N, то функция интерполяции имеет вид:

(5.8)

,

где х – измеренное значение;

F(x) - функция;

N – младшая тетрада;

I – старшая тетрада;

F( I ) – значение функции по старшей тетраде;

F( I + 1) – значение функции по старшей тетраде +1.

Составим таблицу соответствия кодов (табл.30). Считаем, что у нас силоизмерительный датчик имеет линейную статическую характеристику.

Таблица 30

DEC

НЕХ

Напряжение, В

Натяжение, kН

Натяжение в HEX

0

00h

0

0

00h

16

10h

0,6

13

0dh

32

20h

1,3

25

19h

48

30h

1,9

38

26h

64

40h

2,5

50

32h

80

50h

3,1

63

3fh

96

60h

3,8

75

4bh

112

70h

4,4

88

58h

128

80h

5,0

100

64h

144

90h

5,6

113

71h

160

A0h

6,3

125

7dh

176

B0h

6,9

138

8ah

192

C0h

7,5

150

96h

208

D0h

8,1

163

A3h

224

E0h

8,8

175

Afh

240

F0h

9,4

188

Bch

256

100h

10

200

C8h

Рассмотрим подпрограмму TABL_ACP определения значений функции в промежутках между табличными значениями. Значение кода АЦП должно находиться в аккумуляторе, преобразованное в BCD формат табличное значение после выполнения подпрограммы будет находиться в ячейках 21Н и 20Н ОЗУ.

Fx EQU 50h ; Значение функции

Fi EQU 51h ; Значение функции по старшей тетраде

N EQU 52h ; Значение младшей тетрады

Fi_1 EQU 53h ; Значение функции по старшей тетраде+1

<1>TABL_ACP: MOV DPTR,#TABLE; Загрузка адреса таблицы

<2> MOV R0,A ; Сохранение кода АЦП

<3> ANL A,#0F0H; Выделение старшей тетрады.

<4> MOV R1,A ; Сохранить старшую тетраду в R1

<5> SWAP A ; Поменять местами тетрады

<6> MOVC A,@A+DPTR; Взять из таблицы в ПЗУ код

<7> MOV Fi,A ; старшей тетрады и поместить в ОЗУ

<8> MOV A,R1 ; Восстановить значение старшей тетрады

<9> SWAP A ; Поменять местами тетрады

<10> INC DPTR ; Указать на следующее значение таблицы

<11> MOVC A,@A+DPTR ; Взять из таблицы в ПЗУ код

<12> MOV Fi_1,A ; старшей тетрады и поместить в ОЗУ

<13> MOV A,R0 ; Восстановить код АЦП в А

<14> ANL A,#0FH ; Выделить младшую тетраду

<15> MOV N,A ; и поместить в ячейку ОЗУ

<16> CALL CALCULATE;Вызвать подпрограмму расчета Fx

<17> CALL BIN_BCD ; Вызвать преобразование кодов

<18> NOP ;

<19> RET ;

;Расчет по формуле F(x)=F(i)+(N/16)∙[F(i+1)-F(i)]

<20>CALCULATE:CLR C ; Сброс бита С

<21> MOV A,Fi_1;

<22> SUBB A,Fi ; F(i+1)-F(i)

<23> MOV B,N ; Поместить младшую тетраду в В

<24> MUL AB ; N∙[F(i+1)-F(i)]

<25> MOV B,#16 ;

<26> DIV AB ; N∙[F(i+1)-F(i)]/16

<27> ADD A,Fi ; F(i)+(N/16)∙[F(i+1)-F(i)]

<28> MOV Fx,A ;

<29> RET ;

;Преобразование бинарного кода в BCD

<30>BIN_BCD: MOV B,#100 ;

<31> DIV AB ; Определение числа сотен

<32> MOV 21H,A ;

<33> MOV A,#10 ;

<34> XCH A,B ;

<35> DIV AB ; Определение числа десятков

<36> SWAP A ;

<37> ADD A,B ; Сложение десятков с единицами

<38> MOV 20H,A ;

<39> RET ;

;Таблица кодов натяжения ткани в HEX форме

<40>TABLE: DB 00h,0dh,19h,26h,32h,3fh,4bh,58h,64h

<41> DB 71h,7dh,8ah,96h,0a3h,0afh,0bch,0c8h

З а д а н и е д л я с а м о с т о я т е л ь н о й р а б о т ы

Разработайте программу для микропроцессорного измерителя температуры. Диапазон изменения t = 0 – 100 0C. На выходе преобразователя температуры сигнал изменяется линейно от 0 до 5 В. АЦП восьмиразрядный.