Микропроцессорный блок контроля, индикации и сигнализации параметров перемещения грузонесущих тросов



 

Постановка задачи

 Разработать МП-блок контроля, индикации и сигнализации параметров перемещения грузонесущих тросов: величины и скорости перемещения, натяжения и коррекции измеренной длины по магнитным меткам (ММ).

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

Рассмотрим решение данной задачи на примере аппаратуры контроля наземных параметров каротажа «КОНПАК»

Комплекс по контролю параметров каротажа «КОНПАК» (в дальнейшем - комплекс) предназначен для измерения глубины спуска скважинного прибора, натяжения каротажного кабеля и скорости его движения. Кроме того, комплекс обеспечивает на выходном разъёме сигналы: магнитной метки (ММ), шага квантования по глубине вниз (+ШК) и вверх (-ШК) и усилителя датчика натяжения кабеля (УДН) для использования другими регистрирующими системами каротажной лаборатории. Область применения комплекса - каротажные подъёмники, оборудованные кабелеукладчиком.

 

Исходные данные

1. Диапазон контроля величины перемещения, м – 0-10000

2. Диапазон контроля натяжения, кгc                   – 0-10000

3. Диапазон контроля скорости перемещения, м/ч – 0-10000

4. Интервал ожидания ММ, м.                                – 9,5-10,5

5. Интервал коррекции перемещения по ММ, м.  – +/-0,5

Должны быть предусмотрены:

1.Установка граничных значений контролируемых параметров;

2.Световая и звуковая сигнализация прихода магнитной метки, выхода контролируемых параметров за установленные границы;

3.Компенсация внешних магнитных полей в месте установки датчика магнитных меток глубины;

4.Ручной ввод любого значения глубины и текущего значения количества квантов глубины (обычно 1см), приходящихся на интервал между соседними магнитными метками (обычно 10м).

Комплекс, рис.1 и рис.2, состоит из следующих частей:

-первичного преобразователя ПП со смонтированными на нём формирователем тактов глубины (ФТГ), датчиком магнитных меток (ДММ), датчиком натяжения (ДН), узлом связи с водильником лебёдки (УСВ) в двух вариантах крепления: на кабелеукладчике (рис.1) и на выносной штанге (Рис.2);

-индикатора параметров каротажа (ИПК1);

-соединительных кабелей, обеспечивающих связь индикатора с первичным

преобразователем, регистрирующими системами каротажных лабораторий и бортовым источником питания.

Комплекс позволяет проводить работу по стандартной технологии с предварительно размеченным кабелем. При этом ИПК1 индицирует глубину, скорость и натяжение геофизического кабеля. Одновременно производится коррекция глубины по магнитным меткам с индикацией интервала коррекции, прихода магнитной метки и результата коррекции (состоялась коррекция или нет).

Для управления регистрирующими системами каротажных лабораторий комплекс формирует на выходном разъёме:

- через каждый 1 см. спуска кабеля сигнал +ШК;

- через каждый 1 см. подъёма кабеля сигнал - ШК;

- через каждые 10 м. спуска или подъёма кабеля сигнал ММ;

 - непрерывно сигнал с выхода усилителя датчика натяжения УДН.

- Предел регистрации глубин, м.                                               9999,9 

- Цена одного шага квантования, см.                                         1

- Предел измерения скорости перемещения кабеля, м/ч          9999

- Предел измерения натяжения кабеля, кг.                                 10000

- Потребляемая мощность, Вт                                                     15    

- Основная абсолютная погрешность измерения 1 км 

длины кабеля (100 магнитных меток), см                                               ±20

- Основная относительная погрешность измерения скорости перемещения геофизического кабеля, %, не более                                                        ±5

 

Комплекс “КОНПАК” размещается в любом каротажном подъёмнике.

Узел связи с водильником УСВ крепится на основании водильника, а к узлу связи крепится первичный преобразователь ПП (рис.1). При наличии в подъемнике кулачкового соединения с узлом связи – схема крепления должна соответствовать рис.2.

Для заправки каротажного кабеля необходимо:

- отвернуть гайку крепления оси среднего ролика, вынуть ее и опустить ролик вместе с тягой от водильника вниз;

- отвернуть гайку планок поддержки кабеля у ДММ, вынуть ось и втулку поддержки;

- заправить каротажный кабель между двумя направляющими роликами и планками поддержки кабеля у ДММ;

- поставить втулку поддержки между планками так, чтобы кабель опирался на нее, вставить ось и закрепить её гайкой;

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

ИПК1 комплекса устанавливается на пульте управления подъёмника либо вместо штатной панели контроля глубины и натяжения, либо в удобном для машиниста месте.

Соединение ИПК1 с первичным преобразователем осуществляется жгутом из 3-х кабелей: от ФТГ, ДММ и ДН. Схема соединений приведена на Рис.1 и рис.2.




Устройство комплекса «КОНПАК»

 

Комплекс «КОНПАК» состоит из 3-х частей: первичного преобразователя ПП (датчики ДПК2), вторичного прибора ИПК1, узла связи с лебедкой подъемника в двух вариантах – либо с использованием водильника, либо с использованием кулачкового соединения, и комплекта кабелей подключения. 

ДПК2 представляет из себя несущую силоизмерительную балку, на которой размещены:

- три ролика, два крайних - направляющие и средний – силозадающий;

- датчик глубины (ФТГ) с разъемом подключения;

- датчик магнитных меток (ДММ) с разъемом подключения;

- датчик натяжения (ДН) в виде наклеенных с обеих сторон балки тензорезисторов;

- разъем подключения датчика натяжения;

- узел создания дополнительной механической деформации балки;

- узел связи с водильником.

 Для установки необходимого перегиба кабеля между средним и направляющими роликами следует:

- ослабить крепление щек среднего ролика к балке, отвернув два болта;

- создать натяжение кабеля порядка 5 – 15 кН. (0.5 – 1.5Т.);

- вращая регулировочный болт узла создания дополнительной деформации балки по часовой стрелке, добиться начала изменения показаний по индикатору натяжения;

- начиная от найденного выше положения регулировочного болта, завернуть его еще на один оборот – это положение соответствует заводской установке шкалы натяжения (индикатор покажет при этом величину установленного выше натяжения в единицах шкалы).

- затянуть болты крепления щек среднего ролика.

    ДПК2 устанавливается на водильнике лебедки с помощью двух тяг, для крепления которых необходимо отвернуть по два болта сверху и снизу направляющих валиков и с их помощью закрепить на водильнике тяги ДПК2.

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

 

      На передней панели ИПК1 (Рис.3) расположены:

- переключатель «Б.сеть», для включения и выключения ИПК1;

- индикатор скорости, для индикации скорости движения кабеля в м/с «Скорость»;

- индикатор глубины, для индикации глубины нахождения скважинного прибора в м.- «Глубина»;



- индикатор натяжения, для индикации натяжения геофизического кабеля в кгс.- «Натяжение»;

- светодиод «метка», для визуализации прихода ММ;

- ручка «компенсация», для регулировки чувствительности сигнала ММ;

- переключатель «работа» и «установка», для функционирования ИПК1 в основном режиме, либо в режиме установки допустимых границ параметров глубины и цены одного шага квантования;

- светодиоды «макс.» и «мин.», для индикации состояний: в режиме «установка»-светодиод «макс.» указывает, что устанавливается верхняя допустимая граница выбранного параметра, а светодиод «мин.» - нижняя допустимая граница;

- в режиме «работа» свечение обоих светодиодов говорит о входе в интервал коррекции глубины по ММ (+ - 0,5м. - интервал ожидания прихода ММ, т.е. от 9,5м. до 10,5м.), после прихода ММ и при выходе из интервала ожидания светодиод «мин.» гаснет, светодиод «макс.» гаснет при выходе из интервала ожидания только в случае прихода ММ, в противном случае светодиод продолжает гореть, сигнализируя о том, что в данном 10-ти метровом интервале ММ не пришла;

- <M> и <0> – шлицы подстроечных сопротивлений для настройки диапазона измерения натяжения («0» - нуль шкалы и «М» - верхняя граница шкалы) – сопротивления находятся на плате УДН;

- кнопка «параметр», в режиме «установка» для выбора типа установок из следующего набора:

1. установка Начальной Глубины ( Новой Глубины ), при этом на левом индикаторе высвечиваются символы «Н.Г.», средний индикатор предназначен для установки нового значения, а правый индикатор не используется;

2. установка Пределов Глубины, при этом на левом индикаторе высвечиваются символы «Г. ПР.», средний индикатор служит для индикации вводимой нижней границы глубины (сопровождается свечением светодиода «мин.»), а правый – для индикации вводимой верхней границы глубины (сопровождается свечением светодиода «макс.»);

3. установка Новой Разметки геофизического кабеля (цены одного шага квантования по глубине), при этом на левом индикаторе высвечиваются символы «Н.Р.», на среднем индикаторе индицируются целые значения, сопровождаемые свечением светодиода «мин.», а на правом – дробная часть значения, сопровождаемая свечением светодиода «макс.», цены одного шага квантования по глубине;

4. установка Пределов Натяжения, при этом на левом индикаторе появляются символы «Н. ПР.», средний индикатор служит для установки нижней допустимой границы натяжения кабеля (подсвечивается светодиодом «мин.» и «точкой» на этом индикаторе ), а правый – для установки верхней допустимой границы ( подсвечивается светодиодом «макс.» и «точкой» на этом индикаторе);

- кнопка «граница», для указания индикатора (подсвеченной «точкой») и вида задаваемой граничной информации: верхняя граница (максимальное значение) - горит светодиод «макс.» и нижняя граница (минимальное значение) – горит светодиод «мин.»;

- кнопка «разряд», в режиме «установка» для перемещения точки внутри выбранного индикатора (параметра), которая показывает, что данную цифру можно изменить;

- кнопка «значение», в режиме «установка» для изменения значения выбранного разряда.

На вертикальной стенке, установленной у левого края передней панели ИПК1 размещены пять разъёмов:

Х3 – для подключения каротажного регистратора (например, «Гектора»);

Х4 – для подключения датчика шагов квантования по глубине ФТГ;

Х5 – для подключения датчика магнитных меток ДММ;

Х6 – для подключения бортового источника питания 12в.;

Х7 – для подключения датчика натяжения геофизического кабеля.

    С внутренней стороны передней панели размещены:

- плата светодиода ММ;

- плата светодиодов «макс.» и «мин.»;

- плата формирования и обработки сигнала ФОС-1;

- плата источника питания ИП;

- плата усилителя датчика натяжения УДН;

- тумблер переключения напряжения бортовой сети «12в.» и «24в.»;

- транзистор параллельного стабилизатора КТ827В;

- стабилитрон параллельного стабилизатора КС515А.

Для извлечения передней панели из каркаса достаточно отвернуть четыре специальных невыпадающих винта и вынуть панель из каркаса вместе с боковыми разъемами.

 

Принцип действия

Управление комплексом осуществляется при помощи тумблеров и кнопок на передней панели ИПК1. Все режимы работы индицируются светодиодами и индикаторами. Память прибора позволяет хранить однажды введенные уставки. Функционирование комплекса возможно в двух режимах: «работа» и «установка». В режиме «установка» можно записать в память граничные значения контролируемых параметров, новое значение глубины, новую цену одного шага квантования по глубине. В режиме «работа» комплекс ведет непрерывный контроль глубины нахождения скважинного прибора с одновременным вычислением скорости его перемещения и измерением натяжения кабеля. Контролируемая глубина постоянно корректируется по магнитным меткам, предварительно нанесенным на кабель. Вся информация, поступающая в комплекс от датчиков, транслируется в разъем связи с внешним каротажным регистратором.

Структурная схема соединений МП-блока контроля, индикации и сигнализации параметров перемещения грузонесущих тросов представлена на Рис.4.

Основу аппаратуры составляет процессорная плата А3 ФОС1 (формирования и обработки сигналов), на которую поступают выходные сигналы датчиков: ФТГ (формирователь тактов глубины) через разъем Х4, ДММ (датчик магнитных меток) через разъем Х5, ДН (датчик натяжения кабеля) через разъем Х7 и после усиления в УДН (усилителе выходного сигнала ДН). После обработки информации в процессоре выходные данные выводятся: на индикаторы И1,И2,И3, соответственно – скорость, глубина и натяжение кабеля; на выходной разъём Х3 для подачи на внешние устройства: каротажный регистратор, блок аварийного отключения привода лебёдки и др.

Электропитание данная аппаратура получает от бортовой сети через разъем Х6 (аккумулятор или блок питания постоянного тока 12в.), которая в источнике питания ИП (плата А4) преобразуется в необходимые для работы аппаратуры напряжения +5в. и +-12в.

 Рис.4.Структурная схема устройства КОНПАК

 

Принципиальная схема платы ФОС1 представлена на Рис.5. Центральным звеном схемы является микропроцессор DD1(PIC16F873). В этом процессоре программным способом реализуется прием информации от датчиков после формирователей DD2.1, DD2.3, DD2.5 и усилителя УДН (расположен на передней панели прибора), от переключателя режима работы SA1 и от кнопок управления S1 – S4(Рис.4). После обработки вывод информации осуществляется на пьезоэлектрический излучатель звука HS1(звуковая сигнализация), знакосинтезирующие индикаторы И1 – И3, светодиоды VD1 –VD3 (Рис.4). Все эти соединения осуществляются с помощью разъема Х2 на 40 контактов. Кроме того на плате ФОС1 находятся: генератор подмагничивания феррозонда ДММ на микросхеме DA2 с усилителем мощности на транзисторе VT2, схема выделения магнитной метки в составе: фильтра – R12, C5, R13; детектора – VD2; преобразователя тока в напряжение – DA1 и усилителя VT1, источник стабильного напряжения для процессора DD1 и ряд пассивных элементов для фильтрации напряжений питания – С10-С13, С1, С3, C4; для использования в качестве нагрузочных, ограничивающих и подтягивающих элементов – RR1, R1-R9, C15, VD9; для сброса процессора при включении напряжения питания – C2, R10; для запуска и стабилизации частоты тактового генератора – ZQ1, R11, L1; а также буферные элементы для передачи сигналов ММ, +ШК и - ШК в линию – DD2, DD3 и DD4.


Принципиальная схема усилителя датчика натяжения УДН представлена на рис.6. На этой схеме элемент ДА3 – стабилизатор напряжения питания датчика натяжения, выполненного в виде тензорезисторного моста, выходной сигнал которого подается на вход дифференциального усилителя ДА1, выполняющего функцию согласующего устройства. Одновременно на этом усилителе реализованы установка мостовой схемы в «нулевое» состояние (сигнал в измерительной диагонали моста равен нулю) и регулировка предварительного усиления полезного сигнала. Усилитель-фильтр ДА2 служит для согласования выходного сигнала УДН с диапазоном преобразования АЦП.

      

 

 

Алгоритм функционирования аппаратуры КОНПАК представлен на рис.7.


     Программа разрабатывается и отлаживается с помощью специальных средств, предназначенных для этой цели. Разработка программного обеспечения является центральным моментом общего процесса проектирования. Центр тяжести функциональных свойств современных цифровых систем находится именно в программных средствах. Основным инструментом для профессиональной разработки программ является ассемблер, предполагающий детализацию на уровне команд МК. Только ассемблер позволяет максимально использовать ресурсы кристалла.

Для микроконтроллеров PIC выпущено большое количество различных средств разработки. В данном примере речь пойдет о средствах, предоставляемых фирмой Microchip, которые весьма эффективны и широко используются на практике.

Ассемблер MPASM представляет собой интегрированную программную среду для разработки программных кодов PIC микроконтроллеров всех семейств. Выпускается фирмой Microchip в двух вариантах: для работы под DOS и для работы под Windows 95/98/NT. Ассемблер MPASM может использоваться как самостоятельно, так и в составе интегрированной среды разработки MPLAB. Она включает несколько программ: собственно MPASM, MPLINK и MPLIB, причем каждая из них обладает собственным интерфейсом.

Программа MPASM может использоваться для двух целей:

• генерации исполняемого (абсолютного) кода, предназначенного для записи в МК с помощью программатора;

• генерации перемещаемого объектного кода, который затем будет связан с другими ассемблированными или компилированными модулями.

Исполняемый код является для MPASM выходным кодом по умолчанию. При этом все переменные источника должны быть явно описаны в тексте программы или в файле, подключаемом с помощью директивы INCLUDE <filename>. Если при ассемблировании не выявляется ошибок, то генерируется выходной .hex-файл, который может быть загружен в МК с помощью программатора.

При использовании ассемблера MPASM в режиме генерации перемещаемого объектного кода формируются объектные модули, которые могут быть впоследствии объединены с другими модулями при помощи компоновщика MPLINK. Программа-компоновщик MPLINK преобразует перемещаемые объектные коды в исполняемый бинарный код, привязанный к абсолютным адресам МК. Библиотечная утилита MPUB позволяет для удобства работы сгруппировать перемещаемые объекты в один файл или библиотеку. Эти библиотеки могут быть связаны компоновщиком MPLINK в файл выходного объектного кода ассемблера MPASM.

Программы MPASM и MPLINK доступны через оболочку MPASM, тогда как MPLIB доступна только со своей командной строки.

Исходным файлом для ассемблера MPASM по умолчанию является файл с расширением .ASM. Текст исходного файла должен соответствовать требованиям синтаксиса, приведенным далее.

Ассемблер MPASM может быть вызван командной строкой

MPASM [/<Option>[/<Option>...]] <filename>

где /<Option> означает выбор режима работы ассемблера в командной строке; <file_name> — имя файла на ассемблирование.

Режимы работы ассемблера, выбранные по умолчанию, приведены в табл. 1.

 

Выбор Значение по умолчанию Описание
?   N/A Вызвать помощь  
а INHX8M Генерировать абсолютный .COD и hex выход непосредственно из ассемблера:
с On Выбрать/запретить случай чувствительности
     
е On Выбрать/запретить файл ошибок
h N/A Отобразить панель помощи MPASM
1 On Выбрать/запретить файл листинга,
    генерированный из макроассемблера.
m On Вызвать/запретить макрорасширение
о N/A Установить путь для объектных файлов
    /o<path>\object.file
Р None Установить тип процессора:
    /p<processor_type>
q Off Разрешить/Запретить скрытый режим
    (запретить вывод на экран)
г Hex Определяет тип числа по умолчанию:
    /r<radix>
w 0 Определяет уровень диагностических
    сообщений в файле листинга /w<level>,
    где <level> может быть:
    0 - сообщать все,
    1 — сообщать о предупреждениях и ошибках,
    2 - сообщать только об ошибках.
X Off Разрешить/запретить перекрестные
    ссылки в файле листинга.

Табл.1 Режимы работы ассемблера по умолчанию.

Здесь и далее используются следующие соглашения по использованию символов:

[ ] — для аргументов по выбору;

< > — для выделения специальных ключей <ТАВ>, <ESC> или дополнительного выбора;

- для взаимоисключающих аргументов (выбор ИЛИ);

строчные символы - для обозначения типа данных.

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

/<option> разрешает выбор;

/<option>+ разрешает выбор;

/<option> - запрещает выбор.

Исходный ассемблерный файл создается с использованием любого ASCII текстового редактора. Каждая линия исходного файла может содержать до четырех типов информации:

• метки (labels)

• мнемоника (mnemonics)

• операнды (operands)

• комментарий (comments)

Порядок и положение каждого типа имеет значение. Метка должна начинаться в колонке номер один, Мнемоника может начинаться в колонке два или далее. Операнды идут за мнемоникой. Комментарий мо­жет следовать за операндом, мнемоникой или меткой или может начи­наться в любом столбце, если в качестве первого не пустого символа используется * или ; .

Максимальная длина строки 255 символов.

Один или несколько пробелов должны отделять метку и мнемонику или мнемонику и операнд(ы). Операнды могут отделяться запятой. Например:

List p=16C54, r=HEX

ORG 0x1 FF ;Вектор сброса

GOTO START ;Возврат на начало

ORG 0x000 ;Адрес начала исполнения программы START

MOVLW ОхОА выполнение программы PIC MK

MOVLW 0x0 В ;

GOTO START ;Выполнять всегда

END

Метки

В поле метки размещается символическое имя ячейки памяти, в которой хранится отмеченный операнд. Все метки должны начинаться в колонке 1. За ними может следовать двоеточие (:), пробел, табуляция или конец строки. Комментарий может также начинаться в колонке 1, если используется одно из обозначений комментария.

Метка может начинаться с символа или нижнего тире ( _ ) и содержать буквенные символы, числа, нижние тире и знак вопроса. Длина метки может быть до 32 символов.

Мнемоники

Мнемоники представляют собой мнемонические обозначения команды, которые непосредственно транслируются в машинный код. Мнемоники ассемблерных инструкций, директивы ассемблера и макровызовы должны начинаться, по крайней мере, в колонке 2. Если есть метка на той же линии, она должна быть отделена от этой метки двоеточием или одним или более пробелами или табуляцией.

Операнды

В этом поле определяются операнды (или операнд), участвующие в операции. Операнды должны быть отделены от мнемоники одним или более пробелами или табуляцией. Операнды отделяются друг от друга запятыми. Если опе­рация требует фиксированного номера (числа) или операндов, то все на линии после операндов игнорируется. Комментарии разрешаются в конце линии. Если мнемоники позволяют использовать различное число операндов, конец списка операндов определяется концом строки или комментарием.

Выражения используются в поле операнда и могут содержать константы, символы или любые комбинации констант и символов, разделенных арифметическими операторами. Перед каждой константой или символом может стоять + или — , что указывает на положительное или отрицательное выражение.

В ассемблере MPASM используются следующие форматы выражений:

• текстовая строка;

• числовые константы и Radix;

• арифметические операторы и приоритеты;

• High / Low операторы.

Текстовая строка - это последовательность любых допустимых ASCII символов (в десятичном диапазоне от 0 до 127), заключенная в двойные кавычки. Строка может иметь любую длину в пределах 132 колонок. При отсутствии ограничения строки она считается до конца линии. Если строка используется как буквенный операнд, она должна иметь длину в один символ, иначе будет ошибка.

Числовая константа представляет собой число, выраженное в некоторой системе счисления. Перед константой может стоять + или -. Промежуточные величины в константах рассматриваются как 32-разрядные целые без знака.

MPASM поддерживает следующие системы счисления (представления значений или Radix): шестнадцатеричную, десятичную, восьмеричную, двоичную и символьную. По умолчанию принимается шестнадцатеричная система.

Операторы — это арифметические символы, подобные + и -, которые используются при формировании выражений. Каждый оператор имеет свой приоритет.

Комментарии

Поле комментария может использоваться программистом для текстового или символьного пояснения логической организации программы. Поле комментария полностью игнорируется ассемблером, поэтому в нем можно применять любые символы. Комментарии, которые используются в строке сами по себе, должны начинаться с символа комментария <* или ;). Комментарии в конце строки должны быть отделены от остатка строки одним или более пробелами или табуляцией.

Существует ряд расширений файлов, применяемых по умолчанию MPASM и связанными утилитами. Назначения таких расширений приведены в табл. 2.

Расширение Назначение
.ASM Входной файл ассемблера для MPASM <source_name > .AS M
.OBJ Выходной файл перемещаемого объектного кода из MPASM <source_name>.OBJ
.LST Выходной файл листинга, генерируемый ассемблером MPASM или MPLINK: <source_name>XST
.ERR Выходной файл ошибок из MPASM: <source_name >. ERR
.MAP Выходной файл распределения памяти из MPASM: <source_name>.MAP
.HEX Выходной файл объектного кода в шестнадцатеричном представлении из MPASM: <source_name).HEX
.HXL/.HXH Выходной файл объектного кода в шестнадцатеричном представлении с раздельным представлением младших и старших байт:<source__name>.HXL, <source_name>.HXH
.LIB Библиотечный файл, созданный MPLIB и привязанный компоновщиком MPLINK:<source__name>.UB
.LNK Выходной файл компоновщика: <source_name>.LNK
.COD Выходной символьный файл или файл отладчика. Формируются MPASM или MPLINK: <source_name>.COD


Табл. 2. Используемые по умолчанию назначения расширений файлов

Листинг представляет собой текстовый файл в формате ASCII, который содержит машинные коды, сгенерированные в соответствии с каждой ассемблерной командой, директивой ассемблера или макрокомандой исходного файла. Файл листинга содержит: имя продукта и версии, дату и время, номер страницы вверху каждой страницы. В состав листинга входят также таблица символов и карта использования памяти. В таблице символов перечисляются все символы, которые есть в программе, и где они определены. Карта использования памяти дает графическое представление о расходовании памяти МК.

Директивы языка

Директивы языка — это ассемблерные команды, которые встречаются в исходном коде, но не транслируются прямо в исполняемые коды. Они используются ассемблером при трактовке мнемоники входного файла, размещении данных и формировании файла листинга.

Существует четыре основных типа директив в MPASM:

• директивы данных;

• директивы листинга;

• управляющие директивы;

• макро-директивы.

Директивы данных управляют распределением памяти и обеспечивают доступ к символическим обозначениям данных.

Директивы листинга управляют листингом файла MPASM и форматом. Они определяют спецификацию заголовков, генерацию страниц и другие функции управления листингом.

Директивы управления позволяют произвести секционирование обычного ассемблерного кода.

Макро-директивы управляют исполнением и распределением данных в пределах определений макротела.

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

CODE - начало секции объектного кода

Синтаксис:

[<label>] code [ROM address>]

Используется при генерации объектных модулей. Объявляет начало секции программного кода. Если <label> не указана, секция будет названа .code. Стартовый адрес устанавливается равным указанному значению или нулю, если адрес не был указан.

Пример:

RESET code H'01FF goto START

#DEFINE - определить метку замены текста Синтаксис:

#define <name> [<string>]

Директива задает строку <string>, замещающую метку <name> всякий раз, когда та будет встречаться в исходном тексте.

Символы, которые определены директивой #DEFINE, не могут быть просмотрены симулятором. Используйте вместо этой директивы EQU.

Пример:

#define length 20

#define control 0x19,7

#define position (X,Y,Z) (y-(2 * Z +X)).

testjabel dwposition(1, length, 512)

bsf control ; установить в 1 бит 7 в f 19

END — конец программного блока Синтаксис:

end

Определяет конец программы. После остановки программы таблица символов сбрасывается в файл листинга. Пример:

start

;исполняемый код

end ; конец программы

EQU — определить ассемблерную константу Синтаксис:

<label> equ <ехрr>

Здесь <ехрr> — это правильное MPASM выражение. Значение выражения присваивается метке <label>. Пример:

four equ 4 ; присваивает численное значение метке four

INCLUDE - включить дополнительный файл источника Синтаксис:

include <<include_file>>

 include "<include_file>"

Определяемый файл считывается как источник кода. По окончании включаемого файла будет продолжаться ассемблирование исходника. Допускается до шести уровней вложенности. <include_file> может быть зак­лючен в кавычки или угловые скобки. Если указан полный путь к файлу, то поиск будет происходить только по этому пути. В противном случае порядок поиска следующий: текущий рабочий каталог, каталог, в котором находится исходник, каталог MPASM.

Пример:

include "c:\sys\sysdefs.inc"; system defs

include <addmain.asm> ; register defs

LIST - установить параметры листинга Синтаксис:

list [<list_option>, , <list_option>]

Директива <list> разрешает вывод листинга, если он до этого был запрещен. Кроме того, один из параметров листинга может быть изменен для управления процессом ассемблирования в соответствии с табл.3.

 

Параметр

Значение по умолчанию Описание

C=nnn

80 Количество символов в строке

n=nnn

59 Количество строк на странице
t=ON OFF OFF Укорачивать строки листинга

p=<type>

None Установить тип процессора: PIC16C54, PIC16C84, PIC16F84, Р1С17С42идр.

r=<radix>

HEX Установить систему счисления по умолчанию: hex, dec, oct.

w=<level>

0 Установить уровень сообщений диагностики в файле листинга: 0 - выводить все сообщения; 1 - выводить предупреждения и ошибки; 2 - выводить только ошибки.
x=ON OFF OFF Включить или выключить макрорасширения.

Табл. 3. Параметры, используемые директивой list.

 

NOLIST - выключить выход листинга Синтаксис:

NOLIST

ORG — установить начальный адрес программы Синтаксис:

<label> org <expr>

Устанавливает начальный адрес программы для последующего кода в соответствии с адресом в <expr>. MPASM выводит перемещаемый объектный код, a MPLINK разместит код по определенному адресу. Если метка <label> определена, то ей будет присвоена величина <ехрr>. По умолча­нию начальный адрес имеет нулевое значение. Директива может не использоваться, если создается объектный модуль.

Пример:

int_1 org 0x20; Переход по вектору 20

int_2 org int__1 +0x10; Переход по вектору 30

PROCESSOR — установить тип процессора Синтаксис:

processor <processor_type>

Устанавливает тип используемого процессора <processor_type>: [I6C54 | 16С55 | 16С56 | 16С57 | 16С71 | 16С84 | 16F84 | 17С42]. Общие процессорные семейства могут быть выбраны как: [ 16С5Х116СХХ 17CXX]. Для поддержания совместимости с новыми изделиями выбирается мак­симум доступной памяти.

SET - определить ассемблерную переменную Синтаксис:

<label> set<expr>

Директива SET функционально эквивалентна директиве EQU, за исключением того, что величина, определяемая SET, может быть изменена директивой SET.

Пример:

area set 0
widthset 0x12
length       set 0x14

area set   length * width
length       set length + 1

TITLE — Определить программный заголовок Синтаксис:

title "<title_text>"

Эта директива устанавливает текст, который используется в верхней линии страницы листинга.<title_text> - это печатная ASCI I последователь­ность, заключенная в двойные скобки. Она может быть до 60 символов длиной.

Пример

title "operational code, rev 5.0"

Абсолютный (неперемещаемый) код программы генерируется непосредственно при ассемблировании и располагается в программной памяти в порядке следования операторов программы. Операторы перехода на метку сразу же заменяются соответствующим кодом перехода на адрес метки.

При генерации перемещаемого кода каждая секция программного кода должна предваряться директивой CODE. Окончательное размещение программных кодов, расстановку физических адресов переходов выполняет компоновщик MPLINK.

Компоновщик MPLINK выполняет следующие задачи:

• распределяет коды и данные, т.е. определяет, в какой части программной памяти будут размещены коды и в какую область ОЗУ будут помещены переменные;

• распределяет адреса, т.е. присваивает ссылкам на внешние объекты в объектном файле конкретные физические адреса;

• генерирует исполняемый код, т.е. выдает файл в формате .hex, который может быть записан в память МК;

• отслеживает конфликты адресов, т.е. гарантирует, что программа или данные не будут размещаться в пространстве адресов, которое уже занято;

• предоставляет символьную информацию для отладки.

Для более подробного изучения работы компоновщика следует обратиться к специальной литературе.

Менеджер библиотек позволяет создавать и модифицировать файлы библиотек. Библиотечный файл является коллекцией объектных модулей, которые размещены в одном файле. MPLIB использует объектные модули с именем типа «filename.о» формата COFF (Common. Object File Format).

Использование библиотечных файлов упрощает компоновку программы, делает ее более структурированной и облегчает ее модификацию.

Симулятор MPSIM представляет собой симулятор событий, предназначенный для отладки программного обеспечения Р1С-контроллеров. MPSIM моделирует все функции контроллера, включая все режимы сбро­са, функции таймера/счетчика, работу сторожевого таймера, режимы SLEEP и Power-down, работу портов ввода/вывода.

MPSIM запускается из командной строки DOS, конфигурируется пользователем и непосредственно применяет выходные данные ассемблера MPASM.

Перед использованием симулятора необходимо отассемблировать исходный файл <file_name>.asm и получить файл объектного кода в формате INHX8M, создаваемый MPASM по умолчанию:

MPASM <file_name>.asm <RETURN>

Чтобы запустить симулятор, необходимо набрать в командной строке

MPSIM<RETURN>.

Вид экрана, получаемого при запуске MPSIM, показан на рис. xx. Экран разделен на три части, или окна. В верхнем окне показано текущее состояние моделирования, включая моделируемую программу, тип МК, число выпол­ненных командных циклов и затраченное на них время. Среднее окно исполь­зуется для вывода содержимого регистров пользователя. Набор регистров и формат выводимых на экран данных определяются файлом MPSTM.INI, который далее будет описан подробнее. Нижнее окно содержит приглашение на ввод команд, а также текущие операции и результат их выполнения.

При запуске симулятор MPSIM начинает искать командный файл MPSIM.INI. Этот текстовой файл создается пользователем и используется для задания всех задействованных в программе параметров.

User4 RADIX=X   MPSIM 5.20 16c84 TIME=0.0 u 0 ?=Help

W: 00 Fl: 00 F2: IFF F3: 0001111 IOA: OF F5: OF
%P84 ;Choose Microcontroller number = 84
%SR X ;Set Input/Output radix to
hexadecimal  
%ZR ;Set all registers to 0
%ZT ;Zero elapsed time counter to 0
%RE ;Reset elapsed time and step
count  
%V W,X,2 ;register W  
%AD F1,X,2 /register TMRO
%AD F2,X,3 ;register PCL
%AD F3,B,8 ;register STATUS
%AD IOA,X,2 ;Port "A" TRIS register
%AD F5,X,2 ;Port "A" register
%RS ;Reset
%SC 1 ;Set the clock 1MHz
%LO user4  
Hex code loaded  
Listing file loaded
Symbol table loaded
218960 bytes %_ memory free

Рис. 8. Вид рабочего окна симулятора MPSIM.

Один из примеров файла MPSIM.INI приведен ниже.

; MPSIM file for user4

P84 ;использование МК семейства PIC16С84

SR X ;представление данных в 16-ричном формате

ZR  ;сброс регистров МК в нуль

ZT  ;сброс таймера в нуль

RE  ;сброс времени выполнения команды и счетчика циклов

VW,X,2     ;вывод регистра W в hex формате на два знакоместа

AD F1 ,Х,2 ;вывод на экран регистра TMR0 в hex формате на два знакоместа

AD F2,X,3  ;вывод на экран регистра PCL в hex формате на три знакоместа

AD F3,B,8 ;вывод на экран регистра STATUS в bin формате на восемь  знакомест

AD IOА,Х,2 ;вывод на экран регистра TRISA в hex формате на два знакоместа

AD F5.X.2  ;вывод на экран регистра порта А в hex формате на два знакоместа

SC 1            ;установка тактовой частоты 1 МГц

RS               ;сбросМК

LO user4

В представленном файле указаны: тип микроконтроллера, система счисления данных по умолчанию, регистры, содержимое которых выводится на экран, способ представления данных, рабочие параметры. Любая команда, которая исполняется MPSIM, может быть задана в файле MPSIM.INI, который определяет начальное состояние программы. При работе MPSIM создает файл MPSIM.JRN, в котором сохраняются все сведения о нажатии клавиш в процессе работы.

В файле MPSIM.INI допускается вводить комментарии, которые даются после знака «;», но не допускается использование пустых строк.

Основные команды, применяемые в симуляторе MPSIM, приведены в табл. 4. Когда эти команды вводятся в сеансе работы с MPSIM, они заносятся в файл MPSIM.JRN, который используется при создании рас­ширенного файла MPSIM.INI. Данный файл можно задействовать для выявления ошибок и обеспечения нормального выполнения программы после исправления кода.

 

Команда Параметр Комментарии
АВ - Прерывание текущей сессии
AD Reg|, Radix[, Digits]] Вывод содержимого регистра на экран в указанном формате и заданной системе счисления X, В или D
В [addr] Установка точки останова по текущему или указанному адресу
С [#break] Продолжение выполнения программы с пропуском указанного количества следующих точек останова
DB  - Вывод на экран всех активных точек останова
DI [addrl[,addr2]] Вывод на экран фрагмента памяти программ
DR  - Вывод содержимого всех регистров
DW  [E1D] Разрешение/запрещение функционирования сторожевого таймера
E [addr] Выполнение программы с текущего или указанного адреса
F Reg Вывод на экран содержимого регистра и возможность его редактирования пользователем
GE filename Получение и выполнение командного файла. Это способ загрузки командного файла .INI
GO  - Запуск МК и начало выполнения программы
IP [time step] Ввод входных воздействий в соответствии со значением параметра step в файле Stimulus
LO filename Загрузка в MPSIM файлов .HEX и .COD
M Addr Вывод на экран содержимого памяти программ, начиная с адреса «addr» и возможность его редактирования. Ввод «Q» завершает команду.
Р device Выбор типа моделируемого МК
Q  - Выход из MPSIM и запись команд в файл JRN
RE  - Сброс времени выполнения и счетчика циклов
RS  - Сброс моделируемого МК
SE pin|port Вывод на экран состояния указанного вывода или порта и возможность его изменения
SR OXD Установка системы счисления по умолчанию
SS [addr] Пошаговое исполнение, начиная с указанного адреса. При отсутствии адреса - исполнение идет с текущего места
ST filename Загрузка файла стимуляции
w   Отображение состояния регистра W с возможностью его модификации
ZM addrl,addr2 Очистка памяти программ с адреса addrl пo addr2
ZR - Сброс всех регистров МК
ZT - Сброс таймера/счетчика МК

Табл. 4. Основные команды симулятора MPSIM .

Для моделирования внешних тестовых событий (воздействий) на моделируемый МК используются файлы стимуляции с расширением .STI. Эти файлы используются MPSIM для того, чтобы обеспечить подачу однократных и повторяющихся входных сигналов в процессе выполнения программы. При этом можно наблюдать на экране, как МК реагирует на сигналы.

В качестве примера ниже приведен файл для тестирования программы, выполняющей опрос состояния линии 1 порта А.

! test1.STI                             

STEP     RA1

1     1 !Установка на входе RA1 состояния "1"

200    0 !Поступление на вход RA1 сигнала "0"

1000   1 !Переход сигнала на входе RA1 в"1"

1200   0 !Повторная подача нулевого сигнала

Файл воздействия состоит из множества состояний, для которых задается параметр STEP, определяющий число циклов, в течение которых поддерживается указанное состояние. Он позволяет одновременно подавать сигналы на различные выводы МК. В файле воздействия можно указать любой вывод МК, в том числе и вывод сброса (_MCLR). Для обозначения комментариев используется знак !.

 

Далее представлен листинг основного цикла программы.

 

LIST P=16f873

;************************************************************************

;

;         Программа для КОНПАКА

;

;************************************************************************

           errorlevel -302,-306

#include impl.inc

#include p16f873.inc

#include <DEFINE.INC> ; PIC16 math library definitions

#include <MATH16.INC> ; PIC16 math library definitions

#include macro.inc

; конфигурация для МП

           __CONFIG _CP_OFF & _WRT_ENABLE_ON & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC & _DEBUG_OFF & _CPD_OFF

           LIST

;EEPROM начальные значения при программировании

           org 0x2100

           ; 0 1 2 3 4 5 6 7 8 9 a b c d e f 10

           de 0xff,0x00,0x00,0x00,0x00,0x7c,0x38,0x00,0x03,0xe8,0x00,0x00,0x00,0x00,0x00,0x82,0x00

;EEPROM          ; |gl=999900 |gh=999950 |UKol=1000 |UKolZ=0  |pl=5000 |ph=9000         

           org 0x00

           goto start

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

           nop

           bsf PCLATH,3

           call inter      ;подпрограмма обработки прерываний в банке 2

           bcf PCLATH,3

           retfie               ; возврат к основной программе

; подпрограммы 0 банка

#include page1.inc

#include pprog1.inc

#include start.inc

;***********************************************

;             основной цикл

;***********************************************

body

           decf CountRaz,F             

   bsf RegFlag,Sea   ; флаг обновления данных в индикаторе

;****************************; расчет текущей глубины

loop_glub

rd_zmm                                         ; чтение значения цены 1 ММ (МАГНИТНОЙ МЕТКИ)

           movf zmm1,0

           movwf d_l3

           movf zmm0,0

           movwf d_l2

           movf zmm1,0

           subwf d_l3,0    

           btfss 3,0                  ; проверка изменений в данных цены 1 ММ

           goto rd_zmm

rd_cmm                                         ; чтение значения счетчика ММ

           movf cmm1,0

           movwf d_e3

           movf cmm0,0

           movwf d_e2

           movf cmm1,0

           subwf d_e3,0

           btfss 3,0                  ; проверка изменений в данных счетчика ММ

           goto rd_cmm

rd_cshk                                         ;чтение значения счетчика ШК

           movf cshk1,0

           movwf d_l1

           movf cshk0,0

           movwf d_l0

           movf cshk1,0

           subwf d_l1,0

           btfss 3,0                  ; проверка изменений в данных счетчика ШК

           goto rd_cshk

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

           movf cmm0,0

           subwf d_e2,0

           btfss 3,0

           goto rd_cmm

           movf zmm0,0

           subwf d_l2,0

           btfss 3,0

           goto rd_zmm

                                          ;расчет по глубины по формуле

;глубина(дм)= (счетчик ММ * количество ШК в 10 м) + счетчик ШК + цена 1 ММ

           CLRF AARGB0

           MOVFW d_e3 ;cmm

           MOVWF AARGB1

           MOVFW d_e2

           MOVWF AARGB2

           call FLO32                                         ; преобразование данных смм в

                                                                                 ; формат с плавающей запятой

                          movfw10 FUKol4       ;0x88 ;1000

                          MOVWF BEXP

                          movfw10       FUKol3 ;0x7a

                          MOVWF BARGB0

                          movfw10       FUKol2 ;0x00

                          MOVWF BARGB1

                          movfw10       FUKol1 ;0x00

                          MOVWF BARGB2

                          call FPM32                            ; cmm * 1000

                          MOVFW AEXP          ;ММ * количество ШК в 10 м

                          MOVWF BEXP

                          MOVFW AARGB0

                          MOVWF BARGB0

                          MOVFW AARGB1

                          MOVWF BARGB1

                          MOVFW AARGB2

                          MOVWF           BARGB2

                          CLRF           AARGB0

                          MOVFW d_l3           ;zmm

                          MOVWF AARGB1

                          MOVFW d_l2

                          MOVWF AARGB2

   movfw d_l0                                                ;(счетчик ШК) + (цена ММ)

   addwf AARGB2,F

   btfss STATUS,C

   goto AddByte2

   movlw 0x01

   addwf AARGB1,F

   btfss STATUS,C

   goto AddByte2

   addwf AARGB0,F

   AddByte2

   movfw d_l1

   addwf AARGB1,F

   btfss STATUS,C

   goto AddEnd

   movlw 0x01

   addwf AARGB0,F

   AddEnd

                          CALL              FLO32            ;_(счетчик ШК) + (цена ММ)

                          CALL           FPA32           ; MM * количество ШК в 10 м + счетчик ШК + цена ММ

                          movfw10       FMM4 ;

                          MOVWF BEXP

                          movfw10       FMM3

                          MOVWF BARGB0

                          movfw10       FMM2

                          MOVWF BARGB1

                          movfw10       FMM1

                          MOVWF BARGB2

                          CALL FPM32                           ; операция умножения

 

                          MOVFW Kor4          ;ММ * количество ШК в 10 м

                          MOVWF BEXP

                          MOVFW Kor3

                      MOVWF BARGB0

                          MOVFW Kor2

                          MOVWF BARGB1

                          MOVFW Kor1

                          MOVWF BARGB2

                          CALL FPM32

                          CALL INT32                              ; преобразование данных глубины

                                                                                   ; в целочисленный формат 

                          MOVFW AARGB0

                          MOVWF g2

                          MOVFW AARGB1

                          MOVWF g1

                          MOVFW AARGB2

                          MOVWF g0

RolikOk

           movfw g2

           movwf d_e2

           movwf rez2

           movfw g1

           movwf d_e1

           movwf rez1

           movfw g0

           movwf d_e0

           movwf rez0

           clrf d_e3

           clrf rez3

;*********************       ; проверка пересечения глубины установленных границ

                                                   ;записываем в буфер данные

           movf d_e0,0

           movwf buf0

           movf d_e1,0

           movwf buf1

           movf d_e2,0

           movwf buf2

           movf g0l,0

           movwf buf_min0

           movf g1l,0

           movwf buf_min1

           movf g2l,0

           movwf buf_min2

           movf g0h,0

           movwf buf_max0

           movf g1h,0

           movwf buf_max1

           movf g2h,0

           movwf buf_max2

                                                   ; устанавливаем флаги перед проверкой

           bcf f_alarm,0 ;Fmin=0

           btfsc f_data,4 ;if FGmin=1 then Fmin=1

           bsf f_alarm,0 ;

           bcf f_alarm,1 ;Fmax=0

           btfsc f_data,5 ;if FGmax=1 then Fmax=1

           bsf f_alarm,1 ;

           clrf k_gran            ; clear rezult

           call FIN                     ; подпрограмма проверки

                                                     ;фиксируем изменения

           bcf f_data,4            ;FGmin=0

           btfsc f_alarm,0         ;if Fmin=1 then FGmin=1

           bsf f_data,4 ;

           bcf f_data,5 ;            FGmax=0

           btfsc f_alarm,1      ;if Fmax=1 then FGmax=1

           bsf f_data,5 ;

           movfw g2

           movwf d_e2

           movwf rez2

           movfw g1

           movwf d_e1

           movwf rez1

           movfw g0

           movwf d_e0

           movwf rez0

;************************* ; преобразование глубины в десятичный вид

           call hex_dec

           movf rez2,0

           movwf gb2

           movf rez1,0

           movwf gb1

           movf rez0,0

           movwf gb0

;************************* ; преобразование в коды индикатора

           swapf gb0,W

           call IndicCode

           movwf ig0

           movf gb1,W

           call IndicCode

           movwf ig1

           swapf gb1,W

           call IndicCode

           movwf ig2

           movf gb2,W

           call IndicCode

           movwf ig3

           swapf gb2,0

           call IndicCode

           movwf ig4

;************************* ;индикация ММ

           btfss RegFlag,mm_e

           bsf ig4,2              

           btfss RegFlag,mm_e

           goto NoММ

           bcf ig4,2             

           movlw 0x00 ;old-04

           movwf PORTA

               

No ММ

;*********************************;расчет скорости

;коэффициент = при 20 мГц ( 5 000 000 / KolSchk)

;5 000 000 / KolSchk = (5 000 000 / (KolTmr * KolSchk)) * 100= 00 4c 4b 40 / KolSchk

; V = 5 000 000 * 100 * UserKol / 1000 = 500 000 * btmr / UserKol

;                 |______________| -> NewKolSchk

loop_tmr

                                                   ; чтение значения счетчика таймера

           movfw btmr1h

           movwf AARGB1

           movfw btmr1l

           movwf AARGB2

           movfw btmr1h

           subwf AARGB1,W

           btfss 3,0

           goto loop_tmr

           clrf AARGB0

           call FLO32                    ; преобразование данных в

                                                          ; формат с плавающей запятой

                          MOVFW AEXP ;

                          MOVWF BEXP

                          MOVFW AARGB0

                          MOVWF BARGB0

                          MOVFW AARGB1

                          MOVWF BARGB1

                          MOVFW AARGB2

                          MOVWF BARGB2

                          movfw10 FUKol4           

                          MOVWF AEXP

                          movfw10 FUKol3           

                          MOVWF AARGB0

                          movfw10 FUKol2           

                          MOVWF AARGB1

                          movfw10 FUKol1           

                          MOVWF AARGB2

           call FPD32              ; операция деления А/В

           movlw 0x89 ; 1 000 000

           movwf BEXP

           movlw 0x7a ;

           movwf BARGB0

           movlw 0x00 ;

           movwf BARGB1

           movlw 0x00

           movwf BARGB2

           call FPM32             ; операция умножения А*В

                          movfw10 FMM4              

                          MOVWF BEXP

                          movfw10 FMM3              

                          MOVWF BARGB0

                          movfw10 FMM2              

                          MOVWF BARGB1

                          movfw10 FMM1              

                          MOVWF BARGB2

           call FPM32

                          CALL INT32      ; преобразование данных

                                                          ; в целочисленный формат

                              

                          MOVFW AARGB0

                          MOVWF rez2

                          MOVFW AARGB1

                          MOVWF rez1

                          MOVFW AARGB2

                          MOVWF rez0

           movfw CountRaz

           btfsc STATUS,Z

           goto Bot

; вывод старых значений скорости

           movfw v2          

           movwf d_e2

           movwf rez2      

           movfw v1          

           movwf d_e1

           movwf rez1      

           movfw v0          

           movwf d_e0

           movwf rez0      

Bot

           movfw rez2

           movwf d_e2

           movwf v2

           movfw rez1

           movwf d_e1

           movwf v1

           movfw rez0

           movwf d_e0

           movwf v0

inff

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

           movfw rez0      

           btfss STATUS,Z   

           goto chek_ff   

           movfw rez1      

           btfsc STATUS,Z  

           goto zero         

chek_ff

           incf rez0,w        

           btfss STATUS,Z   

           goto tmr_nozero         

           incf rez1,w        

           btfss STATUS,Z   

           goto tmr_nozero         

zero

           call clr_rez     

           clrf d_e3

           clrf d_e2

           clrf d_e1

           clrf d_e0

           clrf btmr1h

           clrf btmr1l      

tmr_nozero                     

; преобразование в десятичный вид

           call hex_dec

           movf rez2,0

           movwf gb2

           movf rez1,0

           movwf gb1

           movf rez0,0

           movwf gb0

           call clr_rez

; преобразование в коды индикатора

           movf gb0,W

           call IndicCode

           movwf iv0

           swapf gb0,W

           call IndicCode

           movwf iv1

           movf gb1,W

           call IndicCode

           movwf iv2

           swapf gb1,W

           call IndicCode

           movwf iv3

           movf gb2,0

           call IndicCode

           movwf iv4

;****************************** измеряем натяжение

acp                                                  ; работа с АЦП

           call clr_rez

                                                          ; установки АЦП

           bsf STATUS,RP0             ; BANK ____1_____

           clrf ADRESL

           bcf STATUS,RP0             ; BANK ____0_____

           clrf ADRESH

   movlw 0x81          ;fosc/32,RA0,go/done-0,adon-1

   movwf ADCON0

           movlw 0x0f

           call PAUSE_AD

           bsf ADCON0,GO

L_CH0

           btfsc ADCON0,GO

           goto L_CH0

           movlw 0x0f

           call PAUSE_AD

           movfw ADRESH            ; считываем значения

           movwf rez1

           bsf STATUS,RP0             ; BANK ____1_____

           movfw ADRESL

           bcf STATUS,RP0             ; BANK ____0_____

           movwf rez0

                                                                    ; вычисляем натяжение

           CLRF AARGB0

           MOVFW rez1

           MOVWF AARGB1

           MOVFW rez0

             MOVWF AARGB2

           call FLO32

                          MOVLW 0x7f  ; B.. = (9999 / (1023*9)) = 1,08602

                          MOVWF BEXP

                          MOVLW 0x0b

                          MOVWF BARGB0

                          MOVLW 0x02

                          movwf BARGB1

                          MOVLW 0xc0

                          movwf BARGB2

                          call FPM32    ; ADC * 1,08602

                          CALL INT32          

           movfw CountRaz

           btfsc STATUS,Z

           goto BotA

; вывод старых значений                         

                          MOVFW p1

                          MOVWF AARGB1

                          MOVFW p0

                          MOVWF AARGB2

BotA

                          MOVFW AARGB1

                          MOVWF p1

                          MOVFW AARGB2

                          MOVWF p0

           movfw p1          

           movwf d_e1

           movwf rez1      

           movfw p0          

           movwf d_e0

           movwf rez0      

           clrf d_e2

           clrf d_e3

           call clr_rez

; проверка пересечений границ по натяжению

           movf d_e0,0

           movwf buf0

           movf d_e1,0

           movwf buf1

           movlw 0

           movwf buf2

           movf p0l,0

           movwf buf_min0

           movf p1l,0

           movwf buf_min1

           movlw 0

           movwf buf_min2

           movf p0h,0

           movwf buf_max0

           movf p1h,0

           movwf buf_max1

           movlw 0

           movwf buf_max2

           bcf f_alarm,0

           btfsc f_data,2

           bsf f_alarm,0

           bcf f_alarm,1

           btfsc f_data,3

           bsf f_alarm,1

           clrf k_gran

           call FIN

           bcf f_data,2

           btfsc f_alarm,0

           bsf f_data,2

           bcf f_data,3

           btfsc f_alarm,1

           bsf f_data,3

           bcf f_alarm,2  

           bcf f_alarm,3  

           btfss f_data,2

           bsf f_alarm,2  

           btfsc f_data,3

           bsf f_alarm,3  

           bcf f_alarm,0

           bcf f_alarm,1

; преобразование в десятичный вид

           call hex_dec

           movf rez2,0

           movwf gb2

           movf rez1,0

           movwf gb1

           movf rez0,0

           movwf gb0

           call clr_rez

; преобразование в коды индикатора

           movf gb0,0

           call IndicCode

           movwf ip1

           swapf gb0,0

           call IndicCode

           movwf ip2

           movf gb1,0

           call IndicCode

           movwf ip3

           swapf gb1,0

           call IndicCode

           movwf ip4

           movf gb2,0

           call IndicCode

           movwf ip0

           movlw 0x44     

           movwf ip0

           call clr_rez

;************************** проверка пересечения границ

alarm 

           movfw f_alarm

           andlw 0xfc

           btfsc STATUS,Z

           goto no_loop

           movwf k_par ; включаем звуковой сигнал и мигание индикатора

           movlw 0x05

           movwf loop_blink

           movlw 0x05

           movwf loop_alarm

               

           movlw 0xff

           movwf k_razr

no_loop

           movfw k_par ;параметры мигания индикатора

           andlw 0xff

           btfsc STATUS,Z

           goto end_alarm

           decf loop_blink,1

           btfss STATUS,Z

           goto dec_alarm

           comf k_razr,1

           movlw 0x05

           movwf loop_blink

           decf loop_alarm,1

dec_alarm

           movfw loop_alarm

           andlw 0xff

           btfss STATUS,Z

           goto end_alarm

           clrf k_par                     ; выключаем звуковой сигнал и мигание индикатора

           clrf k_razr

           clrf loop_blink

           clrf loop_alarm

           movlw 0x30 ;old-04

           movwf PORTA

end_alarm

           bcf PORTC,2

           movfw k_razr

           andlw 0xff

           btfss STATUS,Z

           bsf PORTC,2

           movfw SoundMM

           andlw 0xff

           btfsc STATUS,Z

           goto beg_i

           bsf PORTC,2        

           decf SoundMM,F               ; звуковой сигнал прихода ММ

           movfw SoundMM

           andlw 0xff

           btfsc STATUS,Z

           bcf PORTC,2

beg_i

adc_max

           btfss k_par,3

           goto adc_min

           movlw 0x20          ;пересечение натяжением верхней границы

           movwf PORTA ; - включить светодиод MAX

           goto yes_adc

adc_min

           btfss k_par,2

           goto yes_adc

           movlw 0x10           ;пересечение натяжением нижней границы

           movwf PORTA ;- включить светодиод MIN      

yes_adc

           btfss RegFlag,Sea

           goto end_i

           bcf RegFlag,Sea

;******************************** запись данных в индикатор

           bcf PORTC,7               

                                                  ;данные натяжения записываем в индикатор

           movf ip0,0

           movwf INDICOUT

           call LED

           movf ip1,0

           movwf INDICOUT

           call LED

           movf ip2,0

           movwf INDICOUT

           call LED

           movf ip3,0

           movwf INDICOUT

           call LED

           movf ip4,0

           movwf INDICOUT

           call LED

glub_max

           btfss k_par,5

           goto glub_min

           movlw 0x20          ;пересечение верхней границы по глубине

           movwf PORTA        ; - включить светодиод MAX

           goto yes_glub

glub_min

           btfss k_par,4

           goto yes_glub

           movlw 0x10          ;пересечение нижней границы по глубине

           movwf PORTA ;- включить светодиод MIN      

yes_glub

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

           movf ig0,0

           movwf INDICOUT

           call LED

           movf ig1,0

           movwf INDICOUT

           call LED

           movf ig2,0

           movwf INDICOUT

           call LED

           movf ig3,0

           movwf INDICOUT

           call LED

           movf ig4,0

           movwf INDICOUT

           call LED

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

           movf iv0,0

           movwf INDICOUT

           call LED

           movf iv1,0

           movwf INDICOUT

           call LED

           movf iv2,0

           movwf INDICOUT

           call LED

           movf iv3,0

           movwf INDICOUT

           call LED

           movf iv4,0

           movwf INDICOUT

           call LED

           bsf 7,7             ;

                                          ; LOAD ______|~~~~~~~~~~~

end_i

           clrf rez1

           clrf rez0

;************************ счетчик обновления данных индикатора

           movfw CountRaz

           btfss STATUS,Z

           goto EndRaz

           movlw CountRazDef

           movwf CountRaz

EndRaz

;*********************** проверка ручного ввода цены 1 ММ

           movfw PORTB

           movwf rez0

           btfsc rez0,3

           goto body

           movfw cmm0

           btfss STATUS,Z

           goto cmm_kn

           movfw cmm1

           btfss STATUS,Z

           goto cmm_kn

           movf cshk0,0          ;запомнить цену 1 ММ

           addwf zmm0,F

           btfsc STATUS,C

           incf zmm1,1

           movf cshk1,0

           addwf zmm1,1

           clrf cshk0

           clrf cshk1

           bcf RegFlag,mm_e

           movlw 0x30           ;min-off,max-off

           movwf PORTA

cmm_kn

           goto body

#include match1.inc

; подпрограммы 1 банка

#INCLUDE <FP32.A16>

#include page2.inc

#include inter.inc

#include pprog2.inc

#include match2.inc

#include klass.inc

#include kor.inc

 

   END

Заключение

       Представленные в учебном пособии микропроцессорные системы используют программное обеспечение разработанное с использованием фирменных средств разработки ASM85 и EMU85 для микропроцессора 8085 фирмы Intel и программный пакет MPLAB фирмы Microchip для микропроцессоров PIC 12(16,17,18)FXXX. Приведенные в пособии листинги программ, получены с помощью указанных средств разработки и являются предметом изучения специального лабораторного курса по вычислительным машинам, микропроцессорным средствам и системам.

 

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

1. Проектирование радиоэлектронной аппаратуры на микропроцессорах / Алексенко А.Г., Голицын А.А., Иванников А.Д. – М.: Радио и связь, 1984.-272с.

2.Шевкопляс Б.В. Микропроцессорные структуры. – М.: Радио и связь, 1986.-267с.

3.Гук М.Н. Аппаратные средства IBM PC. – С.-Пб.: Питер,2000.-875с.

4.Томус Ю.Б., Ситдикова И.П. Микропроцессорные средства и системы: Учебное пособие. – Альметьевск.: АлНИ, 1999.-80c.

5.Коган Б.М., Сташин В.В. Основы проектирования микропроцессорных устройств автоматики. – М.: Энергоиздат, 1987.-320с.

6.Пузанков Д.В. Микропроцессорные системы: Учебное пособие. – С.-П.: Изд-во Политехника, 2002.-935с.

7.Олифер В.Г., Олифер Н.А. Компьютерные сети. – С.-П.: Изд-во Питер, 2001.-672с.

8.Пухальский Г.И., Новосельцева Т.Я. Цифровые устройства. – С.-П.: Изд-во Политехника, 1996.-885с.

9.Пухальский Г.И. Проектирование микропроцессорных систем. – С.-П.: Изд-во Политехника, 2001.-544с.

10.Нефедов А.В. Интегральные микросхемы и их зарубежные аналоги: Справочник. – М.: РадиоСофт, 2000.-в 10-ти томах.

11.Новиков Ю.В., Скоробогатов. Основы микропроцессорной техники. – М.: Интернет – университет информационных технологий, 2004.-440с.

 


Дата добавления: 2018-04-15; просмотров: 522; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!