Главная страница  Комбинированное использование портов 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [ 31 ] 32 33 34 35 36 37 38 39 40

TITLE Часы с будильником .

Листинг 5.1

LIST Р = 16С57

Соответствует инструкции по применению AN529 фирмы Microchip. Определение констант. PIC57 EQU 7FFH

Кварцевый генератор с частотой 4,096 МГц. Коэффициент деления предварительного* делителя равен 32, что позволяет получить период приращения RTCC 31,25 мкс. Модуль счета RTCC равен 96, период - 5 мс. MSEC5 EQU D96

******:*t,it**,

RTATS

HR10

HIN10

FLASH

KEYJEEP

AMPM

KEYJIT

ALED

AM PH

COLON

ALRMLED

SERVICED

ALONOF

INAL

SILNC

INAA

INKEYBEP

RTCC PC

Определение регистров RAM.

EQU 1 ии 2

STATUS FSR ,

P0RT,C

EQU EQU EQU EQU EQU

Определение регистров часов реального времени.

8 : Счетчик миллисекунд.

9 ; Счетчик секунд. OA ; Счетчик минут. С8 ; Счетчик часов, регистров будильника.

ОС ; Минуты будильника. 0D ; Часы будильника, регистров ввода данных. СЕ : Иинуты. OF ; Часы.

*******************************

STW ии

HTMR ни

т ни

Определение ilAlARH Юи HALARM EQU Определение HENTRY ECU HENTHY EQU

:***♦♦*** *************

Определение битов состояния и их функций.

FLAG EOU 10

BIT # 76543210

-l-l-l-l-l-l-l-l-l-l-l

ХХХХХХ001 -> Режим часов (REAL TIME MODE - RTM).

X1XXXXX01 -> Режим будильника (ALARM TIME MODE - ATM).

XXX1XXX10 -> Режим ввода данных (DATA ENTRY MODE - DEM).

XX1XXXX111 -> Режим проверки (TEST MODE -TM).

XXXXX1YX1X -> Светодиод ALARM вкл./выкл.

XX1XXYXXX -> Двоеточие вкл./выкл.

XXXYXXXX -> Мигание.

XXYXXXXX -> Звуковой сигнал (KEYJEEP).

X1YXXXXXX -> KEYJIT (0/1).

YXXXXX1XX -> Служебный код. X = произвольное значение. Y = соответствует описанию (0/1).

ТЕНР EQU 11 DIGIT EOU 12 NEW KEY EQU 13 KEY NIBL EQU 14 DEBOUNCE EQU 15 HIM SEC EQU 16 EMTFLG EQU 17 Флаги режима ввода (регистр ENTFLG). BIT # 765432101

--l-l-l-l-l-l-l-l-l-l

X1XXXXXXY -> Ввод времени/значений будильника.

Счетчик минут/секунд.



. X1XX1XXXYX -> Десятки часов установлены. XXX1XXYX1X -> Единицы часов установлены. XXXXYXXX -> Десятки минут установлены. XXXYXXXX -> Единицы минут установлены. XXYXXXXXI -> INKEYBEP. . XYXYXXXX -> Не используется. YXX1XXX1XX -> Не используется.

ALFLAG ЕШ 18 ; Регистр флагов будильника.

BIT #765431210

XXXXX1XXY -> ALONOF. XXXXXXYX -> INAL. XXXXXYX1X -> SILNC. XXXXYXXX -> INAA. XXXYXXXX -> He используется. X1XYXXXXX -> He используется. XYXYXXXX -> He используется. YXXXXXXX1 -> He используется.

OflG 0

(ЗОЮ INIT CLK ; Инициализация часов.

Тест индикации, все светодиоды зажжены на две секунды.

AAFLAG AATMR

EQU 19 ЕШ 1А

Определение функций портов.

PORT А:

PORT.B:

, BIT О -> Выход на BEEPER (активный низкий). BIT 1-3 -> Не используются.

все выходы.

BIT 0&4 -> Общий катод старшей цифры (MSB) & светодиод ALARM. BIT 1&5 -> Общий катод второй цифры & и двоеточие. BIT 2&6 -> Общий катод третьей цифры & и светодиод РН. BIT 3&7 -> Общий катод младшей цифры (LSB) & светодиод АН.

PORT C:

При отображении все порты - выходы, управляющие сегментами. При сканировании клавиатуры COL - выходы, ROW - входы.

BIT О -> сегмент А & столбец ((X)L) 4.

BIT 1 -> сегмент В & столбец (COL) 3.

BIT 2 -> сегмент С & столбец (COL) 2.

BIT 3 ~> сегмент D & столбец (COL) 1.

BIT 4 -> сегмент Е & строка (ROW) 4. -

BIT 5 -> сегмент F & строка (ROW) 3.

BIT 6 -> сегмент G & строка (ROW) 2. ,

BIT 7 -> Общий анод всех сигнализаторов (ALARM. РМ, АН, двоеточи, & строка (ROW) 1.

W HARDWARE

Горят в течение двух секунд.

NOVLW

MOVWF

HIN SEC

TEST LOOP

MIN SEC, W

Пересылаем в регистр W.

BTFSC

STATUS,Z

Если не равно 0, пропускаем,

GOTO

NORMJIME

иначе переходим.

CALL

UPDATE DISPLAY

Обновить индикацию.

STATUS,РАО

Банк 1.

CALL

UPDATE.TIMERS

Ожидание и обновление.

STATUS,РАО

; Банк 0.

GOTO

TEST LOOP

; Возвращаемся к началу цикла.

NORH TIME

FLAG,0

; В реальном времени.

FLAG.1

ПНЕ LOOP

CALL

UPDATE DISPLAY

STATUS,PA1

; Банк 2.

CALL

SERVICE KEYS

STATUS.РАО

; Банк 3.

CALL

SOUND AA

; Звуковой сигнал.

STATUS,PA1

; Банк 1.

CALL

UPDATEJIHERS

; Ожидание и обновление таймеро

STATUS,РАО

; Банк 0.

STATUS,PA1

HOVF

FIAG,W

; Флаги перемещаем в регистр W.

ANDLW

В000000011

XORLW

В000000001

BTFSC

STATUS,Z

: Если не 0. то пропускаем.

CALL

RESET ATM

GOTO

TIME LOOP

ESETJTW HOVF ANDLW BTFSS RETLW

HIN SEC,W ; Загружаем MIN SEC в регистр W.

ВООООШГ ; /

STATUS, Z ; Если 0. пропускаем,

О ; в противном случае возвращаемся.



BTFSC

RETLW

FUG.O

FLAG.ALRMLED ALFLAG,ALONOF FLAG,ALRMLED 0

UPDATE DISPLAY

MOVLW MOVWF MOVLW XORWF BTFSC GOTO UP DSP 1

В 00000000 PORT.C BOOIIIIir PORTJ, 0 STATUS. Z SCAN KP

Устанавливаем режим часов.

Гасим СИД.

MOVWF

DIGIT

; Пересылаем в DIGIT.

Проверяем ALONOF.

CALL

HASK.ANNC

; Вызываем MASK ANNC.

Включаем светодиод ALARM.

BTFSC

FLAG.FLASH

; Если флага FLASH нет. тогда пропускаем,

Возвращаемся.

CALL

CHK HALF SEC

; иначе вызываем CHK HALFJEC-

MOVF

DIGIT,0

; Пересылаем код символа

Обнуляем выходы сегментов. /

MOVWF

PORTJ

; в порт С.

RETLW

; Возвращаемся.

Последняя цифра? /

Если не О, то пропускаем.

В противном случае сканируем клавиатуру.

Выбор цифры индикации.

COHF

PORTJ, 0

Загружаем содержимое порта В в регистр W с инверсией.

BTFSC

STATUS,Z

Если цифра не выбрана,

MOVLW

В 11000000

тогда W = 11000000.

MOVWF

ТЕНР

Сохраняем в регистре ТЕНР.

COMF

ТЕНР

Инвертируем.

STATUS,С

Устанавливаем перенос.

TEMP

Сдвиг влево.

BTFSS

STATUS.С

Если С = 1, то пропускаем.

TEMP

В противном случае три раза сдвигаем влево

TEMP

с переносом.

MOVF

TEHP.O

Пересылаем в регистр W

MOVWF

PORTJ

и затем в порт В.

мирование сигналов сегментов цифры.

MOVLW

MTHR

Загрузить FSR с MTMR.

MOVWF

MOVF

FLAG,0

Пересылка содержимого регистра FLAG в регистр W.

ANDLW

В 0000001r

Маскируем по шаблону.

MOVWF

TEMP

Сохраняем в регистре TEMP.

XORLW

В 00000011

Инвертируем по шаблону.

BTFSC

STATUS, Z

Если не 0, то пропускаем.

GOTO

D0

иначе переходим в режим тестирования.

STATUS,С

Обнуляем бит переноса.

TEMP

Левый сдвиг регистра TEMP.

MOVF

TEHP.O

Пересылка в регистр W.

ADDWF

Изменяем указатель косвенной адресации.

CALL

GETJJEG

Получаем семисегментный код.

MOVLW MOVWF RETLW

СНК HALFJEC BTFSS MOVLW MOVWF RETLW

B 11111111

PORTJ 0

FLAG,COLON В 00000000 DIGIT 0

Включаем все сегменты. /

Возвращаемся.

Если двоеточие включено, то возвращаемся, Выдаем О на все линии порта С.

Посредством косвенной адресации (с использованием FSR),формируем табличным способом семисегментные коды для отображения минут.

GEr 7JEG

COMF

PORTJ, 0

Инвертируем значение PORTJ и помещаем в W.

ANDLW

B-11110000-

Маскируем младшую тетраду.

BTFSC

STATUS,Z

Проверяем на 0.

INCF

Если не 0, то инкрементируем FSR.

MOVF

FO.O

Содержимое F0 помещаем в W,

MOVWF

TEMP

а затем в TEMP.

COMF

PORTJ, 0

Инвертированное содержимое порта В пересылаем в W.

ANDLW

B-11110000-

Маскируем младшую тетраду.

BTFSC

STATUS,Z

Если не 0 (D1/2), то пропускаем.

TEMP, AMJM

иначе обнуляем бит АМ/РМ регистра TEMP.

OOMF

PORTJ, 0

Инвертированное содержимое порта В пересылаем в W.

ANDLW

B 11001100

Маскируем, если D2 или D4.

BTFSC

STATUS.Z

Если не 0 (D2 или D4), то пропускаем.

SWAPF

TEMP

Иначе меняем местами тетрады регистра TEMP.

MOVLW

B 00001111-

, Маскируем старшую тетраду.

ANDWF

TEHP.O

ADDWF

Результат добавляем к программному счетчику PC

для адресации одной из строк таблицы.

RETLW

B 00111111

Семисегментный код цифры 0.

RETLW

в 00000110

; Семисегментный код цифры 1.

RETLW

В-0101101Г

; Семисегментный код цифры 2.



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [ 31 ] 32 33 34 35 36 37 38 39 40

© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.