Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Исправленный / Пояснительная записка_МПС.doc
Скачиваний:
24
Добавлен:
29.02.2016
Размер:
2.89 Mб
Скачать

3.2 Описание общего алгоритма работы системы

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

После нажатия кнопки «Start» происходит настройка таймера на режим 1, установка времени 50 мс, разрешение прерываний от таймера T0, источников int0 и int1. Затем происходит инициализация, она включает в себя настройку портов в исходное состояние. Затем идет подпрограмма работы с АЦП, то есть снимаются значения приходящие с АЦП. После того эти значения обрабатываются в соответствии с таблицей сопротивлений терморезистора PT100-2, обработанные данные записываются в память контроллера. Дальше рассчитываются мгновенные значения температуры, путем сравнения данных с АЦП с значениями сохраненных в специальную строковую константу. Потом проверяются нажатые кнопки, если swittch=0, то проверяются данные по граничным условиям, если полученные значения не превышают номинальных(запланированных программно), то вызывается подпрограмма подготовки вывода этих данных на ССИ, и соответственно затем значения температуры выводятся на ССИ. Если же значения превысили или получились меньше запланированных, то выводится сообщение об ошибке erro( по ирландски ошибка). Если же была нажата кнопка SB3(switch=5), то вызывается подпрограмма расчета среднесуточной температуры, затем происходит подготовка значений для вывода на ССИ и соответственно вывод на ССИ. После вывода на ССИ программа возвращается в подпрограмму работы с АЦП и начинает работать дальше по циклу описанному выше. То есть происходит зацикливание программы. Алгоритмы системы и обработки прерываний представлены на рисунке 18 и в графической части проекта.

Рисунок 18 – алгоритмы работы системы и обработки прерываний

3.3 Разработка текста программы

Программа написана на языке С и отлажена в среде PV32. Программа написанная на языке С меньше по объему, но зато обладает и меньшим быстродействием по сравнению с ассемблером. Для данного устройства быстродействие не принципиально важно.

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

sfrP1=0x90, гдеP1 – присваемое имя регистра с адресом 0x90.

Объявляются порты P1,P2,P0,P3, регистры таймераT0 (TH0,TL0), регистры прерываний и приоритета прерыванийIE,IP, регистры управления таймеромTMOD,TCONи отдельные биты всех портов для управления устройствами подключенных к контроллеру через отдельные входы портов.

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

Теперь непосредственно по алгоритму программы(главная функция main).

По алгоритму первым шагом является инициализация. Она включает выставление P30,P31,P36,P37 – эти порты подсоедины к катодом ССИ и будут задействованы в подпрограмме вывода на ССИ методом динамической индикации. Также настраивается таймер Т0 в режим 1, устанавливается приоритет прерываний отint1 иint0, и разрешаются все виды прерываний.

Далее идет подпрограмма обработки данных из АЦП, ее можно разбить на две части: подача нужной последовательности сигналов для того чтобы произошло преобразование и подача нужной последовательности сигналов чтобы считать информацию хранящуюся в регистре АЦП. Рабочие диаграммы представлены в [2]. Так как данные преобразованные в АЦП сохраняются в два порта, то мы выполняем преобразование двух восьмиразрядных слов в одно двенадцатиразрядное. Данные считываются и сохраняются в переменную типа

shortres.

После вызывается подпрограмма расчета температуры. Смысл ее заключается в следующем: рассчитывается число образующееся на выходах АЦП D0-D11 (соответственно через напряжение поступающие на вход АЦП) для каждого значения сопротивленияPt-100 соответствующего определенной температуре и заносится в строковую константуBufferAcp[51], а значения соответствующей ему температуры заносится вBufferTemper[51]. За тем происходит сравнение получаемого после преобразования с АЦП значения (res) сBufferAcpи при совпадении этих чисел переменнойnadoприсваивается соответствующее значение температуры изBufferTemper. Так же в данной подпрограмме проверяется диапазон поступающего напряжения с АЦП, если число больше или меньше предусмотренного программой диапазона , то вызывается подпрограммаvivod3 , которая выводит сообщение об ошибке на ССИ.

Что касается расчета среднесуточной температуры, то он организован с помощью таймера и подпрограммы srednesutochnoe. С помощью таймера отсчитывается интервал времени равный 12 часов, после в перемеменнуres2 заносится значение переменнойnado, а вres3 сохраняется предыдущее значениеres2. Также сохраняются знаки с помощью переменныхznakиznak2.

В подпрограмме srednesutochnoeрассчитывается среднесуточное значение в зависимости от знака, после вызывается программа подготовки вывода на ССИ, и подпрограммаvivod1 илиvivod2 взависимости от того есть ли минус или нет.

Подпрограмма подготовки вывода числа на ССИ предусматривает разбиение числа на 100, 10,1 и сохранение этих разрядов в inbuf[], с помощью константыchartable[], в которой хранятся значения чисел, выводимых на индикатор.

Что касается подпрограмм vivod1,vivod2,vivod3 , то они служат для вывода значений на ССИ методом динамической индикации, то есть поочередно на катоды ССИ подается напряжение и выставляется на порт Р1 нужное число, с помощью которого загораются нужные сегменты индикатора, образующие цифру, символ. Таким образомvivod1 выводит без знаковое трехразрядное число,vivod2 – знаковое трехразрядное число,vivod3 - сообщение об ошибкеerro.

Таким образом работает программа. Она может быть легко переделана под любой терморезистор с его таблицей сопротивлений, путем замены значений в BufferAcpиBuffferTemperи растановки новых приделов ошибки.

Соседние файлы в папке Исправленный