- •Эрни Каспер Программирование на языке Ассемблера для микроконтроллеров семейства i8051
- •1.Что нужно знать программисту о микроконтроллерах семейства i8051
- •1.1.Общие сведения об архитектуре i8051
- •1.2.Правила записи команд микроконтроллера семейства i8051 на Ассемблере
- •1.3.Форматы и способы адресации данных
- •1.4.Форматы и способы адресации команд
- •1.5.Команды пересылки информации
- •1.6.Команды поразрядной обработки информации
- •1.7.Команды арифметических операций
- •1.8.Управляющие команды
- •2.Директивы ассемблера для микроконтроллеров семейства i8051
- •2.1.Общие понятия о процессах трансляции и компоновки
- •2.2.Обработка имен транслятором и компоновщиком
- •2.3.Директивы резервирования памяти и инициализации данных
- •2.4.Использование выражений в операндах
- •2.5.Директивы условной трансляции
- •2.6.Директивы подстановок
- •2.7.Директивы управления вводом и выводом
- •Глава 3.
- •3.Кросс-средства фирмы 2500 a.D. Software, Inc. Для семейства i8051
- •Глава 4
- •4.Программирование арифметических действий
- •4.1.Кодирование информации в микроконтроллере
- •4.2.Арифметические действия с большими числами
- •4.3.Арифметические действия с отрицательными числами
- •4.4.Контроль точности при программировании арифметических операций
- •Глава 5
- •5.Программирование вычисления функций
- •5.1.Возведение в квадрат и извлечение квадратного корня
- •5.2.Переход от десятичной системы счисления к двоичной и обратно
- •5.3.Вычисление функций при помощи таблиц
- •5.4.Вычисление обратной функции по таблице прямой функции
- •5.5.Компенсация систематических погрешностей при помощи таблиц
- •Глава 6
- •6.Программирование фильтрации сигналов
- •6.1.Особенности цифровой фильтрации сигналов
- •6.2.Программирование простейших фильтров нижних частот
- •6.3.Программирование фильтра для оценки параметров сигнала
- •6.4.Программирование медианного фильтра
- •Глава 7
- •7.Программирование взаимодействия с внешними устройствами
- •7.1.Общие вопросы взаимодействия
- •7.2.Порядок выполнения прерываний в микроконтроллерах семейства i8051.
- •7.3.Синхронизация работы программы внешним или внутренним сигналом
- •7.4.Программирование приема информации от датчиков
- •7.5.Программирование выдачи команд на исполнительные устройства
- •7.6.Программирование ввода и вывода информации для пользователя
- •8.Несколько рекомендаций о стиле программирования
- •8.1.Стиль программирования и использование ресурсов
- •8.2.Оформление исходного текста программы
- •8.3.Системы обозначений, выражения и простые подстановки
- •8.4.Применение подпрограмм и сложных текстовых подстановок
5.5.Компенсация систематических погрешностей при помощи таблиц
Характеристики используемых в изделии измерительных и исполнительных устройств, как правило, описываются достаточно простыми математическими соотношениями. Однако в действительности эти характеристики могут отличаться от принятой идеализации. Для существенного повышения точности внешних устройств приходится усложнять технологию их изготовления и отладки и увеличивать производственные затраты. Поэтому целесообразнее решать эту задачу путем калибровки параметров и компенсации погрешностей при обработке информации в микроконтроллере. Не следует забывать, что калибровка и компенсация имеют смысл только в том случае, когда характеристики устройств достаточно стабильны при всех условиях эксплуатации изделия, не изменяются с течением времени. Калибровке и компенсации подлежат только систематические составляющие погрешностей.
Под калибровкой обычно подразумевается компенсация систематических погрешностей, описываемая линейной зависимостью от аргумента. В этом случае говорят о компенсации двух параметров: смещения нуля и крутизны характеристики. В случае нелинейной зависимости приходится учитывать большее количество параметров и производить более сложные вычисления. Если аналитическое выражение для систематической погрешности не удается найти, то эту функцию можно хранить в виде таблицы. Но даже при существовании аналитического выражения табличный метод учета может оказаться более выгодным, так как он позволяет избавиться от решения задачи оценки параметров и от сложных вычислений. При использовании табличного метода вычисления поправок в ПЗУ можно заносить экспериментально полученные таблицы даже в том случае, когда это приходится делать для каждого изделия индивидуально. При необходимости можно записывать калибровочные параметры и таблицы для компенсации в энергонезависимое ЗУ.
Приведем пример программы, позволяющей компенсировать нелинейность характеристики датчика. В данном случае функция Y является экспериментально измеренной систематической погрешностью датчика, то есть разностью между фактическим значением измеряемой величины и показаниями датчика. Предполагается, что показание датчика хранится в двух ячейках памяти — argh, argl (старший и младший байты соответственно), а минимальное значение показания, соответствующее нулевой измеренной величине, и максимальный номер интервала записаны в виде чисел argmih, argmil и п в операндах соответствующих команд (непосредственная адресация). Шаг таблицы выбран таким образом, что старший байт определяет номер интервала, а младший — смещение относительно табличного значения аргумента. Ввиду малости поправок они хранятся в байтовом формате.
CLR С
MOV A, argl
SUBB A, #argmil
MOV R0, A ; положение в интервале
MOV A, argh
SUBB A, #argmih
JNC apl
арЗ: LJMP err ; переход по аргументу меньше минимума
apl: MOV Rl, A ; номер интервала
CJNE А, #n, ар6
JC арЗ ; переход по аргументу больше максимума
После определения номера интервала в таблице и положения в интервале нужно сделать две выборки поправок из таблицы. Поскольку поправка может иметь любой знак, этот байт используется для представления чисел от -127 до +127. Для сложения с двухбайтовым числом в случае положительной поправки в старший байт производится запись нулей, в случае отрицательной — единиц,
ap6: MOV DPTR, #соrr ; адрес таблицы в регистр указателя
MOVC A, @A+DPTR ; поправка для левой границы интервала
MOV R2, А ; поправка на левой границе интервала
MOV R3, #0
JNB А.7, ар2
MOV R3, #FFH ; отрицательный знак поправки в ст. байт
ар2: MOV A, Rl
INC A
MOVC A, @A+DPTR ; поправка на правой границе интервала
CLR С
SUBB A, R2 ; приращение поправки на интервале
В данном случае предполагается достаточно медленное изменение поправки. Модуль разности поправок на границах интервала не должен превышать 127. Так как поправка может быть отрицательной, то для интерполяции вычисляются ее модуль и знак. Полученное произведение представляется в первоначальном коде и складывается с поправкой на левом интервале.
MOV С, А.7
MOV FO, С ; знак приращения
JNC ар4 ; переход по положительной разности
CPL А
INC А ; модуль для интерполяции
ар4: MOV В, R0
MUL АВ ; учет положения точки в интервале
ADD A, #80h ; для округления ст. байта
CLR A
ХСН А, В
ADDC А, #0 ; используется старший байт
JNB F0, ар4 ; переход по положительной поправке
MOV В, #FFh ; изменение знака
CPL A
ADD A, #1
JNC ар5
INC В
ар5: ADD A, R2
MOV R2, А
MOV A, R3
ADDC А, В
MOV R3, А ; вычислена поправка
Вычисленная поправка добавляется к показаниям датчика и записывается в регистры Rl, R0:
MOV A, R0
ADD A, R2
MOV R0, A
MOV A, R1
ADDC A, R3
MOV R1, А ; получено точное измерение
Для хранения поправок нужно включить в секцию данных массив с директивой инициализации данных:
.DATA corr: .DB ; поправки
В исходный текст можно записывать поправки в десятичном виде со знаком или в двоичном формате.
Если существует более или менее точная математическая модель систематических погрешностей и в процессе настройки изделия удается поучить достоверные оценки параметров, определяющих погрешности, то может оказаться необходимым расчет поправок по формулам этой модели. Когда изделие измеряет векторную величину и существует взаимовлияние погрешностей каналов, то математическая модель будет двумерной. В этом случае расчет по таблицам нецелесообразен, так как их использование для вычисления функций нескольких аргументов требует очень большого объема ПЗУ.