Сделай Сам Свою Работу на 5

ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ





 

С точки зрения программиста, разработанная система управления состоит из программно доступных регистров микроконтроллера и четырёх портов A, В, C и E. Вся работа системы заключается в определении состояния входных портов, выполнения определённых вычислений и выводе данных из микроконтроллера Motorola (ввод данных в порты).

Блок-схема алгоритма работы программы приведена на чертеже БГУИ.100701.027 ПД.

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

1. Проверка состояния кнопок установки температурного режима.

2. Проверка текущей температуры.

3. Проверка состояния двери.

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



При проверке температуры вначале значение текущей температуры считывается с датчика температуры. Далее проверяется выход текущей температуры за границы заданного диапазона. Если текущая температура находится в границах диапазона (температурный режим поддерживается), никаких действий не предпринимается. Если текущая температура выше максимальной для заданного диапазона, включается мотор охлаждения. Если текущая температура ниже минимальной для заданного диапазона, мотор охлаждения отключается.

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



Каждую секунду срабатывает таймер. В обработчике прерывания от таймера выполняются следующие действия:

1. Сброс флага прерывания.

2. Установка таймера еще на 1 секунду.

3. Увеличение времени, в течение которого дверь холодильника открыта (если дверь закрыта, этот счетчик очень скоро обнулится, т.е. так и не достигнет значения 4 минут).

4. Если время, в течение которого дверь холодильника открыта, стало больше 4 минут, то выдается сигнализация открытия двери.

5. Если мотор охлаждения включен, то проверяется, уменьшилась ли температура с момента его включения. Если уменьшилась, то счетчик времени работы мотора охлаждения обнуляется.

6. Если мотор охлаждения включен, температура не уменьшилась, и прошло 4 минуты (к примеру), то это свидетельствует о невозможности поддерживать температурный режим (выходит, что мотор охлаждения неисправен). В таком случае выдается сигнализация невозможности поддержания температурного режима.

Полный листинг программы приведен в приложении. В таблице 1 приведена карта памяти для устройства управления холодильником.

 


Таблица 1 – Карта памяти

ОЗУ $0000 - $0040 $0041 - $0081   Стек Переменные
Регистры и Порты $1000 $1004 $1006 $100A $1025 $1024 $1026 $1007   PORTA PORTB PORTC PORTE TFLG2 TMSK2 PACTL DDRC
ПЗУ $E000 - $E01D $E01E - $E0D3 $E0D4 - $E100 $FFF0 - $FFFE   Основная программа Пользовательские подпрограммы Подпрограмма обработки прерывания Вектора обработки прерываний

 

 


ЗАКЛЮЧЕНИЕ

 

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



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

 

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

 

 

[1] Петровский, А. А. Микропроцессорная техника: Учеб. пособие по курсовому проектированию по дисциплине для студ. спец. 40 02 02 «Электронные вычислительные средства» дневной формы обуч. / А.А. Петровский, М.В. Качинский, А.Б. Давыдов – Мн.: БГУИР, 2005. – 51 с.: ил. ISBN 985-444-837-1

[2] Однокристальная микроЭВМ MC68HC11A8. Техническое описание.

[3] МС68НС11 Microcontrollers – [Электронный ресурс] : MC68HC11 Reference Manual / Motorola Inc. – Электронные данные. Режим доступа : MC68HC11RM.pdf.

 

 

ПРИЛОЖЕНИЕ А

 

Листинг программы:

 

0002 0010 ORG $0010

0004 1001 DDRA EQU $1001

0005 1007 DDRC EQU $1007

0007 1000 PORTA EQU $1000

0008 1004 PORTB EQU $1004

0009 1006 PORTC EQU $1006

0010 100a PORTE EQU $100A

0011 1022 TMSK1 EQU $1022

0012 1024 TMSK2 EQU $1024

0013 1025 TFLG2 EQU $1025

0014 1039 OPTION EQU $1039

0015 100e TCNT EQU $100E

0017 0040 ORG $0040

0018 0040 pStack RMB 64

0020 0070 ORG $0070

0022 * Минимальная температура для заданного режима

0023 0070 00 min_temp FCB 0

0024 * Максимальная температура для заданного режима

0025 0071 00 max_temp FCB 0

0026 * Состояние кнопок установки режима

0027 0072 00 state FCB 0

0028 * Прошлое состояние кнопок

0029 0073 00 last_state FCB 0

0030 * Состояние двери (1 - закрыта, 0 - открыта)

0031 0074 00 door FCB 0

0032 * Состояние мотора охлаждения (1 - включен, 0 - выключен)

0033 * Текущая температура

0034 0075 00 temperature FCB 0

0035 * Температура до включения мотора охлаждения

0036 0076 00 last_temp FCB 0

0037 * Временная переменная

0038 0077 00 temp FCB 0

0039 * Время в течение которого дверь открыта

0040 time_door

0041 * Время с момента запуска мотора охлаждения (нужно для определения невозможности поддержать температурный режим)

0042 time_cooling

0043 * Счетчик

0044 0078 00 counter FCB 0

0045 * Массив модулей максимальных температур для каждого режима (сами значения - ноль или ниже)

0046 0079 00 0a 14 1e arr_max FCB 0, 10, 20, 30

0047 * Массив модулей минимальных температур для каждого режима (сами значения - ниже нуля)

0048 007d 09 13 1d 27 arr_min FCB 9, 19, 29, 39

0050 e000 ORG $E000

0051 START:

0052 * Выделение памяти для стека

0053 e000 8e 00 40 lds #pStack

0054 * Установка предделителя таймера для интервала в 1 секунду

0055 e003 b6 10 24 ldaa TMSK2

0056 e006 8a 03 oraa #%00000011

0057 e008 b7 10 24 staa TMSK2

0058 * Настройка порта C на ввод (датчик температуры)

0059 e00b 86 ff ldaa #%11111111

0060 e00d b7 10 07 staa DDRC

0061 * Установка таймера на 1 секунду

0062 e010 bd e0 bd jsr SET_TIMER

0063 MAIN:

0064 * Проверить состояние кнопок установки режима

0065 e013 bd e0 1e jsr CHECK_BUTTONS

0066 * Проверить температуру

0067 e016 bd e0 4c jsr CHECK_TEMP

0068 * Проверить состояние двери

0069 e019 bd e0 90 jsr CHECK_DOOR

0070 e01c 20 f5 bra MAIN

0072 CHECK_BUTTONS:

0073 * Получение состояния кнопок установки режима

0074 e01e b6 10 0a ldaa PORTE

0075 e021 97 72 staa state

0076 * Получение минимальной и максимальной температуры для установленного режима

0077 e023 bd e0 2e jsr GET_MIN_MAX

0078 * Зажечь светодиод, соответствующий заданному режиму

0079 e026 b7 10 06 staa PORTC

0080 * Присваивание прошлому состоянию текущего

0081 e029 96 72 ldaa state

0082 e02b 97 73 staa last_state

0083 * Возврат из подпрограммы

0084 e02d 39 rts

0086 GET_MIN_MAX:

0087 * Получение номера режима по значению из порта (одна единица, остальные нули)

0088 e02e c6 00 ldab #0

0089 e030 96 72 ldaa state

0090 LOOP:

0091 e032 46 rora

0092 e033 25 03 bcs GET_FROM_ARR

0093 e035 5c incb

0094 e036 20 fa bra LOOP

0097 * Получение минимальной и максимальной температуры по номеру режима

0098 GET_FROM_ARR:

0099 e038 ce 00 7d ldx #arr_min

0100 e03b 18 ce 00 79 ldy #arr_max

0101 e03f 3a abx

0102 e040 18 3a aby

0103 e042 a6 00 ldaa 0,X

0104 e044 97 70 staa min_temp

0105 e046 18 a6 00 ldaa 0,Y

0106 e049 97 71 staa max_temp

0107 e04b 39 rts

0109 CHECK_TEMP:

0110 e04c b6 10 06 ldaa PORTC

0111 e04f 97 75 staa temperature

0112 * Получение старшего (знакового) разряда

0113 e051 84 80 anda #%10000000

0114 e053 81 00 cmpa #0

0115 * Если температура больше нуля, это точно превышение температуры

0116 e055 26 0d bne OUT_MAX

0117 * Проверка температуры на максимум диапазона

0118 e057 96 75 ldaa temperature

0119 e059 91 71 cmpa max_temp

0120 e05b 2d 07 blt OUT_MAX

0121 * Проверка температуры на минимум диапазона

0122 e05d 96 75 ldaa temperature

0123 e05f 91 70 cmpa min_temp

0124 e061 2d 17 blt OUT_MIN

0125 e063 39 rts

0127 * Температура больше максимума

0128 OUT_MAX:

0129 * Если мотор охлаждения включен, ничего не делать

0130 e064 b6 10 00 ldaa PORTA

0131 e067 84 40 anda #%01000000

0132 e069 81 00 cmpa #0

0133 e06b 26 38 bne RETURN

0134 * Запуск мотора охлаждения

0135 e06d b6 10 00 ldaa PORTA

0136 e070 8a 40 oraa #%01000000

0137 e072 b7 10 00 staa PORTA

0138 * Сохранение температуры которая была при включении мотора (нужно для определения неспособности поддержать режим)

0139 e075 96 75 ldaa temperature

0140 e077 97 76 staa last_temp

0141 e079 39 rts

0143 * Температура меньше минимума

0144 OUT_MIN:

0145 * Если мотор охлаждения выключен, ничего не делать

0146 e07a b6 10 00 ldaa PORTA

0147 e07d 84 40 anda #%01000000

0148 e07f 81 00 cmpa #0

0149 e081 27 22 beq RETURN

0150 * Выключение мотора охлаждения

0151 e083 b6 10 00 ldaa PORTA

0152 e086 84 bf anda #%10111111

0153 e088 b7 10 00 staa PORTA

0154 * Обнуление времени, в течение которого включен мотор охлаждения

0155 e08b 86 00 ldaa #0

0156 e08d 97 78 staa time_cooling

0157 e08f 39 rts

0159 * Проверка состояния двери

0160 CHECK_DOOR:

0161 e090 b6 10 00 ldaa PORTA

0162 e093 84 01 anda #%00000001

0163 e095 81 00 cmpa #0

0164 * Если дверь открыта, ничего не делать

0165 e097 27 0c beq RETURN

0166 * Если дверь закрыта, сбросить счетчик времени, в течение которого открыта дверь, и прекратить сигнализацию

0167 e099 7f 00 78 clr time_door

0168 e09c b6 10 00 ldaa PORTA

0169 e09f 84 d7 anda #%11010111

0170 e0a1 b7 10 00 staa PORTA

0171 e0a4 39 rts

0173 RETURN:

0174 e0a5 39 rts

0180 * С момента включения мотора охлаждения температура уменьшилась

0181 TEMP_DEC:

0182 * Обнулить время, в течение которого температура не уменьшалась

0183 e0a6 7f 00 78 clr time_cooling

0184 e0a9 3b rti

0187 * Установить сигнализацию при открытии двери более 4 минут

0188 SIGNAL_DOOR:

0189 e0aa b6 10 00 ldaa PORTA

0190 e0ad 8a 28 oraa #%00101000

0191 e0af b7 10 00 staa PORTA

0192 e0b2 3b rti

0194 * Установить сигнализацию при невозможности поддержания температурного режима

0195 SIGNAL_TEMP:

0196 e0b3 b6 10 00 ldaa PORTA

0197 e0b6 8a 18 oraa #%00011000

0198 e0b8 b7 10 00 staa PORTA

0199 e0bb 3b rti

0201 RET_INT:

0202 e0bc 3b rti

0205 * Установка таймера

0206 SET_TIMER:

0207 e0bd 86 00 ldaa #0

0208 e0bf b7 10 22 staa TMSK1

0209 e0c2 b6 10 24 ldaa TMSK2

0210 e0c5 84 03 anda #%00000011

0211 e0c7 b7 10 24 staa TMSK2

0212 e0ca b6 10 24 ldaa TMSK2

0213 e0cd 8a 80 oraa #%10000000

0214 e0cf b7 10 24 staa TMSK2

0215 e0d2 0e cli

0216 e0d3 39 rts

0218 * Обработка прерывания от таймера

0219 TIMER_TICK:

0220 * Сбросить флаг

0221 e0d4 b6 10 25 ldaa TFLG2

0222 e0d7 8a 80 oraa #%10000000

0223 e0d9 b7 10 25 staa TFLG2

0224 * Установить таймер еще на 1 секунду

0225 e0dc bd e0 bd jsr SET_TIMER

0226 * Увеличение времени, в течение которого открыта дверь

0227 e0df 96 78 ldaa time_door

0228 e0e1 4c inca

0229 e0e2 97 78 staa time_door

0230 * Если дверь открыта в течение 4 минут, сигнализация

0231 e0e4 81 f0 cmpa #240

0232 e0e6 2e c2 bgt SIGNAL_DOOR

0233 * Если мотор охлаждения не включен, выйти

0234 e0e8 b6 10 00 ldaa PORTA

0235 e0eb 84 40 anda #%01000000

0236 e0ed 81 00 cmpa #0

0237 e0ef 27 cb beq RET_INT

0238 * Если мотор охлаждения включен

0239 * Если температура уменьшилась, обнулить время и выйти

0240 e0f1 96 75 ldaa temperature

0241 e0f3 91 76 cmpa last_temp

0242 e0f5 2e af bgt TEMP_DEC

0243 * Если температура не уменьшилась, увеличить счетчик времени, в течение которого температура не уменьшалась

0244 e0f7 96 78 ldaa time_cooling

0245 e0f9 4c inca

0246 e0fa 97 78 staa time_cooling

0247 * Если температура не уменьшалась 4 минуты (мотор охлаждения неисправен), выдать сигнализацию

0248 * о невозможности поддержания температурного режима

0249 e0fc 81 f0 cmpa #240

0250 e0fe 27 b3 beq SIGNAL_TEMP

0251 e100 3b rti

0254 ffde ORG $FFDE

0255 ffde e0 d4 FDB TIMER_TICK

0257 FINISH:

0259 fffe ORG $FFFE

0260 fffe e0 00 FDB START

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.