?? clock.lst
字號:
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 + -