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

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

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

movwf FSR

bsf STATUS,IRP

вызовите EEPROM_Read

movwf INDF

; Длины груза

incf EE_ADDR,f

movf REG,w

andlw 0x7F

movwf FSR

вызовите EEPROM_Read

movwf INDF

incf EE_ADDR,f

incf FSR,f

вызовите EEPROM_Read

movwf INDF

incf EE_ADDR,f

incf FSR,f

вызовите EEPROM_Read

movwf INDF

incf EE_ADDR,f

incf FSR,f

вызовите EEPROM_Read

movwf INDF

bcf STATUS,IRP

; Offsetts груза (начальные значения)

incf EE_ADDR,f

movf REG,w

movwf FSR

вызовите EEPROM_Read

movwf INDF

incf EE_ADDR,f

incf FSR,f

вызовите EEPROM_Read

movwf INDF

incf EE_ADDR,f

incf FSR,f

вызовите EEPROM_Read

movwf INDF

incf EE_ADDR,f

incf FSR,f

вызовите EEPROM_Read

movwf INDF

incf CTR1,f

movf CTR1,w

sublw 0x10

btfss STATUS,Z

goto ReadTimerDataFromEEPROM_loop

возврат

EEPROM_CheckInit

movlw 0xFE

movwf EE_ADDR

вызовите EEPROM_Read

movlw 0xA5

subwf EE_DATA,w

btfss STATUS,Z

goto InitEEPROM

incf EE_ADDR,f

вызовите EEPROM_Read

movlw 0x5A

subwf EE_DATA,w

btfsc STATUS,Z

возврат

InitEEPROM

clrf EE_ADDR

clrf CTR1

clrf CTR2

InitEEPROM_loop

movf CTR2,w

lcall LOOKUP_StdTmr

movwf EE_DATA

movlw высокий InitEEPROM_loop

movwf PCLATH

вызовите EEPROM_Write

incf EE_ADDR,f

incf CTR2,f

movf CTR2,w

sublw 0x09

btfss STATUS,Z

goto InitEEPROM_loop

clrf CTR2

incf CTR1,f

movf CTR1,w

sublw 0x10

btfss STATUS,Z

goto InitEEPROM_loop

movlw 0xFE

movwf EE_ADDR

movlw 0xA5

movwf EE_DATA

вызовите EEPROM_Write

incf EE_ADDR,f

movlw 0x5A

movwf EE_DATA

вызовите EEPROM_Write

возврат

EEPROM_Read

banksel EE_ADDR

movf EE_ADDR,w

banksel EEADR

movwf EEADR

banksel EECON1

bcf EECON1, EEPGD

bsf EECON1, RD

banksel EEDATA

movf EEDATA,w

banksel EE_DATA

movwf EE_DATA

возврат EEPROM_Write

banksel EE_ADDR

movf EE_ADDR,w

banksel EEADR

movwf EEADR

banksel EE_DATA

movf EE_DATA,w

banksel EEDATA

movwf EEDATA

banksel EECON1

bcf EECON1, EEPGD

bsf EECON1, WREN

bcf INTCON, GIE

movlw 0x55

movwf EECON2

movlw 0xAA

movwf EECON2

bsf EECON1, WR

bsf INTCON, GIE

EEPROM_Write_WaitForConfirmation

btfsc EECON1, WR

goto EEPROM_Write_WaitForConfirmation

bcf EECON1, WREN

banksel EE_ADDR

возврат

IfTick

movf INT_TIMER,w

btfss FLAGS,F_CLOCK_STOPPED

goto IfTick_Continue

movwf LOOP_TIMER

возврат

IfTick_Continue

subwf LOOP_TIMER,w

btfsc STATUS,Z

возврат

Тикание; вызванные 4 раза за вторые

incf LOOP_TIMER,f

movlw 0x01

xorwf PORTA,f

clrf CTR1

Tick_next_ctr

вызовите LoadSelTmrSettingsAndLen

btfss SEL_TMR_SETTINGS,TMR_ON

goto Tick_continue

btfss SEL_TMR_SETTINGS,TMR_DIR

goto Tick_increase

; Tick_decrease

вызовите DecTimer

goto Tick_checkAlarm

Tick_increase

вызовите IncTimer

Tick_checkAlarm

вызовите CheckTimerAlarm

Tick_continue

incf CTR1,f

movlw 0x10

subwf CTR1,w

btfss STATUS,Z

goto Tick_next_ctr

bsf FLAGS,F_TICK

возврат LoadSelTmrSettingsAndLen ; грузы выбрали установки таймера и длину к SEL_TMR_SETTINGS и SEL_TMR_LEN

; установки груза

movf CTR1,w

addlw низкий TMR_SETTINGS

movwf FSR

bsf STATUS,IRP

movf INDF,w

movwf SEL_TMR_SETTINGS

; длина груза

вызовите CalculateFileAddressFromCTR1

movf REG,w

andlw 0x7F

movwf FSR

movf INDF,w

movwf SEL_TMR_LEN

incf FSR,f

movf INDF,w

movwf SEL_TMR_LEN+1

incf FSR,f

movf INDF,w

movwf SEL_TMR_LEN+2

incf FSR,f

movf INDF,w

movwf SEL_TMR_LEN+3

bcf STATUS,IRP

возврат

IncTimer; приращение таймер; убедитесь, что LoadSelTmrLen вызван перед movf REG,w

movwf FSR

incf INDF,f

btfss STATUS,Z

goto IncTimer_check

incf FSR,f

incf INDF,f

btfss STATUS,Z

goto IncTimer_check

incf FSR,f

incf INDF,f

btfss STATUS,Z

goto IncTimer_check

incf FSR,f

incf INDF,f

IncTimer_check

movf REG,w

movwf FSR

movf INDF,w

subwf SEL_TMR_LEN,w

btfss STATUS,Z

возврат

incf FSR,f

movf INDF,w

subwf SEL_TMR_LEN+1,w

btfss STATUS,Z

возврат

incf FSR,f

movf INDF,w

subwf SEL_TMR_LEN+2,w

btfss STATUS,Z

возврат

incf FSR,f

movf INDF,w

subwf SEL_TMR_LEN+3,w

btfss STATUS,Z

возврат

clrf INDF

decf FSR,f

clrf INDF

decf FSR,f

clrf INDF

decf FSR,f

clrf INDF

возврат

DecTimer ; уменьшение таймер; убедитесь, что LoadSelTmrLen вызван перед

movf REG,w

movwf FSR

movf INDF,f

btfss STATUS,Z

goto DecTimer_continue

incf FSR,f

movf INDF,f

btfss STATUS,Z

goto DecTimer_continue

incf FSR,f

movf INDF,f

btfss STATUS,Z

goto DecTimer_continue

incf FSR,f

movf INDF,f

btfss STATUS,Z

goto DecTimer_continue

movf SEL_TMR_LEN+3,w

movwf INDF

decf FSR,f

movf SEL_TMR_LEN+2,w

movwf INDF

decf FSR,f

movf SEL_TMR_LEN+1,w

movwf INDF

decf FSR,f

movf SEL_TMR_LEN,w

movwf INDF

DecTimer_continue

movf REG,w

movwf FSR

decf INDF,f

movlw 0xFF

subwf INDF,w

btfss STATUS,Z

возврат

incf FSR,f

decf INDF,f

movlw 0xFF

subwf INDF,w

btfss STATUS,Z

возврат

incf FSR,f

decf INDF,f

movlw 0xFF

subwf INDF,w

btfss STATUS,Z

возврат

incf FSR,f

decf INDF,f

возврат

CheckTimerAlarm

movlw 0x04

movwf TMP

movf REG,w

movwf FSR

CheckTimerAlarm_0

bsf STATUS,IRP

movf INDF,w

bcf STATUS,IRP

subwf INDF,w

btfss STATUS,Z

возврат ; не нет смятения

incf FSR,f

decf TMP,f

btfss STATUS,Z

goto CheckTimerAlarm_0

movf SEL_TMR_SETTINGS,w

andlw 0x03

СМЯТЕНИЕ movwf

clrf ALARM_TIMER

btfss SEL_TMR_SETTINGS,TMR_ON_ALARM_STOP

goto CheckTimerAlarm_1

; Таймер остановки на смятении

;movlw 0x01<

;lcall ToggleTimerSettings

movf CTR1,w

addlw низкий TMR_SETTINGS

movwf FSR

bsf STATUS,IRP

movlw 0x01<

xorwf INDF,f

bcf STATUS,IRP

CheckTimerAlarm_1

btfss SEL_TMR_SETTINGS,TMR_ON_ALARM_RESET

возврат

; Снова установленный таймер на смятении

;movf SEL_TMR,w

;movwf CTR1

вызовите CalculateFileAddressFromCTR1

movf REG,w

movwf FSR

movlw 0x01

movwf INDF

incf FSR,f

clrf INDF

incf FSR,f

clrf INDF

incf FSR,f

clrf INDF

возврат

IfPlaySound

movlw SND_PIP

subwf ALARM,w

btfsc STATUS,Z

goto PlayPip

movlw SND_PEEP

subwf ALARM,w

btfsc STATUS,Z

goto PlayPeep

movlw SND_WHIP

subwf ALARM,w

btfsc STATUS,Z

goto PlayWhip

PlayContinue

СМЯТЕНИЕ clrf

возврат

PlayPip

lcall SPK_Pip

goto PlayContinue

PlayPeep

lcall SPK_Peep

goto PlayContinue

PlayWhip

lcall SPK_Whip

goto PlayContinue

ToggleTimerSettings ; коленчатый байт установок таймера

movwf TMP

movf SEL_TMR,w

addlw низкий TMR_SETTINGS

movwf FSR

bsf STATUS,IRP

movf TMP,w

xorwf INDF,f

bcf STATUS,IRP

возврат CopyDispToVal; копируйте в настоящий момент показанное значение таймера в VAL

movf DISP,w

movwf VAL

movf DISP+1,w

movwf VAL+1

movf DISP+2,w

movwf VAL+2

movf DISP+3,w

movwf VAL+3

movf DISP+4,w

movwf VAL+4

movf DISP+5,w

movwf VAL+5

возврат

M_CLR ; очистите запись

movwf FSR

ТОЧНОСТЬ movlw

movwf REG_COUNTER

M_CLR_loop

clrf INDF

incf FSR,f

decf REG_COUNTER,f

btfss STATUS,Z

goto M_CLR_loop

возврат

M_ROL ; вращайтесь запись влево

movwf FSR

M_StorStatus REG_STATUS

clrf REG_COUNTER

M_ROL_loop

M_RetrStatus REG_STATUS

rlf INDF,f

M_StorStatus REG_STATUS

incf FSR,f

incf REG_COUNTER,f

ТОЧНОСТЬ movlw

subwf REG_COUNTER,w

btfss STATUS,Z

goto M_ROL_loop

возврат

M_ROR ; вращается запись вправо

movwf FSR

ТОЧНОСТЬ-1 movlw

addwf FSR,f

M_StorStatus REG_STATUS

clrf REG_COUNTER

M_ROR_loop

M_RetrStatus REG_STATUS

rrf INDF,f

M_StorStatus REG_STATUS

decf FSR,f

incf REG_COUNTER,f

ТОЧНОСТЬ movlw

subwf REG_COUNTER,w

btfss STATUS,Z

goto M_ROR_loop

возврат

M_CMP ; Z X СТАТУСА(C,Z)->

; Набор STATUS,C, если Z => X;

; Набор STATUS,Z, если Z == X

clrf REG_COUNTER

M_CMP_loop

movf REG_COUNTER,w

sublw REG_Z+PRECISION-1

movwf FSR

movf INDF,w

movwf REG_T1

movf REG_COUNTER,w

sublw REG_X+PRECISION-1

movwf FSR

movf INDF,w

subwf REG_T1,f

btfss STATUS,Z

возврат

incf REG_COUNTER,f

ТОЧНОСТЬ movlw

subwf REG_COUNTER,w

btfss STATUS,Z

goto M_CMP_loop

возврат

M_INC ; приращение запись

movwf FSR

ТОЧНОСТЬ movlw

movwf REG_COUNTER

M_INC_loop

incf INDF,f

btfss STATUS,Z

возврат

incf FSR,f

decf REG_COUNTER,f

btfss STATUS,Z

goto M_INC_loop

возврат

M_ADD ; Z + X -> Z

bcf STATUS,C

clrf REG_STATUS

clrf REG_COUNTER

M_ADD_loop

clrf REG_T1

btfsc REG_STATUS,C

incf REG_T1,f

clrf REG_STATUS

movlw REG_X

addwf REG_COUNTER,w

movwf FSR

movf INDF,w

addwf REG_T1,f

btfsc STATUS,C

bsf REG_STATUS,C

movlw REG_Z

addwf REG_COUNTER,w

movwf FSR

movf INDF,w

addwf REG_T1,f

btfsc STATUS,C

bsf REG_STATUS,C

movf REG_T1,w

movwf INDF

incf REG_COUNTER,f

ТОЧНОСТЬ movlw

subwf REG_COUNTER,w

btfss STATUS,Z

goto M_ADD_loop

возврат

M_SUB ; Z - X -> Z

clrf REG_COUNTER

bsf REG_STATUS,C

M_SUB_loop

bsf REG_T2,C

movlw REG_Z

addwf REG_COUNTER,w

movwf FSR

movf INDF,w

movwf REG_T1

movlw REG_X

addwf REG_COUNTER,w

movwf FSR

movf INDF,w

subwf REG_T1,f

btfss STATUS,C

bcf REG_T2,C

btfsc REG_STATUS,C

goto M_SUB_no_carry

movlw 0x01

subwf REG_T1,f

btfss STATUS,C

bcf REG_T2,C

M_SUB_no_carry

movlw REG_Z

addwf REG_COUNTER,w

movwf FSR

movf REG_T1,w

movwf INDF

bsf REG_STATUS,C

btfss REG_T2,C

bcf REG_STATUS,C

incf REG_COUNTER,f

ТОЧНОСТЬ movlw

subwf REG_COUNTER,w

btfss STATUS,Z

goto M_SUB_loop

btfss REG_STATUS,C

bcf STATUS,C

возврат

M_MUL ; X * Y -> Z

movlw REG_Z

вызовите M_CLR

movlw PRECISION*8+1

movwf REG_ROT_COUNTER

LCD_Init

вызовите LCD_Wait

вызовите LCD_Wait

вызовите LCD_Wait

вызовите LCD_Wait

вызовите LCD_Wait

вызовите LCD_Wait

movlw 0x00

movwf PORTE

movlw b'00110000'

movwf PORTC

вызовите LCD_PulseZ

вызовите LCD_Wait

вызовите LCD_Wait

вызовите LCD_Wait

вызовите LCD_Wait

вызовите LCD_Wait

movlw b'00111000'

movwf PORTC

вызовите LCD_PulseZ

вызовите LCD_Wait

вызовите LCD_Wait

вызовите LCD_Wait

вызовите LCD_Wait

вызовите LCD_Wait

movlw b'00111000'

movwf PORTC

вызовите LCD_PulseZ

вызовите LCD_Wait

вызовите LCD_Wait

вызовите LCD_Wait

вызовите LCD_Wait

вызовите LCD_Wait

movlw b'00111000'

movwf PORTC

вызовите LCD_PulseZ

movlw b'00001000'

movwf PORTC

вызовите LCD_PulseZ

movlw b'00000001'

movwf PORTC

вызовите LCD_PulseZ

movlw b'00000110'

movwf PORTC

вызовите LCD_PulseZ

movlw b'00001000'

movwf PORTC

вызовите LCD_PulseZ

movlw b'00000010'

movwf PORTC

вызовите LCD_PulseZ

;movlw b'10000000'

;movwf PORTC

;call LCD_PulseZ

;movlw b'00010100'

;movwf PORTC

;call LCD_PulseZ

;movlw b'10000000'

;movwf PORTC

;call LCD_PulseZ

bsf PORTE,0

movlw b'00001100'

вызовите LCD_SendCMD

movlw MSG_ID_Clear

movwf MSG_ID

movwf MSG_ID_CURRENT

возврат

LCD_SendDAT

movwf PORTC

bsf PORTE,0

вызовите LCD_PulseZ

возврат

LCD_SendCMD

movwf PORTC

bcf PORTE,0

вызовите LCD_PulseZ

bsf PORTE,0

возврат

MSG_NextChar_second

banksel EEDATA

movf EEDATA,w

banksel MSGDAT

movwf MSGDAT

bcf MSGDAT,7

incf MSGL,f

btfsc STATUS,Z

incf MSGH,f

bcf MSGH,7

movf MSGDAT,w

возврат

SPK_Delay

movlw 0x0F

movwf TMP

decf TMP,f

btfss STATUS,Z

goto $-2

возврат

SPK_Pip

movlw 0xFF

movwf TMP2

SPK_Pip_0

movlw 0x20

movwf TMP1

SPK_Pip_1

lcall SPK_Delay

decf TMP1,f

btfss STATUS,Z

goto SPK_Pip_1

movlw 0x01<

xorwf PORTA,f

decf TMP2,f

btfss STATUS,Z

goto SPK_Pip_

bcf PORTA,B_SPK

возврат

SPK_Peep

movlw 0x10

movwf TMP3

SPK_Peep_0

вызовите SPK_Pip

decf TMP3,f

btfss STATUS,Z

goto SPK_Peep_0

возврат

SPK_Whip

clrf TMP2

movlw 0xC0

SPK_Whip_0

movf TMP2,w

addlw 0x38

movwf TMP1

SPK_Whip_1

lcall SPK_Delay

decf TMP1,f

btfss STATUS,Z

goto SPK_Whip_1

movlw 0x01<

xorwf PORTA,f

decf TMP2,f

btfss STATUS,Z

goto SPK_Whip_0

возврат

org 0x1000

S00_TimerSelectLoop

clrf LCD_CURSOR_POSITION

SetMsg MSG_ID_Clear

IfJump VK_MENU_NEXT,S00_NextTmr

IfJump VK_MENU_PREV,S00_PrevTmr

IfState VK_MENU_ENTER,S10_AdjustTimer

lgoto SM_Rtn

S00_NextTmr

incf SEL_TMR,f

movlw 0x0F

andwf SEL_TMR,f

bsf FLAGS,F_TMR_LABEL_DIRTY

bsf FLAGS,F_TICK

lgoto SM_Rtn

S00_PrevTmr

decf SEL_TMR,f

movlw 0x0F

andwf SEL_TMR,f

bsf FLAGS,F_TMR_LABEL_DIRTY

bsf FLAGS,F_TICK

lgoto SM_Rtn

S10_AdjustTimer

clrf LCD_CURSOR_POSITION

SetMsg 0x00

IfState VK_MENU_EXIT,S00_TimerSelectLoop

IfState VK_MENU_NEXT,S20_AdjustClock

IfState VK_MENU_PREV,S20_AdjustClock

;IfState VK_MENU_PREV,S30_ThermometerSetup

IfState VK_MENU_ENTER,S11_SetTimer

IfJump VK_START_STOP,S10_StartStopTimer

IfJump VK_DIRECTION,S10_ToggleTimerDirection

lgoto SM_Rtn

S10_StartStopTimer

movlw 0x01<

lcall ToggleTimerSettings

lgoto SM_Rtn

S10_ToggleTimerDirection

movlw 0x01<

lcall ToggleTimerSettings

lgoto SM_Rtn

S11_SetTimer

SetMsg 0x01 ; MSG_SetTimer

IfState VK_MENU_EXIT,S10_AdjustTimer

IfState VK_MENU_NEXT,S12_SetAlarm

IfState VK_MENU_PREV,S13_SetLength

IfState VK_MENU_ENTER,S15_SetTimerValue

lgoto SM_Rtn

S12_SetAlarm

SetMsg 0x07

IfState VK_MENU_EXIT,S10_AdjustTimer

IfState VK_MENU_NEXT,S13_SetLength

IfState VK_MENU_PREV,S11_SetTimer

IfState VK_MENU_ENTER,S21_SetAlarmTime

lgoto SM_Rtn

S13_SetLength

SetMsg 0x04 ; MSG_SetLength

IfState VK_MENU_EXIT,S10_AdjustTimer

IfState VK_MENU_NEXT,S11_SetTimer

IfState VK_MENU_PREV,S12_SetAlarm

IfState VK_MENU_ENTER,S16_SetLengthValue

lgoto SM_Rtn

S15_SetTimerValue

SetMsg 0x06 ; MSG_Set

movlw D_SEL_TIMER

movwf VAL_STAT

GoToState S_EnterValueHMS

lgoto SM_Rtn

S16_SetLengthValue

SetMsg 0x06 ; MSG_Set

movlw D_SEL_TIMER_LENGTH

movwf VAL_STAT

GoToState S_EnterLongValue

lgoto SM_Rtn

S20_AdjustClock

SetMsg 0x02

IfState VK_MENU_EXIT,S00_TimerSelectLoop

IfState VK_MENU_NEXT,S10_AdjustTimer

;IfState VK_MENU_NEXT,S30_ThermometerSetup

IfState VK_MENU_PREV,S10_AdjustTimer

IfJump VK_START_STOP,S20_StartStopClock

IfJump VK_SKIP_FORWARD,S20_StartStopClock

lgoto SM_Rtn

S20_StartStopClock

movlw 0x01<

xorwf FLAGS,f

lgoto SM_Rtn

S20_SkipForward

movlw (0x01<

andwf FLAGS,f

incf INT_PULSECTR,f

incf INT_PULSECTR,f

incf INT_PULSECTR,f

incf INT_PULSECTR,f

lgoto SM_Rtn

;S30_ThermometerSetup

; SetMsg 0x03

; IfState VK_MENU_EXIT,S00_TimerSelectLoop

; IfState VK_MENU_NEXT,S10_AdjustTimer

; IfState VK_MENU_PREV,S20_AdjustClock

; lgoto SM_Rtn

S21_SetAlarmTime

SetMsg 0x08

IfState VK_MENU_EXIT,S12_SetAlarm

IfState VK_MENU_NEXT,S22_SetSound

IfState VK_MENU_PREV,S23_AlarmAction

IfState VK_MENU_ENTER,S21_EnterAlarmValue

lgoto SM_Rtn

S21_EnterAlarmValue

SetMsg 0x06 ; MSG_Set

movlw D_SEL_TIMER_ALARM

movwf VAL_STAT

movf SEL_TMR,w

movwf CTR1

lcall LoadSelTmrSettingsAndLen

movlw REG_Z

lcall M_CLR

movlw REG_X

lcall M_CLR

bsf STATUS,IRP ; TUK E PROBLEMAT!!!

lcall MC_Normalize_NO_CLR

bcf STATUS,IRP

lcall MC_NormalizedTo86400

lcall MC_86400toHMS

GoToState S_EnterValueHMS

lgoto SM_Rtn

S22_SetSound

SetMsg 0x09

IfState VK_MENU_EXIT,S12_SetAlarm

IfState VK_MENU_NEXT,S23_AlarmAction

IfState VK_MENU_PREV,S21_SetAlarmTime

IfState VK_MENU_ENTER,S40_SoundSelect

lgoto SM_Rtn

S23_AlarmAction

SetMsg 0x0A

IfState VK_MENU_EXIT,S12_SetAlarm

IfState VK_MENU_NEXT,S21_SetAlarmTime

IfState VK_MENU_PREV,S22_SetSound

IfState VK_MENU_ENTER,S51_SelectAction

lgoto SM_Rtn

S40_SoundSelect

movlw 0x03

andwf SEL_TMR_SETTINGS,w

movwf TMP

btfss STATUS,Z

goto S40_SoundSelect_0

; звук Безмолвен

GoToState S44_SoundSilent

lgoto SM_Rtn

S40_SoundSelect_0

movlw SND_PIP

subwf TMP,w

btfss STATUS,Z

goto S40_SoundSelect_1

; звук - это Косточка

GoToState S41_SoundPip

lgoto SM_Rtn

S40_SoundSelect_1

movlw SND_PEEP

subwf TMP,w

btfss STATUS,Z

goto S40_SoundSelect_2

; звук - это Чирикание

GoToState S42_SoundPeep

lgoto SM_Rtn

S40_SoundSelect_2

; звук - это Кнут

GoToState S43_SoundWhip

lgoto SM_Rtn

lgoto SM_Rtn

S41_SoundPip

SetMsg 0x0B

movlw SND_PIP

вызовите SetSound

IfState VK_MENU_ENTER,S22_SetSound

IfState VK_MENU_EXIT,S22_SetSound

IfState VK_MENU_NEXT,S42_SoundPeep

IfState VK_MENU_PREV,S44_SoundSilent

lgoto SM_Rtn

S42_SoundPeep

SetMsg 0x0C

movlw SND_PEEP

вызовите SetSound

IfState VK_MENU_ENTER,S22_SetSound

IfState VK_MENU_EXIT,S22_SetSound

IfState VK_MENU_NEXT,S43_SoundWhip

IfState VK_MENU_PREV,S41_SoundPip

lgoto SM_Rtn

S43_SoundWhip

SetMsg 0x0D

movlw SND_WHIP

вызовите SetSound

IfState VK_MENU_ENTER,S22_SetSound

IfState VK_MENU_EXIT,S22_SetSound

IfState VK_MENU_NEXT,S44_SoundSilent

IfState VK_MENU_PREV,S42_SoundPeep

lgoto SM_Rtn

S44_SoundSilent

SetMsg 0x0E

movlw SND_SILENT

вызовите SetSound

IfState VK_MENU_ENTER,S22_SetSound

IfState VK_MENU_EXIT,S22_SetSound

IfState VK_MENU_NEXT,S41_SoundPip

IfState VK_MENU_PREV,S43_SoundWhip

lgoto SM_Rtn

Action_SetAddress ; ПРЕДУПРЕЖДЕНИЕ: Это наборы STATUS,IRP! Очистите это после сделанного с INDF

movf SEL_TMR,w

addlw низкий TMR_SETTINGS

movwf FSR

bsf STATUS,IRP

bcf INDF,TMR_ON_ALARM_STOP

bcf INDF,TMR_ON_ALARM_RESET

возврат

S51_SelectAction

btfss SEL_TMR_SETTINGS,TMR_ON_ALARM_RESET

goto S51_SelectAction_ResetOff

S51_SelectAction_ResetOn

btfss SEL_TMR_SETTINGS,TMR_ON_ALARM_STOP

goto S51_SelectAction_GoToReset

S51_SelectAction_GoToBoth

GoToState S54_ActionBoth

lgoto SM_Rtn

S51_SelectAction_GoToReset

GoToState S52_ActionReset

lgoto SM_Rtn

S51_SelectAction_ResetOff

btfss SEL_TMR_SETTINGS,TMR_ON_ALARM_STOP

goto S51_SelectAction_GoToNone

S51_SelectAction_GoToStop

GoToState S53_ActionStop

lgoto SM_Rtn

S51_SelectAction_GoToNone

GoToState S51_ActionNone

lgoto SM_Rtn

S51_ActionNone

SetMsg 0x0F

movf SEL_TMR,w

вызовите Action_SetAddress

movf INDF,w

bcf STATUS,IRP

movwf SEL_TMR_SETTINGS

IfState VK_MENU_ENTER,S23_AlarmAction

IfState VK_MENU_EXIT,S23_AlarmAction

IfState VK_MENU_NEXT,S52_ActionReset

IfState VK_MENU_PREV,S54_ActionBoth

lgoto SM_Rtn

S52_ActionReset

SetMsg 0x10

вызовите Action_SetAddress

bsf INDF,TMR_ON_ALARM_RESET

movf INDF,w

bcf STATUS,IRP

movwf SEL_TMR_SETTINGS

IfState VK_MENU_ENTER,S23_AlarmAction

IfState VK_MENU_EXIT,S23_AlarmAction

IfState VK_MENU_NEXT,S53_ActionStop

IfState VK_MENU_PREV,S51_ActionNone

lgoto SM_Rtn

S53_ActionStop

SetMsg 0x11

вызовите Action_SetAddress

bsf INDF,TMR_ON_ALARM_STOP

movf INDF,w

bcf STATUS,IRP

movwf SEL_TMR_SETTINGS

IfState VK_MENU_ENTER,S23_AlarmAction

IfState VK_MENU_EXIT,S23_AlarmAction

IfState VK_MENU_NEXT,S54_ActionBoth

IfState VK_MENU_PREV,S52_ActionReset

lgoto SM_Rtn

S54_ActionBoth

SetMsg 0x12

вызовите Action_SetAddress

bsf INDF,TMR_ON_ALARM_STOP

bsf INDF,TMR_ON_ALARM_RESET

movf INDF,w

bcf STATUS,IRP

movwf SEL_TMR_SETTINGS

IfState VK_MENU_ENTER,S23_AlarmAction

IfState VK_MENU_EXIT,S23_AlarmAction

IfState VK_MENU_NEXT,S51_ActionNone

IfState VK_MENU_PREV,S53_ActionStop

lgoto SM_Rtn

SetSound

movwf TMP

movlw низкий TMR_SETTINGS

movwf FSR

movf SEL_TMR,w

addwf FSR,f

bsf STATUS,IRP

movlw 0xFC

andwf INDF,f

movf TMP,w

iorwf INDF,f

bcf STATUS,IRP

возврат

S_CopyFromTimer

movlw D_SEL_TIMER_COPY

movwf VAL_STAT

GoToState S_EnterLongValue

lgoto SM_Rtn

S_EnterLongValue ; введите длинное значение

movlw REG_Z

lcall M_CLR

lcall M_MOV_Z_TO_VAL

clrf VAL_IND

addlw 0x80 | 0x44

movwf LCD_CURSOR_POSITION

bsf FLAGS,F_CURSOR_DIRTY

bcf FLAGS,F_VAL_DISPLAY_DIRTY ; НЕ обновите показ VAL - это не используется здесь

GoToState S_EnterLongValue_Digit

lgoto SM_Rtn

S_EnterLongValue_Digit

pagesel $

IfState VK_MENU_EXIT,S_EnterLongValue_End

IfState VK_MENU_ENTER,S_EnterLongValue_Accept

pagesel $

btfsc BTN_ID,7

goto S_EnterLongValue_DigitRTN

movf BTN_ID,w

andlw 0x0F

lcall LOOKUP_DigitFromKeyID

movwf VAL_DIGIT

pagesel $

btfss VAL_DIGIT,7

goto S_EnterLongValue_Digit_1

lgoto SM_Rtn

S_EnterLongValue_Digit_1

movlw REG_Y

lcall M_CLR

movlw .10

movwf REG_Y

lcall M_MOV_VAL_TO_X

lcall M_MUL

movlw REG_X

lcall M_CLR

movf VAL_DIGIT,w

movwf REG_X

lcall M_ADD

lcall M_MOV_Z_TO_VAL

movf VAL_IND,w

addlw LCDCMD_SET_DD_RAM | 0x44

lcall LCD_SendCMD

movf VAL_DIGIT,w

addlw LCD_0

lcall LCD_SendDAT

incf VAL_IND,f

movf VAL_IND,w

addlw 0x80 | 0x44

movwf LCD_CURSOR_POSITION

bsf FLAGS,F_CURSOR_DIRTY

pagesel $

movf VAL_IND,w

sublw .10

btfsc STATUS,Z

decf VAL_IND,f

S_EnterLongValue_DigitRTN

lgoto SM_Rtn

S_EnterLongValue_Accept

bsf FLAGS,F_VALUE_ENTERED

S_EnterLongValue_End

clrf LCD_CURSOR_POSITION

bsf FLAGS,F_CURSOR_DIRTY

GoToState S13_SetLength

lgoto SM_Rtn

org 0x1800

da MSG_AdjustTimer ; 0x00

da MSG_SetTimer ; 0x01

da MSG_AdjustClock ; 0x02

da MSG_ThermometerSetup ; 0x03 - не используют в этой версии

da MSG_SetLength ; 0x04

da MSG_SetFormat ; 0x05

da MSG_Set ; 0x06

da MSG_SetAlarm ; 0x07

da MSG_SetAlarmTime ; 0x08

da MSG_SetSound ; 0x09

da MSG_AlarmAction ; 0x0A

da MSG_SoundPip ; 0x0B

da MSG_SoundPeep ; 0x0C

da MSG_SoundWhip ; 0x0D

da MSG_SoundSilent ; 0x0E

da MSG_ActionNone ; 0x0F

da MSG_ActionReset ; 0x10

da MSG_ActionStop ; 0x11

da MSG_ActionBoth ; 0x12

MSG_AdjustTimer

da "Приспособить Таймер",0

MSG_SetTimer

da "Установленный Таймер",0

MSG_AdjustClock

da "Приспособить Отмечает время",0

MSG_ThermometerSetup

"Терм da . Setup",0 ; не используют в этой версии

MSG_SetLength

da "Установленная Длина Цикла",0

MSG_SetFormat

da "Установленный Формат",0

MSG_Set

da "Set",0

MSG_SetAlarm

da "Установленное Смятение",0

MSG_SetAlarmTime

da "Сигнальное Время",0

MSG_SetSound

da "Сигнальный Звук",0

MSG_AlarmAction

da "Сигнальное Действие",0

MSG_SoundPip

da "Установил: Pip",0

MSG_SoundPeep

da "Установил: Peep",0

MSG_SoundWhip

da "Установил: Whip",0

MSG_SoundSilent

da "Установил: Silent",0

MSG_ActionNone

"Действие da : None",0

MSG_ActionReset

"Действие da : Reset",0

MSG_ActionStop

"Действие da : Stop",0

MSG_ActionBoth

"Действие da : Stop+Rst",0

org 0x1F80

LOOKUP_StdTmr

movwf TMP

movlw высоко $

movwf PCLATH

movf TMP,w

addwf PCL,f

; установки

retlw b'10000000'

; длина

retlw 0x00

retlw 0x46

retlw 0x05

retlw 0x00

; стартовый offsett

LOOKUP_DigitFromKeyID

movwf TMP

movlw высоко $

movwf PCLATH

LOOKUP_CursorPosHMS

movwf TMP

movlw высоко $

movwf PCLATH

movf TMP,w

addwf PCL,f

retlw 0xC4

retlw 0xC5

retlw 0xC7

retlw 0xC8

retlw 0xCA

retlw 0xCB

retlw 0xCC

КОНЕЦ

Приложение Д

Схема электрическая принципиальная многофункциональных астрономических часов

Приложение Ж

КАЛЬКУЛЯЦИЯ КОМПЛЕКТУЮЩИХ АСТРОНОМИЧЕСКИХ ЧАСОВ

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

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

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

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