- •Содержание
- •Введение
- •1 Анализ задачи
- •1Функциональная спецификация системы
- •2) Описание интерфейса между системой и пользователем.
- •1.2 Описание интерфейса между системой и пользователем
- •2 Предварительное проектирование системы
- •2.1 Разбиение системы на модули
- •2.2 Соотношение между аппаратными и программными средствами
- •2.3 Построение структурной схемы аппаратной части системы
- •3 Проектирование аппаратных средств системы
- •4 Проектирование программного обеспечения
- •Заключение
- •Список использованных источников
- •Приложение а
Заключение
В ходе выполнения курсового проекта было разработано устройство управления холодильником.
В пояснительной записке описаны структурная и принципиальная схема устройства, разработано программное обеспечение. А также описан алгоритм функционирования устройства управления холодильником. По разработанному алгоритму составлена программа.
Список использованных источников
[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
