clk.lst
来自「這是一個非常好的key scan and display控制電路和程式」· LST 代码 · 共 1,145 行 · 第 1/5 页
LST
1,145 行
021A 0FC7 00592 XORLW D'199' ;= 199 THEN SKIP
021B 0743 00593 BTFSS STATUS,Z ; /
021C 0800 00594 RETLW 0
00595 ;INC SECONDS COUNT
021D 0068 00596 CLRF MSTMR ;CLEAR MS_TMR
021E 0216 00597 MOVF MIN_SEC,W ;GET MIN_SEC TIMER
021F 0E0F 00598 ANDLW B'00001111' ;MASK MINUTES
0220 0743 00599 BTFSS STATUS,Z ;ZERO THEN SKIP
0221 00F6 00600 DECF MIN_SEC, F ;REDUCE SECONDS
0222 0C09 00601 MOVLW STMR ;LOAD FSR WITH S_TMR
0223 0024 00602 MOVWF FSR ; /
0224 0955 00603 CALL INC_60 ;INC SECONDS
0225 0D00 00604 IORLW 0 ;DO AN OPERATION
0226 0743 00605 BTFSS STATUS,Z ;IF RETURN = 0 SKIP
0227 0A38 00606 GOTO CHK_AL_TIM ;CHK ALRM
00607 ;INC MINUTES COUNT
0228 03B6 00608 SWAPF MIN_SEC, F ;SWAP MIN SEC
0229 0216 00609 MOVF MIN_SEC,W ;GET MIN_SEC IN W
022A 0E0F 00610 ANDLW B'00001111' ;MASK SECONDS
022B 0743 00611 BTFSS STATUS,Z ;SKIP IF NOT SET
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 17
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
022C 00F6 00612 DECF MIN_SEC, F ;ELSE DEC
022D 03B6 00613 SWAPF MIN_SEC, F ;SWAP BACK
022E 0966 00614 CALL CHK_SILNC_TIM ;SILNCE ON?
022F 0C0A 00615 MOVLW MTMR ;INC MINUTES
0230 0024 00616 MOVWF FSR ; /
0231 0955 00617 CALL INC_60 ; /
0232 0D00 00618 IORLW 0 ;DO AN OPERATION
0233 0743 00619 BTFSS STATUS,Z ;IF 0 THEN SKIP
0234 0A38 00620 GOTO CHK_AL_TIM ;CHECK ALRAM TIME
00621 ;INC HOUR COUNT
0235 0C0B 00622 MOVLW HTMR ;GET HTMR IN FSR
0236 0024 00623 MOVWF FSR
0237 0989 00624 CALL INC_HR ;INC HOURS
00625 ;
0238 00626 CHK_AL_TIM
0238 0718 00627 BTFSS ALFLAG,ALONOF ;IF OFF QUIT
0239 0800 00628 RETLW 0 ; /
023A 0658 00629 BTFSC ALFLAG,SILNC ;RET IF IN SILENCE
023B 0800 00630 RETLW 0
023C 0638 00631 BTFSC ALFLAG,INAL ;ALREADY DONE
023D 0A4D 00632 GOTO CHK_1_MIN ;SEE IF 1 MIN UP
00633 ; RETLW 0 ;YES THEN QUIT
023E 020D 00634 MOVF HALARM,W ;CHK HRS
023F 018B 00635 XORWF HTMR,W ;EQUAL?
0240 0743 00636 BTFSS STATUS,Z ;YES THEN SKIP
0241 0800 00637 RETLW 0 ;ELSE RET
0242 020C 00638 MOVF MALARM,W ;CHK MIN
0243 018A 00639 XORWF MTMR,W ;EQUAL?
0244 0743 00640 BTFSS STATUS,Z ;YES THEN SKIP
0245 0800 00641 RETLW 0 ;ELSE RET
0246 0209 00642 MOVF STMR,W ;SEE IF SEC=0
0247 0743 00643 BTFSS STATUS,Z ;YES THEN SKIP
0248 0800 00644 RETLW 0 ;NO THEN RET
0249 0538 00645 BSF ALFLAG,INAL ;SET IN ALARM FLAG
024A 0C10 00646 MOVLW 10 ;SET 1 MIN TIMER
024B 0036 00647 MOVWF MIN_SEC ; /
024C 0800 00648 RETLW 0
00649 ;
024D 00650 CHK_1_MIN
024D 0396 00651 SWAPF MIN_SEC,W ;SWAP IN W
024E 0E0F 00652 ANDLW B'00001111' ;CHK MINUTES
024F 0743 00653 BTFSS STATUS,Z ;0 THEN SKIP
0250 0800 00654 RETLW 0 ;ELSE RET
0251 0438 00655 BCF ALFLAG,INAL ;CLR IN ALARM
0252 0478 00656 BCF ALFLAG,INAA ;CLR IN AA
0253 0505 00657 BSF PORT_A,BEP ;STOP BEEPER
0254 0800 00658 RETLW 0
00659 ;
0255 00660 INC_60
0255 02A0 00661 INCF F0, F ;INC AND GET IN W
0256 0200 00662 MOVF F0,0 ; /
0257 0E0F 00663 ANDLW B'00001111' ;MASK HI BITS
0258 0F0A 00664 XORLW B'00001010' ;= 10 THEN MAKE IT 0
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 18
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0259 0743 00665 BTFSS STATUS,Z ; /
025A 0801 00666 RETLW 1 ;ELSE RETURN NON ZERO
025B 0CF0 00667 MOVLW B'11110000' ;ZERO LSB
025C 0160 00668 ANDWF F0, F ; /
025D 03A0 00669 SWAPF F0, F ;SWAP INDIRECT
025E 02A0 00670 INCF F0, F ;INC
025F 0200 00671 MOVF F0,0 ;GET IN W
0260 03A0 00672 SWAPF F0, F ;SWAP F0 BACK
0261 0F06 00673 XORLW D'6' ;=6 THEN SKIP
0262 0743 00674 BTFSS STATUS,Z ; /
0263 0801 00675 RETLW 1 ;ELSE RETURN NZ
0264 0060 00676 CLRF F0 ; /
0265 0800 00677 RETLW 0 ;RET 0
00678 ;
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 19
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00679 PAGE
00680 ;
0266 00681 CHK_SILNC_TIM
0266 0758 00682 BTFSS ALFLAG,SILNC ;CHK IF IN SILENCE
0267 0800 00683 RETLW 0 ;NO THEN SKIP
0268 0396 00684 SWAPF MIN_SEC,W ;GET MIN IN W
0269 0E0F 00685 ANDLW B'00001111' ;MASK SECS
026A 0743 00686 BTFSS STATUS,Z ;ZERO?
026B 0800 00687 RETLW 0 ;NO THEN RET
026C 0458 00688 BCF ALFLAG,SILNC ;RESET SILENCE
026D 0C10 00689 MOVLW 10 ;SET I MIN TIMER
026E 0036 00690 MOVWF MIN_SEC ; /
026F 0800 00691 RETLW 0
00692 ;
00693 ;
0270 00694 CHK_DE_BOUNCE
0270 06B7 00695 BTFSC ENTFLG,INKEYBEP ;IN KEY BEEP?
0271 0A76 00696 GOTO CHK_DEB_1 ;YES THEN DEC TIMER
0272 07B0 00697 BTFSS FLAG,KEY_BEEP ;KEY BEEP SET?
0273 0A7F 00698 GOTO CHK_SERV ;NO, SEE IF SERVICED
0274 0678 00699 BTFSC ALFLAG,INAA ;IN AA?
0275 0A86 00700 GOTO CHK_BEP_ON ;YES THEN SEE IF ON
0276 00701 CHK_DEB_1
0276 05B7 00702 BSF ENTFLG,INKEYBEP ;SET FLAG
0277 0215 00703 MOVF DEBOUNCE,W ;GET IN W
0278 0643 00704 BTFSC STATUS,Z ;NZ THEN SKIP
0279 0C14 00705 MOVLW D'20' ;ELSE DB 100 mSEC
027A 0035 00706 MOVWF DEBOUNCE ; /
027B 0405 00707 BCF PORT_A,BEP ;TURN ON BEEPER
027C 02F5 00708 DECFSZ DEBOUNCE, F ;DEC AND CHK
027D 0A08 00709 GOTO UP_TMR_1 ;GO BACK
027E 0505 00710 BSF PORT_A,BEP ;TURN OFF BEEPER
027F 00711 CHK_SERV
00712 ; CLRF DEBOUNCE
00713 ; BSF PORT_A,BEP
027F 07F0 00714 BTFSS FLAG,SERVICED ;SERVICED THEN SKIP
0280 0A08 00715 GOTO UP_TMR_1 ;GO BACK
0281 04F0 00716 BCF FLAG,SERVICED ;ELSE CLEAR FLAGS
0282 04D0 00717 BCF FLAG,KEY_HIT ; /
0283 04B0 00718 BCF FLAG,KEY_BEEP ;RESET FLAG
0284 04B7 00719 BCF ENTFLG,INKEYBEP ; /
0285 0A08 00720 GOTO UP_TMR_1 ;GO BACK
00721 ;
0286 00722 CHK_BEP_ON
0286 0705 00723 BTFSS PORT_A,BEP ;IF OFF THEN SKIP
0287 0A08 00724 GOTO UP_TMR_1 ;ELSE WAIT
0288 0A76 00725 GOTO CHK_DEB_1 ;RETURN
00726 ;
00727 ;
0289 00728 INC_HR
0289 02A0 00729 INCF F0, F ;INC HOUR TIMER
028A 0200 00730 MOVF F0,W ;GET HR TMR IN W
028B 0031 00731 MOVWF TEMP ;SAVE IN TEMP
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 20
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
028C 0E0F 00732 ANDLW B'00001111' ;CHK LO BYTE = 10
028D 0F0A 00733 XORLW D'10' ; /
028E 0743 00734 BTFSS STATUS,Z ;YES THEN SKIP
028F 0A93 00735 GOTO INC_AM_PM ;ELSE CHK 12
0290 0C10 00736 MOVLW B'00010000' ;LOAD 1 IN MSB
0291 0020 00737 MOVWF F0
0292 0AA3 00738 GOTO RESTORE_AM_PM ;RESTORE AM/PM
0293 00739 INC_AM_PM
0293 04E0 00740 BCF F0,AM_PM ;CLEAR AM/PM
0294 0200 00741 MOVF F0,W ;GET IN W
0295 0F12 00742 XORLW 12H ;SEE IF 12 HEX
0296 0743 00743 BTFSS STATUS,Z ;YES THEN SKIP
0297 0A9D 00744 GOTO CHK_13 ;ELSE CHK 13
0298 07F1 00745 BTFSS TEMP,AM_PM ;IF SET, SKIP
0299 0A9C 00746 GOTO SET_AM_PM ;ELSE SET
029A 04E0 00747 BCF F0,AM_PM ;CLEAR FLAG
029B 0800 00748 RETLW 0 ;RETURN
029C 00749 SET_AM_PM
029C 05E0 00750 BSF F0,AM_PM ;SET FLAG
029D 00751 CHK_13
029D 0200 00752 MOVF F0,W ;GET IN W
029E 0F13 00753 XORLW 13H ;SEE IF 13
029F 0743 00754 BTFSS STATUS,Z ;YES THEN SKIP
02A0 0AA3 00755 GOTO RESTORE_AM_PM
02A1 00756 SET_1_HR
02A1 0C01 00757 MOVLW B'00000001' ;SET TO 1
02A2 0020 00758 MOVWF F0
02A3 00759 RESTORE_AM_PM
02A3 06F1 00760 BTFSC TEMP,AM_PM ;SKIP IF AM
02A4 05E0 00761 BSF F0,AM_PM ;ELSE SET TO PM
02A5 0800 00762 RETLW 0
00763 ;
00764 ;
00765 ;
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 21
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00766 PAGE
0400 00767 ORG 400
00768 ;
00769 ;KEY DEFINITIONS
0000000A 00770 ALARM_KEY EQU 0A
0000000B 00771 CE_KEY EQU 0B
0000000C 00772 SNOOZE_KEY EQU 0C
0000000D 00773 AM_PM_KEY EQU 0D
0000000E 00774 CLR_ALARM_KEY EQU 0E
0000000F 00775 SET_KEY EQU 0F
00776 ;
0400 00777 SERVICE_KEYS
0400 07D0 00778 BTFSS FLAG,KEY_HIT ;NO KEY HIT THEN ...
0401 0800 00779 RETLW 0 ;RETURN
0402 06F0 00780 BTFSC FLAG,SERVICED ;IF NOT SERVICED SKIP
0403 0800 00781 RETLW 0 ;ELSE RETURN
0404 05F0 00782 BSF FLAG,SERVICED ;SET SERVICED FLAG
0405 0210 00783 MOVF FLAG,W ;GET MODE OF OPERATION
0406 0E03 00784 ANDLW B'00000011' ; /
0407 0643 00785 BTFSC STATUS,Z ;00 THEN RTM
0408 0A10 00786 GOTO RTMKS ;RTM KEY SERVICE
0409 0031 00787 MOVWF TEMP ;SAVE IN TEMP
040A 02F1 00788 DECFSZ TEMP, F ;REDUCE TEMP
040B 0A0D 00789 GOTO SK1 ;SKIP
040C 0A1D 00790 GOTO ATMKS ;01, DO ALARM MODE
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?