ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
С точки зрения программиста, разработанная система управления состоит из программно доступных регистров микроконтроллера и четырёх портов 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 Все материалы защищены законодательством РФ.
|