62929 (588861), страница 9
Текст из файла (страница 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 КОНЕЦ Приложение Д Схема электрическая принципиальная многофункциональных астрономических часов Приложение Ж КАЛЬКУЛЯЦИЯ КОМПЛЕКТУЮЩИХ АСТРОНОМИЧЕСКИХ ЧАСОВХарактеристики
Список файлов ВКР