📄 ex1101.asm
字号:
;
; LCD + REAL TIME CLOCK
;
LIST P=16F877, R=DEC
#INCLUDE P16F877.INC
CBLOCK 0X20
ENDC
;
; define RAM
;
CBLOCK
SECS,MINS,HRS
W_BAK, STATUS_BAK ; back up RAM for w register
BCDBFH, BCDBFL ; buffers for HEX to BCD converter
ENDC
;
;.......................................................................
;
ORG 0
NOP
GOTO MAIN ; reset vector
;
;
ORG 4 ; interrupt vector
;
MOVWF W_BAK ; save w register
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_BAK ; save status register
;
call L2homeLCD ; prepair for next writing
;
MOVLW H'80' ;
ADDWF TMR1H,F ; restore timer1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TMR1L need not be restored ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
INCF SECS,F
MOVLW .60
SUBWF SECS,W
SKPC
GOTO INTRPT_1
;
MOVWF SECS ; 60 sec = 1 min
INCF MINS,F
MOVLW .60
SUBWF MINS,W
SKPC
GOTO INTRPT_1
;
MOVWF MINS ; 60 min = 1 hour
INCF HRS,F
MOVLW .24
SUBWF HRS,W
SKPNC
MOVWF HRS ; 24 hr = 00 hr
INTRPT_1:
MOVLW 3
CALL movcurLCD ; move cursor right 3 positions
;
MOVF HRS,W ; put hour
CALL HX2BCD
MOVF BCDBFL,W
CALL putHexLCD
MOVLW ":"
CALL putcLCD
;
MOVF MINS,W ; put minute
CALL HX2BCD
MOVF BCDBFL,W
CALL putHexLCD
MOVLW ":"
CALL putcLCD
;
MOVF SECS,W ; put sconds
CALL HX2BCD
MOVF BCDBFL,W
CALL putHexLCD
;
BANKSEL PIR1
BCF PIR1,TMR1IF ; clear timer1 interrupt flag
;
BANKSEL STATUS_BAK
SWAPF STATUS_BAK,W
MOVWF STATUS ; restore STATUS
SWAPF W_BAK,F
SWAPF W_BAK,W ; restore w register without affecting status
RETFIE
;
;.....................................................
;
MAIN:
call InitLCD
call clrLCD
;
;************************************************
;* - Initialize Timer1 with 8000h(32768) *
;* - Configure Timer1 *
;* - Prescale 1:1 *
;* - Enable Oscillator *
;* - DO NOT SYNCHRONIZE *
;* - External Clock Source *
;* - Enable Timer1 *
;* - Clear Timer1 Overflow Interrupt Flag *
;* - Enable Timer1 Overflow Interrupt *
;* - Enable Peripheral Interrupts *
;* - Enable Global Interrupts *
;************************************************
BANKSEL TMR1H
MOVLW H'80'
MOVWF TMR1H
CLRF TMR1L ; 8000H=32768
MOVLW B'00001111'
MOVWF T1CON
;
BANKSEL PIR1
BCF PIR1,TMR1IF
;
BANKSEL PIE1
BSF PIE1,TMR1IE
;
BANKSEL SECS
BSF INTCON,PEIE
BSF INTCON,GIE
;
CLRF SECS
CLRF MINS
CLRF HRS
;
MAIN1:
SLEEP
GOTO MAIN1
;
;...............................................................
;
;
;---------------------------------------------------------------;
;
#INCLUDE <LCD.INC> ;
;
; Defines for I/O ports that provide LCD data & control ;
;
LCD_DATA equ PORTB ;
LCD_CNTL equ PORTB ;
;
RS equ 5 ; RS=PORTB,5 ;
E equ 4 ;
;
;===============================================================;
;---------------------------------------------------------------;
;
#INCLUDE <HX2BCD.INC> ;
;
;===============================================================;
;
;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -