📄 clk.lst
字号:
0018 0F01 00200 XORLW B'00000001' ; /
0019 0643 00201 BTFSC STATUS,Z ;SKIP IF NOT
001A 091C 00202 CALL RESET_ATM
001B 0A0D 00203 GOTO TIME_LOOP
00204 ;
001C 00205 RESET_ATM
001C 0216 00206 MOVF MIN_SEC,W ;GET MIN/SEC
001D 0E0F 00207 ANDLW B'00001111' ; /
001E 0743 00208 BTFSS STATUS,Z ;Z THEN SKIP
001F 0800 00209 RETLW 0 ;ELSE RETURN
0020 0410 00210 BCF FLAG,0 ;SET TO RTM
0021 0450 00211 BCF FLAG,ALRMLED ;CLEAR LED
0022 0618 00212 BTFSC ALFLAG,ALONOF ;TEST STAT
0023 0550 00213 BSF FLAG,ALRMLED ;SET LED
0024 0800 00214 RETLW 0 ;RETURN
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 6
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00215 PAGE
00216 ;
00217 ;
0025 00218 UPDATE_DISPLAY
0025 0C00 00219 MOVLW B'00000000' ;CLEAR SEG DRIVE
0026 0027 00220 MOVWF PORT_C ; /
0027 0C3F 00221 MOVLW B'00111111' ;SEE IF LAST DIGIT
0028 0186 00222 XORWF PORT_B,0 ; /
0029 0643 00223 BTFSC STATUS,Z ;NO THEN SKIP
002A 0A6F 00224 GOTO SCAN_KP ;ELSE SCAN KEYPAD
002B 00225 UP_DSP_1
00226 ;SELECT DIGIT TO BE DISPLAYED
002B 0246 00227 COMF PORT_B,0 ;GET COMPL. PORT B IN W
002C 0643 00228 BTFSC STATUS,Z ;NO DIGIT SELECTED?
002D 0CC0 00229 MOVLW B'11000000' ;THEN SELECT DEFAULT
002E 0031 00230 MOVWF TEMP ;SAVE IN TEMP
002F 0271 00231 COMF TEMP, F ;COMPLEMENT VALUE
0030 0503 00232 BSF STATUS,C ;SET CARRY
0031 0371 00233 RLF TEMP, F ;SHIFT LEFT
0032 0703 00234 BTFSS STATUS,C ;IF C=1 THEN SKIP
0033 0371 00235 RLF TEMP, F ;ELSE 3 TIMES...
0034 0371 00236 RLF TEMP, F ;THRU CARRY
0035 0211 00237 MOVF TEMP,0 ;GET IN W
0036 0026 00238 MOVWF PORT_B ;OUTPUT TO PORT
00239 ;NOW THAT DIGIT IS SELECTED, SELECT SEG VALUES FOR THAT DIGIT
00240 ;FIRST FIND MODE OF OPERATION.
0037 0C0A 00241 MOVLW MTMR ;LOAD FSR WITH MTMR
0038 0024 00242 MOVWF FSR ; /
0039 0210 00243 MOVF FLAG,0 ;GET FLAG IN W
003A 0E03 00244 ANDLW B'00000011' ;MASK OTHER BITS
003B 0031 00245 MOVWF TEMP ;SAVE IN TEMP
003C 0F03 00246 XORLW B'00000011' ;IN TEST MODE
003D 0643 00247 BTFSC STATUS,Z ;NO THEN SKIP
003E 0A4B 00248 GOTO DO_TM ;ELSE TEST MODE
003F 0403 00249 BCF STATUS,C ;CLEAR CARRY
0040 0371 00250 RLF TEMP, F ;LEFT SHIFT TEMP
0041 0211 00251 MOVF TEMP,0 ;GET IN W
0042 01E4 00252 ADDWF FSR, F ;CHANGE INDIRECT POINTER
0043 0954 00253 CALL GET_7_SEG ;GET 7 SEG DATA IN W
0044 0032 00254 MOVWF DIGIT ;SAVE IN DIGIT LOC.
0045 09D1 00255 CALL MASK_ANNC ;MASK ANNC TO DIGIT
0046 0690 00256 BTFSC FLAG,FLASH ;NO FLASH THEN SKIP
0047 094E 00257 CALL CHK_HALF_SEC ;ELSE CHK. IF ON
0048 0212 00258 MOVF DIGIT,0 ;GET BACK DIGIT
0049 0027 00259 MOVWF PORT_C ;OUTPUT TO PORT
004A 0800 00260 RETLW 0 ;RETURN
00261 ;
004B 00262 DO_TM
004B 0CFF 00263 MOVLW B'11111111' ;LIGHT ALL SEGMENTS
004C 0027 00264 MOVWF PORT_C ; /
004D 0800 00265 RETLW 0 ;RETURN FROM UPDATE DISPLAY
00266 ;
004E 00267 CHK_HALF_SEC
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 7
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
004E 0770 00268 BTFSS FLAG,COLON ;IF COLON ON THEN DO
004F 0A51 00269 GOTO BLANK_DSP ;ELSE BLANK DISPLAY
0050 0800 00270 RETLW 0
0051 00271 BLANK_DSP
0051 0C00 00272 MOVLW B'00000000' ;MAKE PORT C LOW
0052 0032 00273 MOVWF DIGIT
0053 0800 00274 RETLW 0
00275 ;
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 8
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00276 PAGE
00277 ;
00278 ;ON ENTRY FSR POINTS TO THE REAL TIME MODE'S MINUTES REGISTER.
00279 ;ON RETURN FSR POINTS TO THE TIMER REGISTER TO BE DISPLAYED.
00280 ;W REG. CONTAINS THE DECODED 7 SEG. INFO OF THE DIGIT
00281 ;TO BE DISPLAYED
00282 ;
0054 00283 GET_7_SEG
0054 0246 00284 COMF PORT_B,0 ;COMPLEMENT B --> W
0055 0EF0 00285 ANDLW B'11110000' ;MASK LO NIBBLE
0056 0643 00286 BTFSC STATUS,Z ;NZ THEN SKIP
0057 02A4 00287 INCF FSR, F ;INC POINTER
0058 0200 00288 MOVF F0,0 ;MOVE INDIRECT TO W
0059 0031 00289 MOVWF TEMP ;GET INTO TEMP
005A 0246 00290 COMF PORT_B,0 ;COMPL.B --> W
005B 0EF0 00291 ANDLW B'11110000' ;MASK LO NIBBLE
005C 0643 00292 BTFSC STATUS,Z ;IF D1/2 THEN
005D 04F1 00293 BCF TEMP,AM_PM ;CLEAR AM/PM BIT
005E 0246 00294 COMF PORT_B,0 ;GET PORT B AGAIN
005F 0ECC 00295 ANDLW B'11001100' ;SEE IF D2 OR D4
0060 0643 00296 BTFSC STATUS,Z ;YES THEN SKIP
0061 03B1 00297 SWAPF TEMP, F ;SWAP TEMP
0062 0C0F 00298 MOVLW B'00001111' ;MASK HI NIBBLE
0063 0151 00299 ANDWF TEMP,0
0064 01E2 00300 ADDWF PC, F ;ADD TO PC
0065 083F 00301 RETLW B'00111111' ;CODE FOR 0
0066 0806 00302 RETLW B'00000110' ;CODE FOR 1
0067 085B 00303 RETLW B'01011011' ;CODE FOR 2
0068 084F 00304 RETLW B'01001111' ;CODE FOR 3
0069 0866 00305 RETLW B'01100110' ;CODE FOR 4
006A 086D 00306 RETLW B'01101101' ;CODE FOR 5
006B 087D 00307 RETLW B'01111101' ;CODE FOR 6
006C 0807 00308 RETLW B'00000111' ;CODE FOR 7
006D 087F 00309 RETLW B'01111111' ;CODE FOR 8
006E 0867 00310 RETLW B'01100111' ;CODE FOR 9
00311 ;
00312 ;This routine scans the 4x4 hex key pad for a key hit.
00313 ;If key is pressed, KEY_HIT flag is set and the value of
00314 ;the hex key is returned in reg NEW_KEY
00315 ;If no key is detected, then a 0xff value is returned in
00316 ;register NEW_KEY and the flag KEY_HIT is reset.
00317 ;
006F 00318 SCAN_KP
006F 06D0 00319 BTFSC FLAG,KEY_HIT ;KEY UNDER SERVICE?
0070 0A2B 00320 GOTO UP_DSP_1 ;YES SKIP ROUTINE
0071 0CFF 00321 MOVLW B'11111111' ;SET DIGIT SINKS ...
0072 0026 00322 MOVWF PORT_B ;TO HIGH
0073 0CF7 00323 MOVLW B'11110111' ;SET KEY COL LOW
0074 0031 00324 MOVWF TEMP ;SAVE IN TEMP
0075 00325 SKP1
0075 0C00 00326 MOVLW B'00000000' ;SET PORT C AS OUTPUTS
0076 0007 00327 TRIS PORT_C ; /
0077 0211 00328 MOVF TEMP,W
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 9
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0078 0E0F 00329 ANDLW B'00001111' ;DISCHARGE PINS FOR MEMBRANE KEYPADS
0079 0027 00330 MOVWF PORT_C ; /
007A 0CF0 00331 MOVLW B'11110000' ;SET AS I/O
007B 0007 00332 TRIS PORT_C ; /
007C 0211 00333 MOVF TEMP,W ;GET OLD VALUE
007D 0027 00334 MOVWF PORT_C ;OUTPUT TO PORT
007E 0207 00335 MOVF PORT_C,W ;INPUT PORT VALUE
007F 0EF0 00336 ANDLW B'11110000' ;MASK LO BYTE
0080 0FF0 00337 XORLW B'11110000' ;SEE IF KEY HIT
0081 0743 00338 BTFSS STATUS,Z ;NO KEY THEN SKIP
0082 0A8D 00339 GOTO DET_KEY ;LOAD KEY VALUE
0083 00340 SKP3
0083 0503 00341 BSF STATUS,C ;SET CARRY
0084 0331 00342 RRF TEMP, F ;MAKE NEXT COL. LOW
0085 0603 00343 BTFSC STATUS,C ;ALL DONE THEN SKIP
0086 0A75 00344 GOTO SKP1
0087 0073 00345 CLRF NEW_KEY ;SET NEW_KEY = FF
0088 00F3 00346 DECF NEW_KEY, F ; /
0089 00347 SKP2
0089 0067 00348 CLRF PORT_C ;SETPORT C AS ...
008A 0C00 00349 MOVLW B'00000000' ;OUTPUTS
008B 0007 00350 TRIS PORT_C ; /
008C 0A2B 00351 GOTO UP_DSP_1 ;RETURN
008D 00352 DET_KEY
00353 ;key is detected
008D 0293 00354 INCF NEW_KEY,W ;CHK IF KEY ...
008E 0743 00355 BTFSS STATUS,Z ;WAS RELEASED
008F 0A89 00356 GOTO SKP2 ;NO THEN RETURN
0090 0207 00357 MOVF PORT_C,W ;GET RAW KEY...
0091 0D0F 00358 IORLW B'00001111' ;VALUE.
0092 0151 00359 ANDWF TEMP,W ; /
0093 0033 00360 MOVWF NEW_KEY ;SAVE IN NEW_KEY
0094 0998 00361 CALL GET_KEY_VAL ;GET ACTUAL KEY ...
0095 0033 00362 MOVWF NEW_KEY ;VALUE
0096 05D0 00363 BSF FLAG,KEY_HIT ;SET KEY HIT FLAG
0097 0A89 00364 GOTO SKP2 ;RETURN
00365 ;
MPASM 01.40 Released CLK.ASM 1-16-1997 13:07:37 PAGE 10
Alarm Clock
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00366 PAGE
00367 ;This routine decodes the hex value from the "raw" data got
00368 ;from scanning the rows and cols.
00369 ; actual key value raw hex value
00370 ; ONE EQU 77
00371 ; TWO EQU 7B
00372 ; THREE EQU 7D
00373 ; C EQU 7E
00374 ; FOUR EQU 0B7
00375 ; FIVE EQU 0BB
00376 ; SIX EQU 0BD
00377 ; D EQU 0BE
00378 ; SEVEN EQU 0D7
00379 ; EIGHT EQU 0DB
00380 ; NINE EQU 0DD
00381 ; E EQU 0DE
00382 ; A EQU 0E7
00383 ; ZERO EQU 0EB
00384 ; B EQU 0ED
00385 ; F EQU 0EE
00386 ;
00387 ;
0098 00388 GET_KEY_VAL
0098 0E0F 00389 ANDLW B'00001111' ;GET LO NIBBLE
0099 0034 00390 MOVWF KEY_NIBL ;SAVE
009A 0C04 00391 MOVLW 4 ;SET COUNT TO 4
009B 0031 00392 MOVWF TEMP ; /
009C 00393 GKV1
009C 0503 00394 BSF STATUS,C ;SET CARRY
009D 0334 00395 RRF KEY_NIBL, F ;ROTATE NIBBLE
009E 0703 00396 BTFSS STATUS,C ;SKIP IF NOT Z
009F 0AA5 00397 GOTO GET_HI_KEY ;GOTO NEXT PART
00A0 02F1 00398 DECFSZ TEMP, F ;DEC COUNT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -