clk.lst
来自「這是一個非常好的key scan and display控制電路和程式」· LST 代码 · 共 1,145 行 · 第 1/5 页
LST
1,145 行
00A1 0A9C 00399 GOTO GKV1 ;LOOP
00A2 00400 GO_RESET
00A2 05A3 00401 BSF STATUS,PA0 ;SET MSB
00A3 05C3 00402 BSF STATUS,PA1 ; /
00A4 0BFF 00403 GOTO SYS_RESET ;ELSE BIG ERROR
00A5 00404 GET_HI_KEY
00A5 00F1 00405 DECF TEMP, F ;REDUCE BY 1
00A6 0393 00406 SWAPF NEW_KEY,W ;GET HI NIBBLE
00A7 0E0F 00407 ANDLW B'00001111' ; /
00A8 0034 00408 MOVWF KEY_NIBL ;SAVE
00A9 0211 00409 MOVF TEMP,W ;GET OFFSET TO TBL
00AA 01E2 00410 ADDWF PC, F ;LOAD IN PC
00AB 0AAF 00411 GOTO GET147A ;JUMP TO NEXT PART
00AC 0AB8 00412 GOTO GET2580 ; /
00AD 0ABA 00413 GOTO GET369B ; /
00AE 0ABC 00414 GOTO GETCDEF ; /
00415 ;
00AF 00416 GET147A
00AF 0C04 00417 MOVLW 4 ;SET COUNT TO 4
00B0 00418 GETCOM
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 11
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00B0 0031 00419 MOVWF TEMP ;
00B1 00420 GETCOM1
00B1 0503 00421 BSF STATUS,C ;SET CARRY
00B2 0334 00422 RRF KEY_NIBL, F ;ROTATE RIGHT
00B3 0703 00423 BTFSS STATUS,C ;CHECK IF DONE
00B4 0ABE 00424 GOTO KEY_TBL ;JUMP TO TABLE
00B5 02F1 00425 DECFSZ TEMP, F ;DEC COUNT
00B6 0AB1 00426 GOTO GETCOM1 ;LOOP
00B7 0AA2 00427 GOTO GO_RESET ;ELSE ERROR
00428 ;
00B8 00429 GET2580
00B8 0C08 00430 MOVLW 8 ;SET COUNT TO 8
00B9 0AB0 00431 GOTO GETCOM
00432 ;
00BA 00433 GET369B
00BA 0C0C 00434 MOVLW D'12' ;SET COUNT TO 12
00BB 0AB0 00435 GOTO GETCOM
00436 ;
00BC 00437 GETCDEF
00BC 0C10 00438 MOVLW D'16' ;SET COUNT TO 16
00BD 0AB0 00439 GOTO GETCOM
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 12
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00440 PAGE
00441 ;
00BE 00442 KEY_TBL
00BE 00F1 00443 DECF TEMP, F ;REDUCE BY 1
00BF 0211 00444 MOVF TEMP,W ;GET IN W
00C0 01E2 00445 ADDWF PC, F ;JUMP TO TABLE
00C1 0801 00446 RETLW 1 ;KEY 1
00C2 0804 00447 RETLW 4 ;KEY 4
00C3 0807 00448 RETLW 7 ;KEY 7
00C4 080A 00449 RETLW 0A ;KEY A
00C5 0802 00450 RETLW 2 ;KEY 2
00C6 0805 00451 RETLW 5 ;KEY 5
00C7 0808 00452 RETLW 8 ;KEY 8
00C8 0800 00453 RETLW 0 ;KEY 0
00C9 0803 00454 RETLW 3 ;KEY 3
00CA 0806 00455 RETLW 6 ;KEY 6
00CB 0809 00456 RETLW 9 ;KEY 9
00CC 080B 00457 RETLW 0B ;KEY B
00CD 080C 00458 RETLW 0C ;KEY C
00CE 080D 00459 RETLW 0D ;KEY D
00CF 080E 00460 RETLW 0E ;KEY E
00D0 080F 00461 RETLW 0F ;KEY F
00462 ;
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 13
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00463 PAGE
00464 ;
00D1 00465 MASK_ANNC
00D1 0CFC 00466 MOVLW B'11111100' ;CHK IF DIGIT 1
00D2 0186 00467 XORWF PORT_B,0 ; /
00D3 0643 00468 BTFSC STATUS,Z ;NO THEN SKIP
00D4 0AE5 00469 GOTO MASK_ALARM ;ELSE MASK ALARM
00D5 0CF3 00470 MOVLW B'11110011' ;CHK IF DIGIT 2
00D6 0186 00471 XORWF PORT_B,0 ; /
00D7 0643 00472 BTFSC STATUS,Z ;NO THEN SKIP
00D8 0AE8 00473 GOTO MASK_COLON ;ELSE MASK COLON
00D9 0CCF 00474 MOVLW B'11001111' ;CHK IF DIGIT 3
00DA 0186 00475 XORWF PORT_B,0 ; /
00DB 0643 00476 BTFSC STATUS,Z ;NO THEN SKIP
00DC 0AE1 00477 GOTO MASK_PM ;ELSE MASK PM
00DD 00478 MASK_AM
00DD 02A4 00479 INCF FSR, F ;INC FSR
00DE 07E0 00480 BTFSS F0,AM_PM ;IF 0 THEN AM
00DF 05F2 00481 BSF DIGIT,7 ;SET MSB
00E0 0AEB 00482 GOTO BLNK_LEAD_0 ;NEXT
00E1 00483 MASK_PM
00E1 02A4 00484 INCF FSR, F ;INC FSR
00E2 06E0 00485 BTFSC F0,AM_PM ;IF 1 THEN PM
00E3 05F2 00486 BSF DIGIT,7 ;SET MSB
00E4 0AEB 00487 GOTO BLNK_LEAD_0 ;NEXT
00E5 00488 MASK_ALARM
00E5 0650 00489 BTFSC FLAG,ALRMLED ;1 THEN LIGHT LED
00E6 05F2 00490 BSF DIGIT,7 ; /
00E7 0AEB 00491 GOTO BLNK_LEAD_0 ;NEXT
00E8 00492 MASK_COLON
00E8 0670 00493 BTFSC FLAG,COLON ;1 THEN LIGHT LED
00E9 05F2 00494 BSF DIGIT,7 ; /
00EA 0AEB 00495 GOTO BLNK_LEAD_0 ;NEXT
00496 ;
00EB 00497 BLNK_LEAD_0
00EB 0210 00498 MOVF FLAG,W ;GET IN W
00EC 0E03 00499 ANDLW B'00000011' ;SEE IF IN DEM
00ED 0F02 00500 XORLW B'00000010' ;CHECK
00EE 0643 00501 BTFSC STATUS,Z ;NO THEN DO
00EF 0800 00502 RETLW 0 ;ELSE RETURN
00F0 0CFC 00503 MOVLW B'11111100' ;SEE IF DIGIT 1
00F1 0186 00504 XORWF PORT_B,0 ; /
00F2 0743 00505 BTFSS STATUS,Z ;YES THEN SKIP
00F3 0800 00506 RETLW 0 ;RETURN
00F4 0C3F 00507 MOVLW B'00111111' ;ELSE MASK G AND ANUNC
00F5 0152 00508 ANDWF DIGIT,0 ;GET IN W
00F6 0F3F 00509 XORLW B'00111111' ;SEE IF 0
00F7 0743 00510 BTFSS STATUS,Z ;YES THEN SKIP
00F8 0800 00511 RETLW 0 ;RETURN
00F9 0C80 00512 MOVLW B'10000000' ;ELSE BLANK D1
00FA 0172 00513 ANDWF DIGIT, F ; /
00FB 0800 00514 RETLW 0 ;RETURN
00515 ;
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 14
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00516 ;
00517 ;
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 15
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00518 PAGE
00519 ;
00520 ;THIS ROUTINE SETS UP PORTS A,B,C AND THE INTERNAL
00521 ;REAL TIME CLOCK COUNTER.
00FC 00522 INIT_CLK
00FC 0C0F 00523 MOVLW B'00001111' ;MAKE ACTIVE HIGH
00FD 0025 00524 MOVWF PORT_A ; /
00FE 0C00 00525 MOVLW B'00000000' ;SET PORT A AS OUTPUTS
00FF 0005 00526 TRIS PORT_A
00527 ;
0100 0CFF 00528 MOVLW B'11111111' ;SET LEVELS HIGH
0101 0026 00529 MOVWF PORT_B ; /
0102 0C00 00530 MOVLW B'00000000' ;SET PORT B AS OUTPUTS
0103 0006 00531 TRIS PORT_B
00532 ;
0104 0C00 00533 MOVLW B'00000000' ;SET LEVELS LOW
0105 0027 00534 MOVWF PORT_C ; /
0106 0C00 00535 MOVLW B'00000000' ;SET PORT C AS OUTPUTS
0107 0007 00536 TRIS PORT_C ; /
00537 ;
0108 0C04 00538 MOVLW B'00000100' ;SET UP PRESCALER
0109 0002 00539 OPTION ; /
00540 ;
010A 0C60 00541 MOVLW MSEC5 ;RTCC = 5 mSEC
010B 0021 00542 MOVWF RTCC ; /
010C 0068 00543 CLRF MSTMR ;CLEAR MSTMR
010D 0069 00544 CLRF STMR ; & SEC TMR
010E 006A 00545 CLRF MTMR ;& MINUTES
010F 0C12 00546 MOVLW 12H ;MAKE HRS = 12
0110 002B 00547 MOVWF HTMR ; /
0111 002D 00548 MOVWF HALARM ;MAKE HRS = 12
0112 006C 00549 CLRF MALARM ; /
0113 0C03 00550 MOVLW B'00000011' ;SET TO TEST MODE
0114 0030 00551 MOVWF FLAG ; /
0115 0078 00552 CLRF ALFLAG ;CLEAR ALL FLAG
0116 0079 00553 CLRF AAFLAG ; /
0117 0077 00554 CLRF ENTFLG ; /
0118 0A01 00555 GOTO TEST_HARDWARE
00556 ;
00557 ;All routines related to timer updates are located at
00558 ;address 200 and above.
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 16
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00559 PAGE
0200 00560 ORG 0200
00561 ;
0200 00562 UPDATE_TIMERS
0200 0201 00563 MOVF RTCC,W ;SEE IF RTCC = 0
0201 0743 00564 BTFSS STATUS,Z ;IF 0 THEN SKIP
0202 0A00 00565 GOTO UPDATE_TIMERS ;ELSE LOOP
0203 0C60 00566 MOVLW MSEC5 ;RTCC = 5 mSEC
0204 0021 00567 MOVWF RTCC ; /
0205 02A8 00568 INCF MSTMR, F ;INC 5 MILLI SEC
0206 06D0 00569 BTFSC FLAG,KEY_HIT ;NO KEY HIT THEN SKIP
0207 0A70 00570 GOTO CHK_DE_BOUNCE ;ELSE DEBOUNCE
0208 00571 UP_TMR_1
0208 0210 00572 MOVF FLAG,W ;ALARM MODE?
0209 0E03 00573 ANDLW B'00000011' ; /
020A 0F01 00574 XORLW B'00000001' ; /
020B 0743 00575 BTFSS STATUS,Z ;SKIP IF YES
020C 0A14 00576 GOTO UP_TMR_2 ;DO NEXT
020D 0550 00577 BSF FLAG,ALRMLED ;LIGHT LED
020E 0570 00578 BSF FLAG,COLON ; /
020F 0C64 00579 MOVLW D'100' ;IF 1/2 SEC
0210 0088 00580 SUBWF MSTMR,0 ; BLINK
0211 0703 00581 BTFSS STATUS,C ; /
0212 0450 00582 BCF FLAG,ALRMLED ;ALARM LED
0213 0A19 00583 GOTO UP_TMR_3 ;SKIP
0214 00584 UP_TMR_2
0214 0570 00585 BSF FLAG,COLON ;TURN ON
0215 0C64 00586 MOVLW D'100' ;<100 BLINK COLON
0216 0088 00587 SUBWF MSTMR,0 ; /
0217 0703 00588 BTFSS STATUS,C ;YES THEN SKIP
0218 0470 00589 BCF FLAG,COLON ;ELSE TURN OFF
0219 00590 UP_TMR_3
0219 0208 00591 MOVF MSTMR,0 ;GET MSTMR IN W
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?