Курсовая работа: Разработка микропроцессорной системы цифрового термометра на базе микроконтроллера
DECFSZ
TEMP,1
GOTO
PLUS
DECFSZCOUN,1
GOTOSPLU
GOTOPRIEM2;НА ПРИЕМ ТЕМПЕРАТУРЫ.
HYL2
CALLWUX2;ВЫХОД НУЛЯ.
MOVLW.125;НУЛЕВОЙ ИМПУЛЬС
ADDLW-1;=
500 МКС.
BTFSSSTATUS,2;
GOTO$-2;
CALLWXO2;ВЫХОД ЕДИНИЦЫ.
MOVLW.125;ИМПУЛЬС =
ADDLW-1;500
МКС.
BTFSSSTATUS,2;
GOTO$-2;
RETURN
;=======================================
; 11.
ИЗМЕНЕНИЕ ВХОДА НА ПРИЕМ/ПЕРЕДАЧУ.
;=======================================
WUX2
BCFPORTA,DS2;
BSFSTATUS,5;ПЕРЕХОДИМ
В БАНК 1.
BCFTRISA^80H,DS2;НА
ВЫХОД.
BCFSTATUS,5;ПЕРЕХОДИМ
В БАНК 0.
RETURN
WXO2
BSFSTATUS,5;ПЕРЕХОДИМ
В БАНК 1.
BSFTRISA^80H,DS2;НА
ВХОД.
BCFSTATUS,5;ПЕРЕХОДИМ
В БАНК 0.
RETURN
;====================================
; 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.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 |