62929 (588861), страница 8

Файл №588861 62929 (Разработка многофункциональных астрономических часов) 8 страница62929 (588861) страница 82016-07-29СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 8)

; ВЕРСИЯ 1.3

; V.1.1

; - Исправил сигнальную проблему установки

; V.1.2

; - Исправленный дефект с смятением иногда снова установка или остановка неправильного таймера

; - Приспособление за 1/4 второго утратят, когда таймер был reset смятением

; V.1.3

; - Некоторые таймеры блокировали, когда установка смятения были скорректированы

#include

__config _HS_OSC & _WDT_OFF & _LVP_OFF & _BODEN_ON & _PWRTE_ON ;& _CP_OFF

#include "LCD.h"

#include "KBD.h"

; Определения байта состояния

#define TMR_ON 7 ; 0 = от, 1 = на

#define TMR_DIR 6 ; 0 = inc, 1 = dec

#define TMR_ON_ALARM_RESET 4 ; 1 = на смятении, снова установленном таймере

#define TMR_ON_ALARM_STOP 3 ; 1 = на смятении, таймере остановки

; куски 0-1: сигнальный звук

; Корректировки Нормы

#define TMR_STD_LO 0xC5

#define TMR_STD_HI 0x66

#define TMR_XTR_LO 0x18

#define TMR_XTR_HI 0x80

#define PULSES_PER_TICK 0x20

#define F_TICK 0 ; флаг тикания

#define F_BTNDOWN 1 ; 1, если кнопка была вниз от предыдущей петли, 0 иначе

#define F_TMR_LABEL_DIRTY 2 ; набор, если этикетке таймера придется обновляться на показе

#define F_VAL_DISPLAY_DIRTY 3 ; набор, если этикетке значения придется обновляться на показе

#define F_CLOCK_STOPPED 4 ; набор, если главный отмечает время остановлен

#define F_CURSOR_DIRTY 5 ; набор, если местоположению курсора нужно обновляться или reset

#define F_VALUE_ENTERED 6 ; набор, если новое значение только введено

#define MSG_ID_Clear 0xFF

ТОЧНОСТЬ #define 7

#define KBD_SCAN_DELAY 3

#define D_SEL_TIMER 0x01 ; Место назначения - отобранный таймер

#define D_SEL_TIMER_LENGTH 0x02 ; Место назначения - отобранная длина таймера

#define D_SEL_TIMER_ALARM 0x03 ; Место назначения - отобранное сигнальное время таймера

#define D_SEL_TIMER_COPY 0x04 ; Место назначения - отобранный таймер; потребительная стоимость как таймер ID к значению таймера lookup

#define B_LED 0 ; RA0

#define B_SPK 1 ; RA1

#define SND_SILENT 0x00 ; не нет звука

#define SND_PIP 0x01 ; звук: "косточка"

#define SND_PEEP 0x02 ; звук: "чирикание"

#define SND_WHIP 0x03 ; звук: "кнут"

; макрокоманда math

Макрокоманда M_StorStatus, ГДЕ

movf STATUS,w

movwf , ГДЕ

endm

Макрокоманда M_RetrStatus, ГДЕ

movf WHERE,w

СТАТУС movwf

endm

; макрокоманда государственного аппарата

Макрокоманда IfJump BTN,ADDR

movlw BTN

subwf BTN_ID,w

btfsc STATUS,Z

goto ADDR

ENDM

; макрокоманда государственного аппарата

Макрокоманда AnyBtnJump ADDR

btfss BTN_ID,7

goto ADDR

ENDM

Макрокоманда IfState BTN,STATE

movlw BTN

subwf BTN_ID,w

btfss STATUS,Z

goto $+5

высокий ШТАТ movlw

movwf STATE_HI

низкий ШТАТ movlw

movwf STATE_LO

ENDM ; goto здесь

ШТАТ макрокоманды AnyBtnState

btfsc BTN_ID,7

goto $+5

высокий ШТАТ movlw

movwf STATE_HI

низкий ШТАТ movlw

movwf STATE_LO

ENDM ; goto здесь

ШТАТ макрокоманды GoToState

высокий ШТАТ movlw

movwf STATE_HI

низкий ШТАТ movlw

movwf STATE_LO

ENDM

Макрокоманда SetMsg NEW_MSG_ID

movlw NEW_MSG_ID

movwf MSG_ID

ENDM

cblock 0x20

; главные записи таймеров

LOOP_TIMER

ФЛАГИ

EE_ADDR

EE_DATA

CTR1

CTR2

TMP

TMP1

TMP2

TMP3

РЕДЖ

; отобранный таймер

SEL_TMR

SEL_TMR_SETTINGS

SEL_TMR_LEN:4

; сигнальные переменные

СМЯТЕНИЕ; 0, если смятение есть, сигнальный ID иначе

ALARM_TIMER; пересчитывает untill тиканий сигнальные переключатели от

; данные кнопочного пресса

BTN_ID

BTN_DOWN

; записи государственного аппарата

STATE_LO

STATE_HI

; записи показа

LCD_CURSOR_POSITION ; местоположение (куски 0-6) курсора и статус (кусок 7: 1=on; 0=off)

DISP:6

MSGL

MSGH

MSGDAT

MSG_ID; ID сообщения, которое должно показываться на втором ряду

MSG_ID_CURRENT; ID сообщения, в настоящий момент показанного на втором ряду

; записи math

REG_X:PRECISION

REG_Y:PRECISION

REG_Z:PRECISION

REG_COUNTER

REG_STATUS

REG_T1

REG_T2

REG_ROT_COUNTER

; записи ввода значения

VAL_STAT; статус - место назначения значения, которое введено (позже может использоваться, чтобы запомнить также формат в верхнем откусывании)

VAL_IND; индекс - индекс в настоящий момент введенного существования цифры

VAL_DIGIT; место, чтобы запомнить единую цифру, пока другие действия выполняются

VAL:6; значение непосредственно (может находиться в десятичном представлении или непосредственно в шестнадцатиричном)

endc

; прерывание отмечается в разделенном пространстве

cblock 0x78

INT_W

INT_STATUS

INT_PCLATH

INT_FSR

INT_PULSECTR

INT_TIMER

endc

cblock 0xA0

ТИМ:16*4

endc

cblock 0x120

LEN:16*4

endc

cblock 0x1A0

ALM:16*4

endc

cblock 0x1E0

TMR_SETTINGS:16*1

endc

org 0x00

Запуск goto

org 0x04

nop ; код прерывания следует - избегать потенциальных страниц проблем нумерации

Прерывание

movwf INT_W

swapf STATUS,W

СТАТУС clrf

movwf INT_STATUS

movf PCLATH,w

movwf INT_PCLATH

clrf PCLATH

movf FSR,w

movwf INT_FSR

;banksel T1CON; таймер остановки

bcf T1CON,TMR1ON

banksel TMR1H ; установленный TMR1 counter

decf INT_PULSECTR,f

btfss STATUS,Z

goto Interrupt_std_len

movlw TMR_XTR_LO

movwf TMR1L

movlw TMR_XTR_H

movwf TMR1H

movlw PULSES_PER_TICK

movwf INT_PULSECTR

incf INT_TIMER,f

goto Interrupt_continue

Interrupt_std_len

movlw TMR_STD_LO

movwf TMR1L

movlw TMR_STD_HI

movwf TMR1H

Interrupt_continue

banksel PIR1 ; очистите кусок избытка TMR1

bcf PIR1,TMR1IF

banksel PIE1 ; разрешите прерывание TMR1

bsf PIE1,TMR1IE

banksel T1CON ; стартовый таймер

bsf T1CON,TMR1ON

banksel PORTC

;movf INT_FSR,w

movwf FSR

movf INT_PCLATH,w

movwf PCLATH

swapf INT_STATUS,w

СТАТУС movwf

swapf INT_W,F

swapf INT_W,W

retfie

TMR_Init

banksel INTCON

bsf INTCON,PEIE

bsf INTCON,GIE

banksel T1CON

movlw b'00000000'

banksel PORTC

movlw PULSES_PER_TICK

movwf INT_PULSECTR

banksel PIR1 ; очистите кусок избытка TMR1

bcf PIR1,TMR1IF

banksel PIE1 ; разрешите прерывание TMR1

bsf PIE1,TMR1IE

banksel T1CON ; стартовый таймер

bsf T1CON,TMR1ON

banksel PORTC

возврат

SM_Init

movlw низкий S00_TimerSelectLoop

movwf STATE_LO

movlw высокий S00_TimerSelectLoop

movwf STATE_HI

возврат

Запуск

ФЛАГИ clrf

clrf INT_TIMER

clrf LOOP_TIMER

clrf LCD_CURSOR_POSITION

вызовите EEPROM_CheckInit

вызовите PORTS_Init

вызовите LCD_Init

вызовите SM_Init

вызовите ReadTimerDataFromEEPROM

clrf SEL_TMR

вызовите LCD_UpdateTimerLabel

вызовите TMR_Init

вызовите SPK_Whip

MainLoop

вызовите IfPlaySound

btfsc FLAGS,F_VALUE_ENTERED

вызовите ProcessEnteredValue

btfsc FLAGS,F_TMR_LABEL_DIRTY

вызовите LCD_UpdateTimerLabel

movf MSG_ID,w

subwf MSG_ID_CURRENT,w

btfss STATUS,Z

вызовите LCD_UpdateSecondRowMessage

btfsc FLAGS,F_VAL_DISPLAY_DIRTY

вызовите LCD_UpdateValDisplay

вызовите IfTick

вызовите KBD_Scan

movf STATE_HI,w

movwf PCLATH

movf STATE_LO,w

movwf PCL; идите к государственному аппарату

SM_Rtn; возвратная точка государственного аппарата

movlw высокий SM_Rtn

movwf PCLATH

movlw 0xFF

movwf BTN_ID

btfsc FLAGS,F_CURSOR_DIRTY

вызовите LCD_UpdateCursor

btfsc FLAGS,F_TICK

goto MainLoop_Tick

clrf TMP

MainLoop_Delay ; клавиатура debounce

decf TMP,f

nop

nop

btfss STATUS,Z

goto MainLoop_Delay

goto MainLoop

MainLoop_Tick

movf SEL_TMR,w

movwf CTR1

вызовите LoadSelTmrSettingsAndLen

вызовите MC_Normalize

вызовите MC_NormalizedTo86400

вызовите MC_86400toHMS

вызовите LCD_UpdateTimer

movf MSG_ID,w

sublw MSG_ID_Clear

btfss STATUS,Z

goto MainLoop

movf SEL_TMR,w

movwf CTR1

вызовите LoadSelTmrSettingsAndLen

вызовите MC_Normalize

вызовите MC_NormalizedToJulianNormalized

вызовите MC_NormalizedToDecimal

вызовите LCD_UpdateTimerDecimalPt

bcf FLAGS,F_TICK

goto MainLoop

ProcessEnteredValue

bcf FLAGS,F_VALUE_ENTERED

movf VAL_STAT,w

sublw D_SEL_TIMER_LENGTH

btfsc STATUS,Z

goto ProcessEnteredValue_STLEN

movf VAL_STAT,w

sublw D_SEL_TIMER

btfsc STATUS,Z

goto ProcessEnteredValue_ST

movf VAL_STAT,w

sublw D_SEL_TIMER_ALARM

btfsc STATUS,Z

goto ProcessEnteredValue_STALM

sublw D_SEL_TIMER_COPY

btfsc STATUS,Z

goto ProcessEnteredValue_COPY

возврат

ProcessEnteredValue_STALM

bsf STATUS,IRP; копируйте VAL в смятение

ProcessEnteredValue_ST

movf REG,w; копируйте VAL в таймер (или смятение, если STATUS,IRP является набором)

movwf FSR

movf VAL,w

movwf INDF

incf FSR,f

movf VAL+1,w

movwf INDF

incf FSR,f

movf VAL+2,w

movwf INDF

incf FSR,f

movf VAL+3,w

movwf INDF

bcf STATUS,IRP

возврат

ProcessEnteredValue_COPY

; НЕ ВЫПОЛНЯЮТ В ЭТОЙ ВЕРСИИ

; - получить таймер ID от данных часа

; - значение таймера груза

; - нормализировать значение

; - de-нормализировать отобранный ряд таймера значения

; - значение таймера копии к отобранному таймеру

возврат

ProcessEnteredValue_STLEN ; копируйте VAL в отобранную длину таймера

movf SEL_TMR,w

movwf CTR1

вызовите CalculateEEPROMAddressFromCTR1

incf EE_ADDR,f

вызовите CalculateFileAddressFromCTR1

clrf TMP

ProcessEnteredValue_STLEN_1

movf TMP,w

addlw VAL

movwf FSR

movf INDF,w

movwf VAL_DIGIT

bsf STATUS,IRP

movf REG,w

andlw 0x7F

addwf TMP,w

movwf FSR

movf VAL_DIGIT,w

movwf INDF

bcf STATUS,IRP

movwf EE_DATA

вызовите EEPROM_Write

incf EE_ADDR,f

incf TMP,f

movf TMP,w

sublw 0x04

btfss STATUS,Z

goto ProcessEnteredValue_STLEN_1

вызовите LoadSelTmrSettingsAndLen

возврат

PORTS_Init

banksel PORTA

clrf PORTA

clrf PORTB

clrf PORTC

clrf PORTD

clrf PORTE

banksel TRISA

movlw b'00000110'

movwf ADCON1

movlw b'11111100' ; RA0=LED, RA1=SPK

movwf TRISA

movlw b'11110000' ; KBD

movwf TRISB

bcf OPTION_REG,7; ; разрешите слабые натяжения PORTB

clrf TRISC ; LCD: DB0-DB7

movlw 0xFF

movwf TRISD ; не используют - все входы

movlw b'0000000' ; LCD: RE0=RS, RE1=R/W; RE2=E

movwf TRISE

movlw b'11000000' ; разрешите прерывания

movwf INTCON

banksel PORTA

возврат

CalculateEEPROMAddressFromCTR1

; Высчитайте адрес данных таймера в EEPROM

movf CTR1,w

movwf EE_ADDR

bcf STATUS,C

rlf EE_ADDR,f

rlf EE_ADDR,f

rlf EE_ADDR,f

addwf EE_ADDR,f

возврат

CalculateFileAddressFromCTR1

; Адрес offsett таймера в РЕДЖЕ

movf CTR1,w

РЕДЖ movwf

bcf STATUS,C

rlf REG,f

rlf REG,f

ТИМ movlw

addwf REG,f

возврат

ReadTimerDataFromEEPROM

clrf CTR1

ReadTimerDataFromEEPROM_loop

вызовите CalculateEEPROMAddressFromCTR1

вызовите CalculateFileAddressFromCTR1

; Установки таймера груза

movf CTR1,w

addlw низкий TMR_SETTINGS

Характеристики

Тип файла
Документ
Размер
45,82 Mb
Учебное заведение
Неизвестно

Список файлов ВКР

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6376
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее