Рефераты. Автомобильные часы-термометр-вольтметр на базе микроконтроллера

RETLWB'11101100';2

RETLWB'10101110';3

RETLWB'00110110';4

RETLWB'10111010';5

RETLWB'11111010';6

RETLWB'00001110';7

RETLWB'11111110';8

RETLWB'10111110';9

RETLWB'00000000';10-> ПУСТО.

RETLWB'00100000';11-> ПРОЧЕРК.

RETLWB'10000000';12-> ПРОЧЕРК.

;=================================================

; 4. ТАБЛИЦА ПЕРЕКОДИРОВКИ КУРСОРА.

;=================================================

KYPCY

MOVFWKYPC;

ADDWFPCL,1;

RETURN;НЕТ КУРСОРА.

RETLWB'00000100';3

RETLWB'00001000';4

RETLWB'00010000';5

RETLWB'00100000';6

RETLWB'01000000';7

;===================================================

; 5. ВЫБОР РЕЖИМА ИНДИКАЦИИ.

;===================================================

VUBOR

MOVFWPEID;ИЗМЕНЯЕМ РЕЖИМ ИНДИКАЦИИ.

ADDWFPCL,1;

GOTOINDH;ИНДИКАЦИЯ ЧАСОВ.

GOTOINDT;ТАЙМЕРА.

GOTOINDU;НАПРЯЖЕНИЯ.

;======================================================

; 6. ВЫБОР РАЗРЯДА УСТАНОВКИ.

;======================================================

YCT

BTFSCPORTA,YC;ЕСЛИ КНОПКА "РЕЖИМ" НАЖАТА,

RETURN

MOVFWKYPC;ТО ПО КУРСОРУ

ADDWFPCL,1;ВЫБИРАЕМ РАЗРЯД УСТАНОВКИ.

RETURN;НЕТ КУРСОРА.

GOTOYC0;МИНУТЫ.

GOTOYC1;ДЕСЯТКИ МИНУТ.

GOTOYCE;ОБНУЛЕНИЕ.

GOTOYC2;ЧАСЫ.

GOTOYC3;ДЕСЯТКИ ЧАСОВ.

;=====================================================

; 7. ТАБЛИЦЫ ПЕРЕВОДА ДЕСЯТКОВ В ДВОИЧНОЕ ЧИСЛО.

;=====================================================

DEBIN

ADDWFPCL,1;

RETLW.0

RETLW.10

RETLW.20

RETLW.30

RETLW.40

RETLW.50

RETLW.60

RETLW.70

RETLW.80

RETLW.90

;======================================================

; 8. ПРОВЕРКА НАЖАТЫХ КНОПОК УСТАНОВКИ.

;======================================================

KHOP

BTFSSFLAG,1;ЕСЛИ НЕТ РЕЖИМА ЧАСОВ,

GOTO$+5;ТО КУРСОР НЕ МЕНЯЕТСЯ.

BTFSSPORTA,KY;ПРИ НАЖАТОЙ КНОПКЕ

CALLKYPCOP;ИДЕМ НА УСТАНОВКУ КУРСОРА.

BTFSCFLAG,7;ЕСЛИ ИДЕТ УСТАНОВКА,

GOTOVUBOR;ТО РЕЖИМ НЕ МЕНЯЕТСЯ.

BTFSCPORTA,YC;ЕСЛИ КНОПКА "РЕЖИМ" НАЖАТА,

GOTOVUBOR;ИЛИ ИДЕМ НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.

INCFPEID,1;ИЗМЕНЕНИЕ РЕЖИМА ИНДИКАЦИИ.

MOVLW.3;3 РЕЖИМОВ ИНДИКАЦИИ.

SUBWFPEID,0;ЕСЛИ БОЛЬШЕ,

BTFSSSTATUS,2;ТО ПОЙДЕМ НА СБРОС.

GOTOVUBOR;НА ЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.

CLRFPEID;СБРОС РЕЖИМА.

GOTOVUBOR;НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.

RETURN

;=================================================

; 9. УСТАНОВКА КУРСОРА (ВЫБОР РАЗРЯДА УСТАНОВКИ).

;=================================================

KYPCOP

BSFFLAG,7;УСТАНОВКА.

BCFFLAG,4;СБРОС ФЛАГА НЕТ КУРСОРА.

INCFKYPC,1;ПРИБАВИМ ЕДИНИЦУ В КУРСОР.

MOVLW.6;НЕ БОЛЕЕ 5.

SUBWFKYPC,0;

SKPC;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО 6,

RETURN;

CLRFKYPC;ОБНУЛИМ.

BSFFLAG,4;НЕТ КУРСОРА В ПОЛЕ.

BCFFLAG,7;НЕТ УСТАНОВКИ.

RETURN;

;=========================================

; 10. ВВОД КУРСОРА В МЛ. РАЗРЯД РЕГИСТРОВ.

;=========================================

KYPVO

BTFSCFLAG,4;ЕСЛИ НЕТ КУРСОРА,

RETURN;ТО ВЕРНЕМСЯ.

CALLKYPCY;УСТАНОВИМ РЕЖИМЫ.

MOVWFKYPCI;В КУРСОР ИНДИКАЦИИ.

RRFKYPCI,1;ЗАПОЛНИМ БИТ "С".

ADDCFR1,1;ПЕРЕНЕСЕМ В РЕГИСТР ИНДИКАЦИИ.

RRFKYPCI,1;ЗАПОЛНИМ БИТ "С".

ADDCFR2,1;ПЕРЕНЕСЕМ В РЕГИСТР ИНДИКАЦИИ.

RRFKYPCI,1;ОСТАЛЬНЫЕ РЕГИСТРЫ

ADDCFR3,1;ЗАПОЛНЯЕМ АНАЛОГИЧНО.

RRFKYPCI,1;

ADDCFR4,1;

RRFKYPCI,1;

ADDCFR5,1;

RRFKYPCI,1;

ADDCFR6,1;

RRFKYPCI,1;

ADDCFR7,1;

RRFKYPCI,1;

ADDCFR8,1;

RETURN;

;=============================================

; 11. ВЫВОД НА ИНДИКАЦИЮ.

;=============================================

IND

CALLKYPVO;ВВЕДЕМ КУРСОРЫ В РЕГИСТРЫ ИНДИКАЦИИ.

MOVFWZPT;ЗНАЧЕНИЯ ЗАПЯТЫХ ПЕРЕПИШЕМ

MOVWFTZPT;ВО ВРЕМЕННЫЙ РЕГИСТР.

BSFFLAG1,2;ЗАПЯТАЯ ПЕРЕДАНА.

BCFPORTC,DIN;ДАННЫЕ РАВНЫ НУЛЮ.

BCFPORTC,LOAD;НАЧАЛО ПЕРЕДАЧИ (LOAD=0).

RRFTZPT,1;ВЫТОЛКНЕМ ОЧЕРЕДНУЮ ЗАПЯТУЮ.

CALLVUV0;

BCFFLAG1,2;ЗАПЯТАЯ ПЕРЕДАНА.

MOVLWR1;ЗАПИШЕМ АДРЕС ПЕРВОГО РЕГИСТРА ИНДИКАЦИИ.

MOVWFFSR;

MOVFWINDF;ЗНАЧЕНИЕ ПЕРВОГО РЕГИСТРА

MOVWFTEMP;ПЕРЕПИШЕМ ВО ВРЕМЕННЫЙ.

BCFPORTC,LOAD;НАЧАЛО ПЕРЕДАЧИ (LOAD=0).

CALLVUVOD;НА ВЫВОД.

POVT

BSFFLAG1,2;ЗАПЯТАЯ ПЕРЕДАНА.

RRFTZPT,1;ВЫТОЛКНЕМ ОЧЕРЕДНУЮ ЗАПЯТУЮ.

CALLVUV0;

BCFFLAG1,2;ЗАПЯТАЯ ПЕРЕДАНА.

INCFFSR,1;УВЕЛИЧИМ АДРЕС РЕГИСТРА ИНДИКАЦИИ.

MOVFWINDF;ПЕРЕПИШЕМ ЕГО ЗНАЧЕНИЕ

MOVWFTEMP;ВО ВРЕМЕННЫЙ.

CALLVUVOD;НА ВЫВОД.

INCFCOUZ,1;ПОДСЧИТАЕМ ЧИСЛО

MOVLW.7;ПЕРЕДАВАЕМЫХ

SUBWFCOUZ,0;ЗАПЯТЫХ.

BTFSCSTATUS,2;

CLRFCOUZ;ОБНУЛИМ СЧЕТЧИК.

BTFSSSTATUS,2;

GOTOPOVT;ПОВТОРИМ ВЫВОД.

BSFPORTC,LOAD;КОНЕЦ ПЕРЕДАЧИ.

RETURN;

CUNX

BSFPORTC,DCLK;СИНХРОТМПУЛЬС = 1.

CALLPAUS;ПАУЗА.

BCFPORTC,DCLK;СИНХРОИМПУЛЬС = 0.

RETURN;ВОЗВРАТ.

PAUS

MOVLW .5;МОЖНО ПОДБИРАТЬ ЗНАЧЕНИЕ ПАУЗЫ.

ADDLW -1;ПАУЗА = ЧИСЛО Х 4 МКС.

BTFSS STATUS,2;

GOTO $-2;ПОВТОРИМ.

RETURN;ВЕРНЕМСЯ.

VUVOD

RRFTEMP,1;СДВИНЕМ ВПРАВО.

VUV0

BTFSSSTATUS,0;ПО НУЛЕВОМУ РАЗРЯДУ

BCFPORTC,DIN;УСТАНАВЛИВАЕМ ДАННЫЕ

BTFSCSTATUS,0;В 0 ИЛИ 1.

BSFPORTC,DIN;

CALLCUNX;СИНХРОНИЗИРУЕМ ДАННЫЕ.

BTFSCFLAG1,2;ЕСЛИ ЗАПЯТАЯ ПЕРЕДАНА,

RETURN;ТО ВЕРНЕМСЯ.

INCFCOU,1;ПОДСЧИТАЕМ ЧИСЛО БИТ.

MOVLW.8;

SUBWFCOU,0;

BTFSSSTATUS,2;ЕСЛИ НЕ ВСЕ БИТЫ ПЕРЕДАНЫ,

GOTOVUVOD;ПОВТОРИМ ВЫВОД.

CLRFCOU;ОБНУЛИМ СЧЕТЧИК.

RETURN;

;======================================================

; 12. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.

;======================================================

PRER

MOVWFWTEMP;СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W,

MOVFWSTATUS;STATUS,

MOVWFSTEMP;

MOVFWFSR;FSR.

MOVWFFTEMP;

BSFFLAG1,1;1 СЕК ЦИКЛА.

CALLS1;ПОДСЧИТАЕМ ВРЕМЯ.

BTFSCFLAG,2;

CALLTAIM;

REPER ;ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.

MOVFWSTEMP;ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:

MOVWFSTATUS;STATUS,

MOVFWFTEMP;

MOVWFFSR;FSR,

MOVFWWTEMP;W.

BCFINTCON,2;СБРАСЫВАЕМ ФЛАГ ПРЕРЫВАНИЯ ОТ TMR0.

RETFIE;ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.

;=============================================

; 13. ПОДСЧЕТ ВРЕМЕНИ.

;=============================================

S1

BTFSCFLAG1,5;

GOTO$+8;

BTFSSFLAG1,4;

GOTO$+6;

BTFSCPORTC,0;СМЕНА ВКЛЮЧЕНИЯ ЗУММЕРА.

GOTO$+3;

BSFPORTC,0;ВКЛЮЧИМ СИГНАЛ.

GOTO$+2;

BCFPORTC,0;

MOVLW.9;ЕСЛИ УЖЕ 9 СЕКУНД,

SUBWFCL,0;

BCSH;ИДЕМ НА СРАВНЕНИЕ ДЕСЯТКОВ СЕКУНД.

INCFCL,1;ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.

RETURN

SH

CLRFCL;ОБНУЛИМ СЕКУНДЫ.

MOVFWCH;ЕСЛИ ДЕСЯТКИ СЕКУНД

ADDLW-5H;РАВНЫ 5,

BZMIL;ИДЕМ СРАВНИВАТЬ МИНУТЫ.

INCFCH,1;ИНАЧЕ УВЕЛИЧИМ ДЕСЯТКИ СЕКУНД.

RETURN

MIL

CLRFCH;ОБНУЛИМ ДЕСЯТКИ СЕКУНД.

MOVFWML;ЕСЛИ ЕДИНИЦЫ МИНУТ

ADDLW-9H;РАВНЫ 9,

BZMIH;ИДЕМ СРАВНИВАТЬ ДЕСЯТКИ.

INCFML,1;ИНАЧЕ УВЕЛИЧИМ МИНУТЫ.

RETURN

MIH

BSFFLAG1,4;ПРОШЛО 10 МИНУТ КУРСОР ВЫКЛЮЧАЕТСЯ.

BCFFLAG,7;НЕТ УСТАНОВКИ.

CLRFKYPC;НЕТ КУРСОРА.

CLRFML;ОБНУЛИМ ЕДИНИЦЫ МИНУТ.

MOVFWMH;ЕСЛИ ДЕСЯТКИ МИНУТ

Страницы: 1, 2, 3, 4, 5, 6



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.