Контроллер микроволновой печи на МК К1816ВЕ31

Автор работы: Пользователь скрыл имя, 30 Августа 2011 в 19:40, курсовая работа

Краткое описание

Данный курсовой проект разрабатывается на основе микроконтроллера КР1816ВЕ31. Микросхемы КР1816ВЕ51, КМ1816ВЕ51, КР1816ВЕ31 являются наиболее производительными из выпускаемых отечественной промышленностью 8-разрядных однокристальных микро ЭВМ (ОЭВМ). ОЭВМ обладают встроенной памятью данных пользователя размером 128 байт, часть которой отводится под четыре банка рабочих регистров, причем каждый банк объединяет в себе восемь регистров. Во встроенной памяти данных имеется область 128 бит прямого доступа.

Содержание работы

Введение 5

1. Выбор структуры построения проектируемой системы 7

2. Функциональная схема 9

3. Принципиальная схема 10

4. Алгоритмическое обеспечение 14

5. Программное обеспечение.. 15

6. Расчет потребляемой мощности 16

Заключение 17

Литература. 18

Приложение

Содержимое работы - 5 файлов

ПЗ.docx

— 220.51 Кб (Открыть файл, Скачать файл)

Программа.docx

— 44.93 Кб (Скачать файл)

Код программы на Ассемблер. 

Таблица векторов. 
0000h LJMP START Переход на метку  основной программы
0003h LJMP INT0 Переход на метку  программы обработки прерываний по INT0
0013h LJMP INT1 Переход на метку  программы обработки прерываний по INT1
 
Основная  программа
START: MOV PSW, #00h Выбор нулевого банка  РОН
  MOV R0, #64h Значение температуры  по умолчанию 100, если пользователь нажал ПУСК не выбрав значение температуры
  MOV DPTR, 9800#h Выбор ККД.
  MOV A, #0D3h Команда сброс
  MOVX @DPTR, A  
  NOP Задержка
  NOP  
  NOP  
  MOV A, #01h Установка режима ККД, вывод слева-направо, 8 символов, ввод информации с клавиатуры обнаружением двухклавишных сцеплений, дешифрированное сканирование
  MOVX @DPTR, A  
DOOR: JNB P1.4, START Если дверь не закрыта, то переходим на метку DOOR
  MOV IE, #81 Прерывания по INT0 разрешены, по INT1 запрещены
SPUSK: JB P1.5, PUSK Если пуск нажат то переходим на метку PUSK
  AJMP SPUSK  
PUSK: MOV IE, #00 Запрет прерываний
  MOV DPTR, #0000h Сохранение данных из буфера 1
  MOVX A,@DPTR  
  MOV R5, A  
  MOV DPTR, #0800h Сохранение данных из буфера 2
  MOVX A,@DPTR  
  MOV R6, A  
  MOV DPTR, #1000h Сохранение данных из буфера 3
  MOVX A,@DPTR  
  MOV R7, A  
  MOV R1, #00h Обнуление регистров
  MOV R2, #02h  
  MOV R3, #00h  
  MOV R4, #00h  
  JNB R6.0, TIME0,5 Определение значения времени
  JNB R6.1, TIME1  
  JNB R6.2, TIME1,5  
  JNB R6.3, TIME2  
  JNB R6.4, TIME3  
  JNB R6.5, TIME4  
  JNB R6.6, TIME5  
  JNB R6.7, TIME7  
  JNB R7.0, TIME10  
  JNB R7.1, TIME15  
  JNB R7.2, TIME20  
  JNB R7.3, TIME25  
  JNB R7.4, TIME30  
  JNB R7.5, TIME40  
  JNB R7.6, TIME50  
  JNB R7.7, TIME60  
  JNB R5.5, TIME70  
  JNB R5.6, TIME80  
  JNB R5.7, TIME90  
TIME0,5: MOV PSW, #10h  
  MOV R3, #03h Сохранение значения времени в регистры R1,R2,R3,R4 второго  банка РОН
  AJMP S1  
TIME1: MOV PSW, #10h  
  MOV R2, #01h  
  AJMP S1  
TIME1,5: MOV PSW, #10h  
  MOV R2, #01h  
  MOV R3, #03h  
  AJMP S1  
TIME2: MOV PSW, #10h  
  MOV R2, #02h  
  AJMP S1  
TIME3: MOV PSW, #10h  
  MOV R2, #03h  
  AJMP S1  
TIME4: MOV PSW, #10h  
  MOV R2, #04h  
  AJMP S1  
TIME5: MOV PSW, #10h  
  MOV R2, #05h  
  AJMP S1  
TIME7: MOV PSW, #10h  
  MOV R2, #07h  
  AJMP S1  
TIME10: MOV PSW, #10h  
  MOV R1, #01h  
  AJMP S1  
TIME15: MOV PSW, #10h  
  MOV R1, #01h  
  MOV R2, #05h  
  AJMP S1  
TIME20: MOV PSW, #10h  
  MOV R1, #02h  
  AJMP S1  
TIME25: MOV PSW, #10h  
  MOV R1, #02h  
  MOV R2, #05h  
  AJMP S1  
TIME30: MOV PSW, #10h  
  MOV R1, #03h  
  AJMP S1  
TIME40: MOV PSW, #10h  
  MOV R1, #04h  
  AJMP S1  
TIME50: MOV PSW, #10h  
  MOV R1, #05h  
  AJMP S1  
TIME60: MOV PSW, #10h  
  MOV R1, #06h  
  AJMP S1  
TIME70: MOV PSW, #10h  
  MOV R1, #07h  
  AJMP S1  
TIME80 MOV PSW, #10h  
  MOV R1, #08h  
  AJMP S1  
TIME90 MOV PSW, #10h  
  MOV R1, #09h  
  MOV PSW, #00h Выбор нулевого банка  РОН
S1: JNB R5.0, POWER240 Определение значения мощности
  JNB R5.1, POWER350  
  JNB R5.2, POWER540  
  JNB R5.3, POWER720  
  JNB R5.4, POWER900  
POWER240: MOV R5,#18 Сохранение значения мощности в регистр R5
  AJMP S2  
POWER350: MOV R5,#23  
  AJMP S2  
POWER540: MOV R5,#36  
  AJMP S2  
POWER720: MOV R5,#48  
  AJMP S2  
POWER900: MOV R5,#5A  
S2: MOV DPTR, 2000#h Выбор интервального  таймера
  MOV A, #34h Управляющее слово  для нулевого канала
  MOVX @DPTR, A Отправка управляющего слова.
  MOV A, #54h Управляющее слово  для  первого канала
  MOVX @DPTR, A Отправка управляющего слова.
  MOVX DPTR, #2300h Запись коэффициента пересчета для канала 0
  MOV A, #40h   9C40h -> 40 000
  MOVX @DPTR, A  
  MOV A, #9Ch  
  MOVX @DPTR, A  
  MOVX DPTR, #2100h Запись коэффициента пересчета для канала 1
  MOV A, #05h 05h -> 5
  MOVX @DPTR, A  
IT: SETB P1.3 Запуск таймера
  MOVX DPTR, #3000h Отправка мощности на ЦАП
  MOV A, R5  
  MOVX @DPTR, A  
  MOV IE, #84 Прерывания по INT1 разрешены
  MOVX DPTR,2800h Определение текущего значения температуры.
  MOVX A, DPTR  
F0: JB P1.0, F1 Ожидание преобразования.
  AJMP F0  
F1: SUBB A,R0 Сравнение текущего значения с требуемым
  JZ OFF  
  SETB P1.6 Включение нагревателя
  AJMP DOOR2  
OFF: CLP P1.6 Выключение нагревателя
DOOR2: JB P1.4, IT Если дверь закрыта то переходим на метку IT
  MOV IE, #00 Запрет прерываний
  CLP P1.3 Запрещение работы каналов таймера
  CLP P1.6 Выключение нагревателя
  AJMP DOOR2  
Программа обработки прерываний по INT0.
INT0: PUSH A  
  PUSH PSW  
  PUSH  DPL   
  PUSH  DPH  
  MOV PSW, #00h Выбор нулевого банка  РОН
  MOV DPTR, 9800#h Выбор ККД.
  MOV PSW, #00h Выбор нулевого банка  РОН, в нем будут производиться  действия по обработке клавиатуры.
  MOV A, #50h Отправляем в  ККД слово, по которому ККД выдаст код нажатой клавиши 
  MOVX @DPTR, A Отправление слова  в ККД
  MOV R0, A Запись кода нажатой  клавиши в регистр R0
  MOV A, #0FFh Проверка для  кнопки «100»
  ANL A, R0  
  JZ L1 Прыгаем в метку  «L1» если кнопка “100” была нажата.
  MOV A, #0FEh Проверка для  кнопки «120»
  ANL A, R0  
  JZ L2 Прыгаем в метку  «L2» если кнопка “120” была нажата.
  MOV A, #0FDh Проверка для  кнопки «140»
  ANL A, R0  
  JZ L3 Прыгаем в метку  «L3» если кнопка “140” была нажата.
  MOV A, #0FCh Проверка для  кнопки «160»
  ANL A, R0  
  JZ L4 Прыгаем в метку  «L4» если кнопка “160” была нажата.
  MOV A, #0FBh Проверка для  кнопки «180»
  ANL A, R0  
  JZ L5 Прыгаем в метку  «L5» если кнопка “180” была нажата.
  MOV A, #0FAh Проверка для  кнопки «200»
  ANL A, R0  
  JZ L6 Прыгаем в метку  «L6» если кнопка “200” была нажата.
  MOV A, #0F9h Проверка для  кнопки «220»
  ANL A, R0  
  JZ L7 Прыгаем в метку  «L7» если кнопка “220” была нажата.
  MOV A, #0F8h Проверка для  кнопки «250»
  ANL A, R0  
  JZ L8 Прыгаем в метку  «L8» если кнопка “250” была нажата.
     
L1: MOV R0, #64h В R0 сохраняем значение нажатой клавиши.
  AJMP EXIT  
L2: MOV R0, #78h В R0 сохраняем значение нажатой клавиши.
  AJMP EXIT  
L3: MOV R0, #8Сh В R0 сохраняем значение нажатой клавиши.
  AJMP EXIT  
L4: MOV R0, #0A0h В R0 сохраняем значение нажатой клавиши.
  AJMP EXIT  
L5: MOV R0, #0B4h В R0 сохраняем значение нажатой клавиши.
  AJMP EXIT  
L6: MOV R0, #0C8h В R0 сохраняем значение нажатой клавиши.
  AJMP EXIT  
L7: MOV R0, #0DCh В R0 сохраняем значение нажатой клавиши.
  AJMP EXIT  
L8: MOV R0, #0FAh В R0 сохраняем значение нажатой клавиши.
EXIT: POP DPH  
  POP DPL  
  POP PSW  
  POP A  

Программа обработки прерываний по INT1.

INT1: PUSH A Сохранение  контекста основной программы
  PUSH PSW
  PUSH  DPL 
  PUSH  DPH
  MOV PSW, #10h Выбор второго банка  РОН
  MOV A,R4 Если секунда = 0, то переходим на метку SEC
  JZ SEC  
  DEC R4 Декремент секунд.
  AJMP SHOWTIME Переход на метку  отображения
SEC: MOV R4,#09h Секунда = 9
  MOV A,R4 Если десяток  секунды = 0, то переходим на метку MIN
  JZ MIN  
  DEC R3 Декремент десятка  секунд.
  AJMP SHOWTIME Переход на метку  отображения
MIN: MOV R3,#09h десятки секунд= 5
  MOV A,R2 Если минуты = 0, то переходим на метку DMIN
  JZ DMIN  
  DEC R2 Декремент минут.
  AJMP SHOWTIME Переход на метку  отображения
DMIN: MOV R3,#09h минуты= 9
  MOV A,R1 Если десяток  минуты 0, то переходим на метку STOP.
  JZ STOP  
  DEC R1 Декремент десятка  секунд.
  AJMP SHOWTIME Переход на метку  отображения
STOP: SETB P1.7 Программная установка кнопки СТОП
  AJMP START Переход в начало программы.
SHOW: MOV 31H, R1 Сохраняем содержимое регистра по адресу 31H
  ACALL KOD Вызываем подпрограмму определения кода цифр для вывода на дисплей
  MOV R0, 32H В регистр R0 сохраняем  код цифры.
  MOV 31H, R2 Сохраняем содержимое регистра по адресу 31H
  ACALL KOD Вызываем подпрограмму определения кода цифр для вывода на дисплей
  MOV R5, 32H В регистр R5 сохраняем  код цифры.
  MOV 31H, R3 Сохраняем содержимое регистра по адресу 31H
  ACALL KOD Вызываем подпрограмму определения кода цифр для вывода на дисплей
  MOV R6, 32H В регистр R6 сохраняем  код цифры.
  MOV 31H, R4 Сохраняем содержимое регистра по адресу 31H
  ACALL KOD Вызываем подпрограмму определения кода цифр для вывода на дисплей
  MOV R7, 32H В регистр R7 сохраняем  код цифры.
  MOV DPTR, 9800#h Выбор ККД.
  MOV A, #90h Третье слово  ККД, для вывода на дисплей.
  MOVX @DPTR, A Отправляем третье слово в ККД
  MOV DPTR, 1800#h  
  MOV A,R1 Загрузка данных для отображения в аккумулятор.
  MOVX @DPTR, A Отправка  в ККД данных.
  MOV A,R5 Загрузка данных для отображения в аккумулятор.
  MOVX @DPTR, A Отправка в ККД  данных.
  MOV A,R6 Загрузка данных для отображения в аккумулятор.
  MOVX @DPTR, A Отправка в ККД  данных.
  MOV A,R7 Загрузка данных для отображения в аккумулятор.
  MOVX @DPTR, A Отправка в ККД  данных.
  MOV PSW, #00h Выбор нулевого банка  РОН
  POP DPH  
  POP DPL  
  POP PSW  
  POP A  
  RETI Возврат из подпрограммы аппаратных прерываний.
Подпрограмма  определения кода для вывода на дисплей. 
КOD:    
  MOV A, #00h Сравниваем значение хранящееся по адресу 31H с "0"
  XRL A, 31H  
  JNZ K1 Если значение не равно "0", то переходим на метку  К1
  MOV 32H, #00h Сохраняем код цифры 0 для вывода на дисплей по адресу 32H
K1: RET Возвращаемся в  программу обработки прерываний.
  MOV A, #01h Сравниваем значение хранящееся по адресу 31H с "1"
  XRL A, 31H  
  JNZ K2 Если значение не равно "1", то переходим на метку  К2
  MOV 32H, #06h Сохраняем код цифры 1 для вывода на дисплей по адресу 32H
К2: RET Возвращаемся в  программу обработки прерываний.
  MOV A, #02h Сравниваем значение хранящееся по адресу 31H с "2"
  XRL A, 31H  
  JNZ K3 Если значение не равно "2", то переходим на метку  К3
  MOV 32H, #5Bh Сохраняем код цифры 2 для вывода на дисплей по адресу 32H
К3: RET Возвращаемся в  программу обработки прерываний.
  MOV A, #03h Сравниваем значение хранящееся по адресу 31H с "3"
  XRL A, 31H  
  JNZ K4 Если значение не равно "3", то переходим на метку  К4
  MOV 32H, #4Fh Сохраняем код цифры 3 для вывода на дисплей по адресу 32H
К4: RET Возвращаемся в  программу обработки прерываний.
  MOV A, #04h Сравниваем значение хранящееся по адресу 31H с "4"
  XRL A, 31H  
  JNZ K5 Если значение не равно "4", то переходим на метку  К5
  MOV 32H, #66h Сохраняем код цифры 4 для вывода на дисплей по адресу 32H
К5: RET Возвращаемся в  программу обработки прерываний.
  MOV A, #05h Сравниваем значение хранящееся по адресу 31H с "5"
  XRL A, 31H  
  JNZ K6 Если значение не равно "5", то переходим на метку  К6
  MOV 32H, #6Dh Сохраняем код цифры 5 для вывода на дисплей по адресу 32H
К6: RET Возвращаемся в  программу обработки прерываний.
  MOV A, #06h Сравниваем значение хранящееся по адресу 31H с "6"
  XRL A, 31H  
  JNZ K7 Если значение не равно "6", то переходим на метку  К7
  MOV 32H, #7Ch Сохраняем код цифры 6 для вывода на дисплей по адресу 32H
К7: RET Возвращаемся в  программу обработки прерываний.
  MOV A, #07h Сравниваем значение хранящееся по адресу 31H с "7"
  XRL A, 31H  
  JNZ K8 Если значение не равно "7", то переходим на метку  К8
  MOV 32H, #07h Сохраняем код цифры 7 для вывода на дисплей по адресу 32H
К8: RET Возвращаемся в  программу обработки прерываний.
  MOV A, #08h Сравниваем значение хранящееся по адресу 31H с "8"
  XRL A, 31H  
  JNZ K9 Если значение не равно "8", то переходим на метку  К9
  MOV 32H, #7Fh Сохраняем код цифры 8 для вывода на дисплей по адресу 32H
К9: RET Возвращаемся в  программу обработки прерываний.
  MOV 32H, #67h Сохраняем код цифры 9 для вывода на дисплей по адресу 32H
  RET Возвращаемся в  программу обработки прерываний.

ПС.vsd

— 393.50 Кб (Скачать файл)

Спецификация.doc

— 83.50 Кб (Открыть файл, Скачать файл)

ФС.vsd

— 336.50 Кб (Скачать файл)

Информация о работе Контроллер микроволновой печи на МК К1816ВЕ31