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

📄 clock.lst

📁 Low-Power Real-Time Clock
💻 LST
📖 第 1 页 / 共 5 页
字号:
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 + -