?? clock.lst
字號:
00D6 0E36 00370 SWAPF CHAR, W
00D7 390F 00371 ANDLW 0x0F ; Get upper nibble
00D8 0086 00372 MOVWF LCD_DATA ; Send data to LCD
00D9 1085 00373 BCF LCD_CNTL, RW ; Set LCD to read
00DA 1505 00374 BSF LCD_CNTL, RS ; Set LCD to data mode
00DB 1405 00375 BSF LCD_CNTL, E ; toggle E for LCD
00DC 1005 00376 BCF LCD_CNTL, E
00DD 0836 00377 MOVF CHAR, W
00DE 390F 00378 ANDLW 0x0F ; Get lower nibble
00DF 0086 00379 MOVWF LCD_DATA ; Send data to LCD
00E0 1405 00380 BSF LCD_CNTL, E ; toggle E for LCD
00E1 1005 00381 BCF LCD_CNTL, E
00E2 0008 00382 RETURN
00383
00384 ;*******************************************************************
00385 ;* SendCmd - Sends command to LCD *
00386 ;* This routine splits the command into the upper and lower *
00387 ;* nibbles and sends them to the LCD, upper nibble first. *
00388 ;* The data is transmitted on the PORT<3:0> pins *
00389 ;*******************************************************************
00390
00E3 00391 SEND_CMD
00E3 00B6 00392 MOVWF CHAR ; Character to be sent is in W
00E4 20F2 00393 CALL BUSY_CHECK ; Wait for LCD to be ready
00E5 0E36 00394 SWAPF CHAR, W
00E6 390F 00395 ANDLW 0x0F ; Get upper nibble
00E7 0086 00396 MOVWF LCD_DATA ; Send data to LCD
00E8 1085 00397 BCF LCD_CNTL, RW ; Set LCD to read
00E9 1105 00398 BCF LCD_CNTL, RS ; Set LCD to command mode
00EA 1405 00399 BSF LCD_CNTL, E ; toggle E for LCD
00EB 1005 00400 BCF LCD_CNTL, E
00EC 0836 00401 MOVF CHAR, W
00ED 390F 00402 ANDLW 0x0F ; Get lower nibble
00EE 0086 00403 MOVWF LCD_DATA ; Send data to LCD
00EF 1405 00404 BSF LCD_CNTL, E ; toggle E for LCD
00F0 1005 00405 BCF LCD_CNTL, E
00F1 0008 00406 RETURN
MPASM 01.40 Released CLOCK.ASM 1-16-1997 17:05:59 PAGE 10
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00407 page
00408 ;*******************************************************************
00409 ;* This routine checks the busy flag, returns when not busy *
00410 ;* Affects: *
00411 ;* TEMP - Returned with busy/address *
00412 ;*******************************************************************
00413
00F2 00414 BUSY_CHECK
00415 ;
00416 if ( Debug )
00417 BSF PORTD, 3
00418 BCF PORTD, 3
00419 endif
00F2 0186 00420 CLRF LCD_DATA ;** Have PORTB<3:0> output low
00F3 1683 00421 BSF STATUS, RP0 ; Bank 1
00F4 1781 00422 BSF OPTION_REG, NOT_RBPU ; Turn off PORTB Pull-up
00F5 30FF 00423 MOVLW 0xFF ; Set PortB for input
00F6 0086 00424 MOVWF LCD_DATA_TRIS
00F7 1283 00425 BCF STATUS, RP0 ; Bank 0
00F8 1105 00426 BCF LCD_CNTL, RS ; Set LCD for Command mode
00F9 1485 00427 BSF LCD_CNTL, RW ; Setup to read busy flag
00FA 1405 00428 BSF LCD_CNTL, E ; Set E high
00FB 1005 00429 BCF LCD_CNTL, E ; Set E low
00FC 0E06 00430 SWAPF LCD_DATA, W ; Read upper nibble busy flag, DDRam address
00FD 39F0 00431 ANDLW 0xF0 ; Mask out lower nibble
00FE 00B5 00432 MOVWF TEMP ;
00FF 1405 00433 BSF LCD_CNTL, E ; Toggle E to get lower nibble
0100 1005 00434 BCF LCD_CNTL, E
0101 0806 00435 MOVF LCD_DATA, W ; Read lower nibble busy flag, DDRam address
0102 390F 00436 ANDLW 0x0F ; Mask out upper nibble
0103 04B5 00437 IORWF TEMP, F ; Combine nibbles
0104 1BB5 00438 BTFSC TEMP, 7 ; Check busy flag, high = busy
0105 28F2 00439 GOTO BUSY_CHECK ; If busy, check again
0106 1085 00440 BCF LCD_CNTL, RW
0107 1683 00441 BSF STATUS, RP0 ; Bank 1
0108 30F0 00442 MOVLW 0xF0 ;
0109 0086 00443 MOVWF LCD_DATA_TRIS ; RB7 - 4 = inputs, RB3 - 0 = output
010A 1283 00444 BCF STATUS, RP0 ; Bank 0
010B 0008 00445 RETURN
00446 ;
MPASM 01.40 Released CLOCK.ASM 1-16-1997 17:05:59 PAGE 11
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00447 page
00448 ;
00449 ;******************************************************************************
00450 ;***** Start program here, Power-On Reset occurred.
00451 ;******************************************************************************
00452 ;
010C 00453 START ; POWER_ON Reset (Beginning of program)
010C 1283 00454 BCF STATUS, RP0 ; Bank 0
010D 300C 00455 MOVLW 0x0C ; Decimal 12
010E 00B0 00456 MOVWF HRS ; HOURS = 12
010F 01B1 00457 CLRF MIN ; MIN = 00
0110 3000 00458 MOVLW 0x00 ;
0111 00A0 00459 MOVWF FLAG_REG ; PM light is on
0112 3004 00460 MOVLW 0x04 ; Initial value of seconds (64d - 60d)
0113 00B2 00461 MOVWF SECS ; This allows a simple bit test to see if 60
00462 ; secs has elapsed.
0114 3080 00463 MOVLW 0x80 ; TIM1H:TMR1L = 0x8000 gives 1 second
0115 008F 00464 MOVWF TMR1H ; overflow, at 32 KHz.
0116 018E 00465 CLRF TMR1L ;
00466 ;
0117 00467 MCLR_RESET ; A Master Clear Reset
0117 0183 00468 CLRF STATUS ; Do initialization (Bank 0)
0118 018B 00469 CLRF INTCON
0119 018C 00470 CLRF PIR1
011A 1683 00471 BSF STATUS, RP0 ; Bank 1
011B 3000 00472 MOVLW 0x00 ; The LCD module does not like to work w/ weak pull-ups
011C 0081 00473 MOVWF OPTION_REG ;
011D 018C 00474 CLRF PIE1 ; Disable all peripheral interrupts
011E 30FF 00475 MOVLW 0xFF ;
011F 009F 00476 MOVWF ADCON1 ; Port A is Digital (for 16C7x devices).
00477 ;
00478 ;
0120 1283 00479 BCF STATUS, RP0 ; Bank 0
0121 0185 00480 CLRF PORTA ; ALL PORT output should output Low.
0122 0186 00481 CLRF PORTB
0123 0187 00482 CLRF PORTC
0124 0188 00483 CLRF PORTD
0125 0189 00484 CLRF PORTE
0126 1010 00485 BCF T1CON, TMR1ON ; Timer 1 is NOT incrementing
00486 ;
0127 1683 00487 BSF STATUS, RP0 ; Select Bank 1
0128 0185 00488 CLRF TRISA ; RA5 - 0 outputs
0129 30F0 00489 MOVLW 0xF0 ;
012A 0086 00490 MOVWF TRISB ; RB7 - 4 inputs, RB3 - 0 outputs
012B 0187 00491 CLRF TRISC ; RC Port are outputs
012C 1407 00492 BSF TRISC, T1OSO ; RC0 needs to be input for the oscillator to function
012D 0188 00493 CLRF TRISD ; RD Port are outputs
012E 0189 00494 CLRF TRISE ; RE Port are outputs
012F 140C 00495 BSF PIE1, TMR1IE ; Enable TMR1 Interrupt
0130 1381 00496 BCF OPTION_REG, NOT_RBPU ; Enable PORTB pull-ups
0131 1283 00497 BCF STATUS, RP0 ; Select Bank 0
0132 0886 00498 MOVF PORTB, F ; Need to clear 1st RBIF, due to
0133 100B 00499 BCF INTCON, RBIF ; set up of PORTB
00500 ;
MPASM 01.40 Released CLOCK.ASM 1-16-1997 17:05:59 PAGE 12
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00501 page
00502 ;
00503 ; Initilize the LCD Display Module
00504 ;
0134 0185 00505 CLRF LCD_CNTL ; ALL PORT output should output Low.
00506
0135 00507 DISPLAY_INIT
0135 3002 00508 MOVLW 0x02 ; Command for 4-bit interface
0136 0086 00509 MOVWF LCD_DATA ;
0137 1405 00510 BSF LCD_CNTL, E ;
0138 1005 00511 BCF LCD_CNTL, E ;
00512 ;
00513 ; This routine takes the calculated times that the delay loop needs to
00514 ; be executed, based on the LCD_INIT_DELAY EQUate that includes the
00515 ; frequency of operation. These uses registers before they are needed to
00516 ; store the time.
00517 ;
0139 3006 00518 LCD_DELAY MOVLW LCD_INIT_DELAY ;
013A 00B3 00519 MOVWF MSD ; Use MSD and LSD Registers to Initilize LCD
013B 01B4 00520 CLRF LSD ;
013C 0BB4 00521 LOOP2 DECFSZ LSD, F ; Delay time = MSD * ((3 * 256) + 3) * Tcy
013D 293C 00522 GOTO LOOP2 ;
013E 0BB3 00523 DECFSZ MSD, F ;
013F 00524 END_LCD_DELAY
013F 293C 00525 GOTO LOOP2 ;
00526 ;
00527 ; Command sequence for 2 lines of 5x7 characters
00528 ;
0140 3002 00529 CMD_SEQ MOVLW 0X02
0141 0086 00530 MOVWF LCD_DATA
0142 1405 00531 BSF LCD_CNTL, E ;
0143 1005 00532 BCF LCD_CNTL, E ;
0144 3008 00533 MOVLW 0x08 ;
0145 0086 00534 MOVWF LCD_DATA ;
0146 1405 00535 BSF LCD_CNTL, E ;
0147 1005 00536 BCF LCD_CNTL, E ;
00537 ;
00538 ; Busy Flag should be valid after this point
00539 ;
0148 300C 00540 MOVLW DISP_ON ;
0149 20E3 00541 CALL SEND_CMD ;
014A 3001 00542 MOVLW CLR_DISP ;
014B 20E3 00543 CALL SEND_CMD ;
014C 3006 00544 MOVLW ENTRY_INC ;
014D 20E3 00545 CALL SEND_CMD ;
014E 3080 00546 MOVLW DD_RAM_ADDR ;
014F 20E3 00547 CALL SEND_CMD ;
00548 ;
MPASM 01.40 Released CLOCK.ASM 1-16-1997 17:05:59 PAGE 13
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00549 page
00550 ;
00551 ; Initialize the Special Function Registers (SFR) interrupts
00552 ;
0150 018C 00553 CLRF PIR1 ;
0151 300E 00554 MOVLW 0x0E
0152 0090 00555 MOVWF T1CON ; RC1 is overridden by TCKO
0153 170B 00556 BSF INTCON, PEIE ; Enable Peripheral Interrupts
0154 158B 00557 BSF INTCON, RBIE ; Disable PORTB<7:4> Change Interrupts
0155 178B 00558 BSF INTCON, GIE ; Enable all Interrupts
00559 ;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -