__config 3ffa ;Clock Program ;PIC Registers INDR EQU 0x00 PCL EQU 0x02 STATUS EQU 0x03 ;Used for Zero bit FSR EQU 0x04 PORTA EQU 0x05 PORTB EQU 0x06 PCLATH EQU 0x0A ;PIC Bits W EQU 0 F EQU 1 ZERO EQU 2 ;Project Registers HRTWO EQU 0x10 ;Count 0 - 2. Updated every 10 Hours. Left hand display digit. HRTEN EQU 0x11 ;Count 0 - 9. Updated every Hour. Second display digit. MINSIX EQU 0x12 ;Count 0 - 5. Updated every 10 Minutes. Third display digit. MINTEN EQU 0x13 ;Count 0 - 9. Updated every Minute. Fourth display digit. LETU EQU 0x14 ;Letter U. Fifth display digit. LETT EQU 0x15 ;Letter T. Sixth display digit. LETC EQU 0x16 ;Letter C. Seventh display digit. BLANK EQU 0x16 ;Unused eighth display digit. COUNT EQU 0x18 ;Count 0 - 200. Updated every 5mS CNT2 EQU 0x19 ;Count 0 - 5. Updated every 1mS SECS EQU 0x1A ;Count 0 - 59. Updated every 1mS HOURS EQU 0x1B ;Count 0 - 23. Updated every Hour CHAR EQU 0x1C ;Display Digit 0-7 DIGIT EQU 0x1D ;PortA Count (0-28 in 4's) DELAY EQU 0x1E ;Delay Count ;Project Bits ;START!!! ORG 5 ;Initialise BSF STATUS, 5 ; MOVLW 0x03 MOVWF PORTA ;PORTA = Bits 2-5 = Output, 0-1 = Input CLRF PORTB ;PORTB = Output BCF STATUS, 5 ; CLRF PCLATH CLRF CHAR CLRF DIGIT CLRF COUNT CLRF CNT2 CLRF SECS MOVLW 0x00 MOVWF MINTEN MOVLW 0x00 MOVWF MINSIX MOVLW 0x02 MOVWF HRTEN MOVLW 0x01 MOVWF HRTWO MOVLW 0x0C MOVWF HOURS MOVLW 0x0A MOVWF LETU MOVLW 0x0B MOVWF LETT MOVLW 0x0C MOVWF LETC ;Update Display TICK MOVLW 0xFF MOVWF PORTB ;Clear Display MOVF DIGIT, W ;Update PortA ADDLW 0x04 ANDLW 0x1C MOVWF DIGIT MOVWF PORTA INCF CHAR, W ;Update character ANDLW 0x07 MOVWF CHAR ADDLW 0x10 MOVWF FSR MOVF INDR, W ;Get char ANDLW 0x0F CALL TABLE ;Returns with display in W MOVWF PORTB MOVLW 0xC9 MOVWF DELAY LOOP1 DECFSZ DELAY, F GOTO LOOP1 MOVLW 0x79 MOVWF DELAY LOOP2 DECFSZ DELAY, F GOTO LOOP2 NOP ;Each NOP adds 1 second per 1000. NOP INCF CNT2, F ;End of 1mS loop MOVF CNT2, W SUBLW 0x05 BTFSS STATUS, ZERO ;5mS? GOTO TICK ;No CLRF CNT2 ;Yes NOP ;Each NOP adds 1 second per 5000. INCF COUNT, F ;End of 5mS loop MOVF COUNT, W SUBLW 0xC8 BTFSS STATUS, ZERO ;One Second? GOTO TICK ;No CLRF COUNT ;Yes NOP ;Each NOP adds 1 second per 1,000,000. BTFSS PORTA, 0 GOTO INCMIN BTFSS PORTA, 1 GOTO INCHR INCF SECS, F ;End of 1 Second loop MOVF SECS, W SUBLW 0x3C BTFSS STATUS, ZERO ;One Minute? GOTO TICK ;No CLRF SECS ;Yes NOP ;Each NOP adds 1 second per 60,000,000. INCMIN INCF MINTEN, F ;End of 1 Minute loop MOVF MINTEN, W SUBLW 0x0A BTFSS STATUS, ZERO ;Ten Minutes? GOTO TICK ;No CLRF MINTEN ;Yes INCF MINSIX, F ;End of 10 Minute loop MOVF MINSIX, W SUBLW 0x06 BTFSS STATUS, ZERO ;One Hour? GOTO TICK ;No CLRF MINSIX ;Yes INCHR INCF HOURS, F ;End of 1 Hour loop INCF HRTEN, F MOVF HRTEN, W SUBLW 0x0A BTFSS STATUS, ZERO ;Ten Hours? GOTO H1 ;No CLRF HRTEN ;Yes INCF HRTWO, F ;End of 10 Hour loop GOTO TICK H1 MOVF HOURS, W SUBLW 0x18 BTFSS STATUS, ZERO ;24 Hours? GOTO TICK ;No CLRF HOURS CLRF HRTEN CLRF HRTWO GOTO TICK TABLE: ADDWF PCL, F RETLW 0x01 ;Zero RETLW 0x57 ;One RETLW 0x22 ;Two RETLW 0x12 ;Three RETLW 0x54 ;Four RETLW 0x18 ;Five RETLW 0x08 ;Six RETLW 0x53 ;Seven RETLW 0x00 ;Eight RETLW 0x50 ;Nine RETLW 0x0F ;10 = "U" RETLW 0x2C ;11 = "T" RETLW 0x2E ;12 = "C" RETLW 0xFF ;13 RETLW 0xFF ;14 RETLW 0xFF ;15 RETLW 0xFF ;16 END