Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zapiska_27.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
339.97 Кб
Скачать

Заключение

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

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

Список использованных источников

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

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

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

Приложение а

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

0001

0002 0010 ORG $0010

0003

0004 1001 DDRA EQU $1001

0005 1007 DDRC EQU $1007

0006

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

0016

0017 0040 ORG $0040

0018 0040 pStack RMB 64

0019

0020 0070 ORG $0070

0021

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

0049

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

0071

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

0085

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

0095

0096

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

0108

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

0126

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

0142

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

0158

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

0172

0173 RETURN:

0174 e0a5 39 rts

0175

0176

0177

0178

0179

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

0181 TEMP_DEC:

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

0183 e0a6 7f 00 78 clr time_cooling

0184 e0a9 3b rti

0185

0186

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

0193

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

0200

0201 RET_INT:

0202 e0bc 3b rti

0203

0204

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

0217

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

0252

0253

0254 ffde ORG $FFDE

0255 ffde e0 d4 FDB TIMER_TICK

0256

0257 FINISH:

0258

0259 fffe ORG $FFFE

0260 fffe e0 00 FDB START

32

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]