Автор работы: Пользователь скрыл имя, 10 Сентября 2013 в 16:43, реферат
Мировая промышленность выпускает огромную номенклатуру микроконтроллеров. По области применения их можно разделить на два класса : специализированные, предназначенные для применения в какой-либо одной конкретной области (контроллер для телевизора, контроллер для модема, контроллер для компьютерной мышки ) и универсальные, которые не имеют конкретной специализации и могут применяться в самых различных областях микроэлектроники, с помощью которых можно создать как любое из перечисленных выше устройств, так и принципиально новое устройство.
Цель курсовой работы – основываясь на знаниях, полученных при изучении темы «Микроконтроллеры и микропроцессорные системы» разработать микропроцессорную систему цифрового термометра на базе микроконтроллера.
Введение
1. Описание объекта и функциональная спецификация
2. Описание структуры системы
3. Описание ресурсов МК PIC16F628
3.1 Характеристика RISC ядра
3.2 Особенности микроконтроллеров
3.3 Характеристики пониженного энергопотребления
3.4 Периферия
3.5 Расположение выводов
3.6 Особенности структурной организации PIC 16С84
3.7 Обозначение выводов и их функциональное назначение
3.8 Организация памяти данных (ОЗУ)
4. Разработка алгоритма работы устройства
5. Ассемблирование
6. Описание функциональных узлов МПС и алгоритма их взаимодействия
7. Описание выбора элементной базы и работы принципиальной схемы
8. Работа с устройством
Заключение
Список литературы
;=============================
; 12. ПРИЕМ 16 БИТ ОТ DS2.
;=============================
PRIEM2
CALLHYL2;ПОСЫЛ ИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW0xCC;ПРОПУСК НОМЕРА.
CALLPOSIL2;ПОСЫЛ.
MOVLW0xBE;ЧТЕНИЕ ТЕМПЕРАТУРЫ ИЗ БЛОКНОТА.
CALLPOSIL2;ПОСЫЛ.
BCFINTCON,7;ЗАПРЕТ ПРЕРЫВАНИЙ.
CALL PRIE2;НА ПРИЕМ.
MOVFWLSBH;ПЕРЕПИШЕМ ПРИНЯТЫЙ БАЙТ
MOVWFLSB;В МЛАДШИЙ РЕГИСТР.
BCFINTCON,7;ЗАПРЕТ ПРЕРЫВАНИЙ.
CALLPRIE2;И ПРИМЕМ СТАРШИЙ БАЙТ.
GOTOCXET2;НА ПЕРЕСЧЕТ.
PRIE2
MOVLW.8
MOVWFCOUN;ЗАПИШЕМ ЧИСЛО БИТ.
CLRFLSBH;ОБНУЛИМ РЕГИСТР ПРИЕМА.
PRI2
CALLWUX2;ВЫДАЕМ КОРОТКИЙ НОЛЬ И ЖДЕМ ОТКЛИКА.
CALLWXO2;НА ПРИЕМ.
MOVLW.2;ЗАДЕРЖКА
CALLX4;8 МКС.
MOVFWPORTA;ПЕРЕПИШЕМ
MOVWFTEMP;ЗНАЧЕНИЕ ПОРТА.
BTFSSTEMP,DS2;
BCFSTATUS,0;УСТАНОВИМ БИТ ПРИЕМА В НОЛЬ.
BTFSCTEMP,DS2;
BSFSTATUS,0;ИЛИ ЕДИНИЦУ.
RRFLSBH,1;ЗАПИШЕМ В РЕГИСТР.
MOVLW.12;ОБЩАЯ ПАУЗА 60 МКС.
CALLX4;
DECFSZCOUN,1;УМЕНЬШИМ СЧЕТЧИК.
GOTOPRI2;ПОВТОРИМ ПРИЕМ.
BSFINTCON,7;РАЗРЕШАЕМ
RETURN;ВЕРНЕМСЯ.
;=============================
; 13. ПОСЫЛ КОМАНДЫ В DS2.
;=============================
POSIL2
BCFINTCON,7;ЗАПРЕТ ПРЕРЫВАНИЙ.
MOVWFTEMP;ПЕРЕПИШЕМ ВО ВРЕМЕННЫЙ.
MOVLW.8;ЗАПИШЕМ ЧИСЛО БИТ.
MOVWFCOUN;
POSI2
RRFTEMP,1;ВЫТОЛКНЕМ МЛАДШИЙ БИТ.
BTFSSSTATUS,0;ЕСЛИ ОН НУЛЕВОЙ,
GOTOW0_2;ПОШЛЕМ ИМПУЛЬС НУЛЯ.
GOTOW1_2;ИЛИ ЕДИНИЦЫ.
POS2
DECFSZCOUN,1;УМЕНЬШАЕМ
GOTOPOSI2;НА СЛЕДУЮЩИЙ БИТ.
BSFINTCON,7;РАЗРЕШАЕМ ПРЕРЫВАНИЯ.
RETURN;ВОЗВРАТ.
W0_2
CALLWUX2;УСТАНОВИМ ВЫХОД В НОЛЬ.
MOVLW.15;УДЕРЖИВАЕМ 60 МКС.
CALL X4;
CALLWXO2;НА ВХОД = 1 НА ВЫХОДЕ.
GOTOPOS2;ПОВТОРИМ.
W1_2
CALLWUX2;КОРОТКИЙ НУЛЕВОЙ ИМПУЛЬС.
CALLWXO2;НА ВХОД = 1 НА ВЫХОДЕ.
MOVLW.15;УДЕРЖИВАЕМ 60 МКС.
CALLX4;
GOTOPOS2;ПОВТОРИМ.
;=============================
; 14. ВЫДЕЛЕНИЕ 2.
;=============================
CXET2
BTFSCFLAG1,6;ЗАДЕРЖКА ПРИ ВКЛЮЧЕНИИ ВЫПОЛНЕНА.
GOTO$+3;
BSFFLAG1,6;ЗАДЕРЖКА ПРИ ВКЛЮЧЕНИИ.
RETURN;
BCFFLAG1,3;ПО УМОЛЧАНИЮ ЗНАК ПЛЮС.
BTFSCLSBH,3;ЕСЛИ ИНАЧЕ,
BSFFLAG1,3;ТО УСТАНОВИМ МИНУС.
BTFSSFLAG1,3;ЕСЛИ ЗНАК ПЛЮС,
GOTO$+7;ТО НЕ ИНВЕРТИРУЕМ.
COMFLSB,1;ПРОИНВЕРТИРУЕМ МЛАДШИЙ
COMFLSBH,1;И СТАРШИЙ РЕГИСТРЫ ПРИЕМА.
BCFSTATUS,0;
INCFLSB,1;ПРИБАВИМ ЕДИНИЦУ.
BTFSCSTATUS,0;ЕСЛИ ЕСТЬ ПЕРЕНОС,
INCFLSBH,1;ТО УВЕЛИЧИМ СТАРШИЙ РЕГИСТР.
MOVFWLSB;ВЫДЕЛИМ ДЕСЯТЫЕ.
ANDLWB'00001111';ЗАМАСКИРУЕМ.
CALLDESATI;ПЕРЕКОДИРУЕМ С ОКРУГЛЕНИЕМ.
MOVWFDST2;ЗАПИШЕМ В РЕГИСТР ДЕСЯТЫХ.
MOVLW.4;СДВИГОМ ВПРАВО НА 4 РАЗРЯДА
MOVWFCOUN;
BCFSTATUS,0;ВЫДЕЛИМ ЦЕЛУЮ ЧАСТЬ.
RRFLSBH,1;
RRFLSB,1;
DECFSZCOUN,1;
GOTO$-4;
MOVLW.251;ПО УМОЛЧАНИЮ ЗНАК ПЛЮС.
MOVWFSOT2;
BTFSSFLAG1,3;ЕСЛИ ИНАЧЕ,
GOTO$+3;ТО УСТАНОВИМ
MOVLW.253;МИНУС.
MOVWFSOT2;
;=============================
; 15. ВЫБОР СРАВНЕНИЯ ПО СОХРАНЕННОМУ И ИЗМЕРЕННОМУ ЗНАКАМ 2.
;=============================
MAXZ2
MOVFWSOT2;ЕСЛИ СОХРАНЕННЫЙ
SUBWFSOT2X,0;И ИЗМЕРЕННЫЙ ЗНАКИ РАВНЫ,
SKPZ;ТО ОПРЕДЕЛИМ ЗНАК.
GOTO$+5;
BTFSSFLAG1,3;ЕСЛИ ЗНАК
GOTOCOPL2X;ТО СРАВНИМ НА ПРЕВЫШЕНИЕ.
BTFSCFLAG1,3;ЕСЛИ ЗНАК
GOTOCOMI2X;ТО СРАВНИМ НА УМЕНЬШЕНИЕ.
SKPNC;ЕСЛИ ИЗМЕРЕННЫЙ ЗНАК МЕНЬШЕ (+) СОХРАНЕННОГО,
GOTOCOXP2X;ТО СОХРАНИМ ИЗМЕРЕННОЕ ЗНАЧЕНИЕ.
MINZ2
MOVFWSOT2;ЕСЛИ СОХРАНЕННЫЙ
SUBWFSOT2N,0;И ИЗМЕРЕННЫЙ ЗНАКИ РАВНЫ,
SKPZ;ТО ОПРЕДЕЛИМ ЗНАК.
GOTO$+5;
BTFSCFLAG1,3;ЕСЛИ ЗНАК ОТРИЦАТЕЛЬНЫЙ,
GOTOCOPL2N;ТО СРАВНИМ НА ПРЕВЫШЕНИЕ.
BTFSSFLAG1,3;ЕСЛИ ЗНАК
GOTOCOMI2N;ТО СРАВНИМ НА УМЕНЬШЕНИЕ.
SKPC;ЕСЛИ ИЗМЕРЕННЫЙ ЗНАК БОЛЬШЕ (-) СОХРАНЕННОГО,
GOTOCOXP2N;ТО СОХРАНИМ ИЗМЕРЕННОЕ ЗНАЧЕНИЕ.
GOTOBDIN2;НА ЗАПИСЬ ЗНАЧЕНИЙ В РЕГИСТРЫ ИНДИКАЦИИ.
;=============================
; 16. СРАВНЕНИЕ НА MAX 2.
;=============================
COPL2X
MOVFWLSB2X;ЕСЛИ СОХРАНЕННОЕ ЗНАЧЕНИЕ
SUBWFLSB,0;БОЛЬШЕ ИЗМЕРЕННОГО,
BTFSSSTATUS,0;ТО СОХРАНЕНИЯ НЕТ.
GOTOMINZ2;ПРОВЕРИМ НА МИНИМУМ.
BTFSSSTATUS,2;ЕСЛИ РАВЕНСТВО ЦЕЛЫХ,
GOTO$+5;
MOVFWDST2X;ТО ПРОВЕРИМ ДЕСЯТЫЕ.
SUBWFDST2,0;ЕСЛИ ИЗМЕРЕННОЕ БОЛЬШЕ
BTFSSSTATUS,0;ИЛИ РАВНО
GOTOMINZ2;ЕСЛИ МЕНЬШЕ, ТО ПРОВЕРИМ НА МИНИМУМ.
COXP2X
BTFSSFLAG1,3;-0 НЕТ.
GOTO$+4;
TSTFLSB;
BZMINZ2;
MOVFWSOT2;СОХРАНИМ ЗНАК.
MOVWFSOT2X;
MOVFWLSB;СОХРАНИМ НОВОЕ ЗНАЧЕНИЕ
MOVWFLSB2X;ЦЕЛЫХ
MOVFWDST2;И ДЕСЯТЫХ.
MOVWFDST2X;
MOVFWMIN;СОХРАНИМ
MOVWFMIN2X;МИНУТЫ
MOVFWHOU;
MOVWFHOU2X;И ЧАСЫ.
BTFSCFLAG1,3;ПЕРЕПИШЕМ ЗНАК
BSFFLAG2,3;ВО ФЛАГ ХРАНЕНИЯ.
BTFSSFLAG1,3;
BCFFLAG2,3;
GOTOMINZ2;НА ПРОВЕРКУ ПО МИНИМУМУ.
COMI2X
MOVFWLSB2X;ЕСЛИ СОХРАНЕННОЕ ЗНАЧЕНИЕ
SUBWFLSB,0;РАВНО ИЗМЕРЕННОМУ,
BTFSCSTATUS,2;
GOTO$+3;ТО ПРОВЕРИМ ДЕСЯТЫЕ.
BTFSSSTATUS,0;ЕСЛИ БОЛЬШЕ,
GOTOCOXP2X;ТО СОХРАНИМ.
MOVFWDST2X;ПРОВЕРИМ ДЕСЯТЫЕ.
SUBWFDST2,0;ЕСЛИ СОХРАНЕННОЕ МЕНЬШЕ
BTFSCSTATUS,0;ИЛИ РАВНО
GOTOMINZ2;ТО ПРОВЕРИМ НА МИНИМУМ.
GOTOCOXP2X;ИЛИ СОХРАНИМ.
;=============================
; 17. СРАВНЕНИЕ НА MIN 2.
;=============================
COPL2N
MOVFWLSB2N;ЕСЛИ СОХРАНЕННОЕ ЗНАЧЕНИЕ
SUBWFLSB,0;БОЛЬШЕ ИЗМЕРЕННОГО,
BTFSSSTATUS,0;ТО СОХРАНЕНИЯ НЕТ.
GOTOBDIN2;ПЕРЕПИШЕМ.
BTFSSSTATUS,2;ЕСЛИ РАВЕНСТВО ЦЕЛЫХ,
GOTO$+5;
MOVFWDST2N;ТО ПРОВЕРИМ ДЕСЯТЫЕ.
SUBWFDST2,0;
BTFSSSTATUS,0;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО, ТО СОХРАНИМ.
GOTOBDIN2;ПЕРЕПИШЕМ.
COXP2N
BTFSSFLAG1,3;-0 НЕТ.
GOTO$+4;
TSTFLSB;
BZBDIN2;
MOVFWSOT2;СОХРАНИМ ЗНАК.
MOVWFSOT2N;
MOVFWLSB;СОХРАНИМ НОВОЕ ЗНАЧЕНИЕ
MOVWFLSB2N;ЦЕЛЫХ
MOVFWDST2;И ДЕСЯТЫХ.
MOVWFDST2N;
MOVFWMIN;СОХРАНИМ
MOVWFMIN2N;МИНУТЫ
MOVFWHOU;
MOVWFHOU2N;И ЧАСЫ.
BTFSCFLAG1,3;ПЕРЕПИШЕМ ЗНАК
BSFFLAG2,4;ВО ФЛАГ ХРАНЕНИЯ.
BTFSSFLAG1,3;
BCFFLAG2,4;
GOTOBDIN2;ПЕРЕПИШЕМ.
COMI2N
MOVFWLSB2N;ЕСЛИ СОХРАНЕННОЕ ЗНАЧЕНИЕ
SUBWFLSB,0;МЕНЬШЕ ИЗМЕРЕННОГО,
BTFSCSTATUS,2;
GOTO$+3;
BTFSSSTATUS,0;ТО СОХРАНЕНИЯ НЕТ.
GOTOCOXP2N;ИНАЧЕ СОХРАНИМ.
MOVFWDST2N;ПРОВЕРИМ ДЕСЯТЫЕ.
SUBWFDST2,0;ЕСЛИ МЕНЬШЕ
BTFSCSTATUS,0;ИЛИ РАВНО,
GOTOBDIN2;
GOTOCOXP2N;ТО СОХРАНИМ.
;=============================
; 18. ЗАДЕРЖКА МКС, УМНОЖЕННАЯ НА 4.
;=============================
X4
ADDLW-1;
BTFSSSTATUS,2;
GOTO$-2;
RETURN;
;=============================
; 19. ИНИЦИАЛИЗАЦИЯ DS1.
;=============================
INIDS1
CALLHYL1;ПОСЫЛ ИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW0xCC;ПРОПУСК НОМЕРА.
CALLPOSIL1;ПОШЛЕМ.
MOVLW0x4E;РАЗРЕШАЕМ ЗАПИСЬ УСТАНОВКИ 0,1 ГРАДУСА.
CALLPOSIL1;ПОШЛЕМ.
MOVLW0x7D;ВЕРХНИЙ ПРЕДЕЛ
+125. МОЖНО ПОСТАВИТЬ ЛЮБОЕ
CALLPOSIL1;ПОШЛЕМ.
MOVLW0x77;НИЖНИЙ ПРЕДЕЛ -55. ЛЮБОЙ.
CALLPOSIL1;ПОШЛЕМ.
MOVLW0x7F;КОНФИГУРАЦИЯ 11 = 0,1 ГРАДУС.
CALLPOSIL1;ПОШЛЕМ.
CALLHYL1;ПОСЫЛ ИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW0xCC;ПРОПУСК ПОСЫЛА НОМЕРА DS.
CALLPOSIL1;ПОШЛЕМ.
MOVLW0x44;РАЗРЕШАЕМ
CALLPOSIL1;ПОШЛЕМ.
MOVLW.3;ПАУЗА 0,75 СЕК.
MOVWFCOUN;МАКСИМАЛЬНО 750 МС.
SPLU1
MOVLW .255
MOVWF TEMP
PLUS1
MOVLW .255
ADDLW -1
BTFSS STATUS,2
GOTO $-2
DECFSZ TEMP,1
GOTO PLUS1
DECFSZCOUN,1
GOTOSPLU1
GOTOPRIEM1;НА ПРИЕМ ТЕМПЕРАТУРЫ.
HYL1
CALLWUX1;ВЫХОД НУЛЯ.
MOVLW.125;НУЛЕВОЙ ИМПУЛЬС
ADDLW-1;= 500 МКС.
BTFSSSTATUS,2;
GOTO$-2;
CALLWXO1;ВЫХОД ЕДИНИЦЫ.
MOVLW.125;ИМПУЛЬС =
ADDLW-1;500 МКС.
BTFSSSTATUS,2;
GOTO$-2;
RETURN
;=============================
; 20. ИЗМЕНЕНИЕ ВХОДА НА ПРИЕМ/ПЕРЕДАЧУ.
;=============================
WUX1
BCFPORTA,DS1;
BSFSTATUS,5;ПЕРЕХОДИМ В БАНК 1.
BCFTRISA^80H,DS1;НА ВЫХОД.
BCFSTATUS,5;ПЕРЕХОДИМ В БАНК 0.
RETURN
WXO1
BSFSTATUS,5;ПЕРЕХОДИМ В БАНК 1.
BSFTRISA^80H,DS1;НА ВХОД.
BCFSTATUS,5;ПЕРЕХОДИМ В БАНК 0.
RETURN
;=============================
; 21. ПРИЕМ 16 БИТ ОТ DS1.
;=============================
PRIEM1
CALLHYL1;ПОСЫЛ ИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW0xCC;ПРОПУСК НОМЕРА.
CALLPOSIL1;ПОСЫЛ.
MOVLW0xBE;ЧТЕНИЕ ТЕМПЕРАТУРЫ ИЗ БЛОКНОТА.
CALLPOSIL1;ПОСЫЛ.
BCFINTCON,7;ЗАПРЕТ ПРЕРЫВАНИЙ.
CALL PRIE1;НА ПРИЕМ.
MOVFWLSBH;ПЕРЕПИШЕМ ПРИНЯТЫЙ БАЙТ
MOVWFLSB;В МЛАДШИЙ РЕГИСТР.
BCFINTCON,7;ЗАПРЕТ ПРЕРЫВАНИЙ.
CALLPRIE1;И ПРИМЕМ СТАРШИЙ БАЙТ.
GOTOCXET1;НА ПЕРЕСЧЕТ.
PRIE1
MOVLW.8
MOVWFCOUN;ЗАПИШЕМ ЧИСЛО БИТ.
CLRFLSBH;ОБНУЛИМ РЕГИСТР ПРИЕМА.
PRI1
CALLWUX1;ВЫДАЕМ КОРОТКИЙ НОЛЬ И ЖДЕМ ОТКЛИКА.
CALLWXO1;НА ПРИЕМ.
MOVLW.2;ЗАДЕРЖКА
CALLX4;8 МКС.
MOVFWPORTA;ПЕРЕПИШЕМ
MOVWFTEMP;ЗНАЧЕНИЕ ПОРТА.
BTFSSTEMP,DS1;
BCFSTATUS,0;УСТАНОВИМ БИТ ПРИЕМА В НОЛЬ.
BTFSCTEMP,DS1;
BSFSTATUS,0;ИЛИ ЕДИНИЦУ.
RRFLSBH,1;ЗАПИШЕМ В РЕГИСТР.
MOVLW.12;ОБЩАЯ ПАУЗА 60 МКС.
CALLX4;
DECFSZCOUN,1;УМЕНЬШИМ СЧЕТЧИК.
GOTOPRI1;ПОВТОРИМ ПРИЕМ.
BSFINTCON,7;РАЗРЕШАЕМ
RETURN;ВЕРНЕМСЯ.
;=============================
; 22. ПОСЫЛ КОМАНДЫ В DS1.
;=============================
POSIL1
BCFINTCON,7;ЗАПРЕТ ПРЕРЫВАНИЙ.
MOVWFTEMP;ПЕРЕПИШЕМ ВО ВРЕМЕННЫЙ.
MOVLW.8;ЗАПИШЕМ ЧИСЛО БИТ.
MOVWFCOUN;
POSI1
RRFTEMP,1;ВЫТОЛКНЕМ МЛАДШИЙ БИТ.
BTFSSSTATUS,0;ЕСЛИ ОН НУЛЕВОЙ,
GOTOW0_1;ПОШЛЕМ ИМПУЛЬС НУЛЯ.
GOTOW1_1;ИЛИ ЕДИНИЦЫ.
POS1
DECFSZCOUN,1;УМЕНЬШАЕМ
GOTOPOSI1;НА СЛЕДУЮЩИЙ БИТ.
BSFINTCON,7;РАЗРЕШАЕМ ПРЕРЫВАН
RETURN;ВОЗВРАТ.
W0_1
CALLWUX1;УСТАНОВИМ ВЫХОД В НОЛЬ.
MOVLW.15;УДЕРЖИВАЕМ 60 МКС.
CALL X4;
CALLWXO1;НА ВХОД = 1 НА ВЫХОДЕ.
GOTOPOS1;ПОВТОРИМ.
W1_1
CALLWUX1;КОРОТКИЙ НУЛЕВОЙ ИМПУЛЬС.
Информация о работе Микроконтроллеры и микропроцессорные системы