⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.lst

📁 Low-Power Real-Time Clock
💻 LST
📖 第 1 页 / 共 5 页
字号:
005D 300C           00181                 MOVLW   0x0C            ; It is now 12:00, Toggle AM / PM
005E 0230           00182                 SUBWF   HRS, W          ;
005F 1D03           00183                 BTFSS   STATUS, Z       ;
0060 2867           00184                 GOTO    CK_13           ; Need to check if HRS = 13
0061 1FA0           00185                 BTFSS   FLAG_REG, AM    ; Was it AM or PM
0062 2865           00186                 GOTO    SET_AM          ; Was PM, Needs to be AM
0063 13A0           00187                 BCF     FLAG_REG, AM    ; It is PM
0064 2875           00188                 GOTO    DISPLAY         ;
0065 17A0           00189 SET_AM          BSF     FLAG_REG, AM    ; It is AM
0066 2875           00190                 GOTO    DISPLAY         ;
                    00191 
0067 300D           00192 CK_13           MOVLW   0x0D                    ; Check if HRS = 13
0068 0230           00193                 SUBWF   HRS, W                  ;
0069 1D03           00194                 BTFSS   STATUS, Z               ;
006A 2875           00195                 GOTO    DISPLAY                 ;
006B 01B0           00196                 CLRF    HRS                     ;
006C 0AB0           00197                 INCF    HRS, F                  ;
006D 2875           00198                 GOTO    DISPLAY                 ;
                    00199 ;
MPASM 01.40 Released            CLOCK.ASM   1-16-1997  17:05:59         PAGE  6


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                    00200         page
006E                00201 INIT_DISPLAY
006E 300C           00202                 MOVLW   DISP_ON                 ; Display On, Cursor On
006F 20E3           00203                 CALL    SEND_CMD                ; Send This command to the Display Module
0070 3001           00204                 MOVLW   CLR_DISP                ; Clear the Display
0071 20E3           00205                 CALL    SEND_CMD                ; Send This command to the Display Module
0072 3006           00206                 MOVLW   ENTRY_INC               ; Set Entry Mode Inc., No shift
0073 20E3           00207                 CALL    SEND_CMD                ; Send This command to the Display Module
0074 0008           00208                 RETURN
                    00209 ;
0075                00210 DISPLAY
0075 3080           00211                 MOVLW   DD_RAM_ADDR             ;
0076 20E3           00212                 CALL    SEND_CMD                ;
                    00213 ;
0077 1A20           00214                 BTFSC   FLAG_REG, KEY_INPUT     ; Do we need to flash the selectected units?
0078 287D           00215                 GOTO    FLASH_UNITS             ; YES, we need to flash selected units
0079 20A4           00216                 CALL    LOAD_HRS                ; NO, do a normal display
007A 20AD           00217                 CALL    LOAD_COLON              ;
007B 20B2           00218                 CALL    LOAD_MIN                ;
007C 28BB           00219                 GOTO    LOAD_AM                 ;
                    00220 ;
007D                00221 FLASH_UNITS
007D 018A           00222                 CLRF    PCLATH                  ; This clears PCLATH, This table in 1st
007E 0820           00223                 MOVF    FLAG_REG, W             ;    256 bytes of program memory
007F 3903           00224                 ANDLW   0x03                    ; only HR_UNIT and MIN_UNIT bit can be non-zero
0080                00225 UNIT_TBL
0080 0782           00226                 ADDWF   PCL, F                  ; HR_UNIT:MIN_UNIT
0081 289F           00227                 GOTO    NO_UNITS                ;       0 0        - Display everything.
0082 2887           00228                 GOTO    HR_UNITS                ;       0 1        - Flash the hour units
0083 2893           00229                 GOTO    MIN_UNITS               ;       1 0        - Flash the minute units
0084                00230 UNIT_TBL_END
0084 30FC           00231                 MOVLW   0xFC                    ;       1 1        - Need to clear FLAG_REG<HR_UNIT:MIN_UN
                          IT>
0085 05A0           00232                 ANDWF   FLAG_REG, F             ;
0086 289F           00233                 GOTO    NO_UNITS                ;       0 0        - Display everything.
                    00234 ;
                    00235         if ( (UNIT_TBL & 0x0FF) >= (UNIT_TBL_END & 0x0FF) )
                    00236        MESSG   "Warning: Table UNIT_TBL crosses page boundry in computed jump"
                    00237     endif
                    00238 ;
                    00239 ;
0087                00240 HR_UNITS
0087 1C40           00241                 BTFSS   WAIT_CNTR, 0            ; If WAIT_CNTR is odd,
                    00242                                                 ;    hour digits are displayed as blank
0088 288D           00243                 GOTO    SKIP_BLK_HRS            ;
0089 3020           00244                 MOVLW   ' '                     ;
008A 20D4           00245                 CALL    SEND_CHAR               ;
008B 3020           00246                 MOVLW   ' '                     ;
008C 20D4           00247                 CALL    SEND_CHAR               ;
008D                00248 SKIP_BLK_HRS
008D 1C40           00249                 BTFSS   WAIT_CNTR, 0            ; WAIT_CNTR was even, display hour digits
008E 20A4           00250                 CALL    LOAD_HRS                ;
                    00251 ;
008F 303A           00252                 MOVLW   ':'                     ; : always on, display all other character
0090 20D4           00253                 CALL    SEND_CHAR               ;
0091 20B2           00254                 CALL    LOAD_MIN                ;
0092 28BB           00255                 GOTO    LOAD_AM                 ;
                    00256 ;
MPASM 01.40 Released            CLOCK.ASM   1-16-1997  17:05:59         PAGE  7


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                    00257         page
0093                00258 MIN_UNITS
0093 20A4           00259                 CALL    LOAD_HRS                ; Display hours
0094 303A           00260                 MOVLW   ':'                     ; : always on
0095 20D4           00261                 CALL    SEND_CHAR               ;
0096 1C40           00262                 BTFSS   WAIT_CNTR, 0            ; If WAIT_CNTR is odd,
                    00263                                                 ;    minute digits are displayed as blank
0097 289C           00264                 GOTO    SKIP_BLK_MIN            ;
0098 3020           00265                 MOVLW   ' '                     ;
0099 20D4           00266                 CALL    SEND_CHAR               ;
009A 3020           00267                 MOVLW   ' '                     ;
009B 20D4           00268                 CALL    SEND_CHAR               ;
009C                00269 SKIP_BLK_MIN
009C 1C40           00270                 BTFSS   WAIT_CNTR, 0            ; WAIT_CNTR was even, display minute digits
009D 20B2           00271                 CALL    LOAD_MIN                ;
009E 28BB           00272                 GOTO    LOAD_AM                 ;
                    00273 ;                       
009F                00274 NO_UNITS
009F 20A4           00275                 CALL    LOAD_HRS                ; Display all character
00A0 303A           00276                 MOVLW   ':'                     ;
00A1 20D4           00277                 CALL    SEND_CHAR               ;
00A2 20B2           00278                 CALL    LOAD_MIN                ;
00A3 28BB           00279                 GOTO    LOAD_AM                 ;
                    00280 ;
00A4                00281 LOAD_HRS
00A4 0830           00282                 MOVF    HRS, W                  ; Load the Wreg with the value 
00A5 20C7           00283                 CALL    BIN_2_BCD               ;   to convert to BCD
00A6 0833           00284                 MOVF    MSD, W                  ; Load the MSD value into the Wreg
00A7 2400           00285                 CALL    NUM_TABLE               ; Get the ASCII code
00A8 20D4           00286                 CALL    SEND_CHAR               ; Send this Character to the Display
                    00287 ;
00A9 0834           00288                 MOVF    LSD, W                  ; Load the LSD value into the Wreg
00AA 2400           00289                 CALL    NUM_TABLE               ; Get the ASCII code
00AB 20D4           00290                 CALL    SEND_CHAR               ; Send this Character to the Display
00AC 0008           00291                 RETURN
                    00292 ;
00AD 3020           00293 LOAD_COLON      MOVLW   ' '                     ; ASCII value for a Blank space
00AE 1832           00294                 BTFSC   SECS, 0                 ; Is it an EVEN or ODD second
00AF 3E1A           00295                 ADDLW   ':' - ' '               ; Is ODD, Second colon is ON.
                    00296                                                 ;   Add delta offset of ASCII Characters
00B0 20D4           00297                 CALL    SEND_CHAR               ; Send this Character to the Display
00B1 0008           00298                 RETURN
                    00299 ;
00B2                00300 LOAD_MIN
00B2 0831           00301                 MOVF    MIN, W                  ; Load the Wreg with the value 
00B3 20C7           00302                 CALL    BIN_2_BCD               ;   to convert to BCD
00B4 0833           00303                 MOVF    MSD, W                  ; Load the MSD value into the Wreg
00B5 2400           00304                 CALL    NUM_TABLE               ; Get the ASCII code
00B6 20D4           00305                 CALL    SEND_CHAR               ; Send this Character to the Display
                    00306 ;
00B7 0834           00307                 MOVF    LSD, W                  ; Load the LSD value into the Wreg
00B8 2400           00308                 CALL    NUM_TABLE               ; Get the ASCII code
00B9 20D4           00309                 CALL    SEND_CHAR               ; Send this Character to the Display
00BA 0008           00310                 RETURN
                    00311 ;
MPASM 01.40 Released            CLOCK.ASM   1-16-1997  17:05:59         PAGE  8


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                    00312         page
00BB 3020           00313 LOAD_AM         MOVLW   ' '                     ; ASCII value for a Blank space
00BC 20D4           00314                 CALL    SEND_CHAR               ; Send this Character to the Display
00BD 3041           00315                 MOVLW   'A'                     ; ASCII value for a Blank space
00BE 1FA0           00316                 BTFSS   FLAG_REG, AM            ; Is it AM or PM
00BF 3E0F           00317                 ADDLW   'P' - 'A'               ; Is PM, Add delta offset of ASCII Characters
00C0 20D4           00318                 CALL    SEND_CHAR               ; Send this Character to the Display
00C1 304D           00319                 MOVLW   'M'
00C2 20D4           00320                 CALL    SEND_CHAR               ; Send this Character to the Display
                    00321 ;
00C3 1683           00322                 BSF     STATUS, RP0             ; Bank 1
00C4 1381           00323                 BCF     OPTION_REG, NOT_RBPU            ; Turn on PORTB Pull-up
00C5 1283           00324                 BCF     STATUS, RP0             ; Bank 0
00C6 2823           00325                 GOTO    CLR_RB                  ; You've displayed the time, Clear RBIF 
                    00326 ;
                    00327 ;
                    00328 ;******************************************************************************
                    00329 ; The BIN_2_BCD routine converts the binary number, in the W register, to a 
                    00330 ; binary coded decimal (BCD) munber. This BCD number is stored MSD:LSD. This
                    00331 ; routine is used by the DISPLAY subroutine, to convert the time values.
                    00332 ;******************************************************************************
                    00333 ;
00C7 01B3           00334 BIN_2_BCD   CLRF    MSD                 ; This value contain the 10's digit value
00C8 00B4           00335             MOVWF   LSD                 ; This value contain the 1's digit value
00C9 300A           00336 TENS_SUB    MOVLW   .10                 ; A decimal 10
00CA 0234           00337             SUBWF   LSD, W              ;
00CB 1C03           00338             BTFSS   STATUS, C           ; Did this subtract cause a Negative Result?
00CC 3400           00339             RETLW   0                   ; YES, Return from this Routine
00CD 00B4           00340             MOVWF   LSD                 ; No, move the result into LSD
00CE 0AB3           00341             INCF    MSD, F              ; Increment the most significat digit
00CF 28C9           00342             GOTO    TENS_SUB            ;
                    00343 ;                       
                    00344 ;
                    00345 ; Should NEVER get here
                    00346 ;
00D0 1283           00347 ERROR1      BCF     STATUS, RP0         ; Bank 0
                    00348 ;
                    00349         if ( Debug )
                    00350             BSF     PORTD, 1
                    00351             BCF     PORTD, 1
                    00352         else
00D1 1407           00353             BSF     PORTC, 0
00D2 1007           00354             BCF     PORTC, 0
                    00355         endif
00D3 28D0           00356             GOTO    ERROR1
                    00357 ;
MPASM 01.40 Released            CLOCK.ASM   1-16-1997  17:05:59         PAGE  9


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                    00358         page
                    00359 ;
                    00360 ;*******************************************************************
                    00361 ;* SendChar - Sends character to LCD                               *
                    00362 ;* This routine splits the character into the upper and lower      * 
                    00363 ;* nibbles and sends them to the LCD, upper nibble first.          *
                    00364 ;* The data is transmitted on the PORT<3:0> pins                   *
                    00365 ;*******************************************************************
                    00366 
00D4                00367 SEND_CHAR
00D4 00B6           00368             MOVWF   CHAR                ; Character to be sent is in W
00D5 20F2           00369             CALL    BUSY_CHECK          ; Wait for LCD to be ready

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -