Stopwatch Assembly
Stopwatch Assembly
include p16f84a.inc
ORG 0x00
#DEFINE E PORTA,0
#DEFINE RS PORTA,1
#DEFINE START PORTA,2
#DEFINE STOP PORTA,3
#DEFINE RESET PORTA,4
D1 EQU 0X12
D2 EQU 0X13
D3 EQU 0X14
COUNT1 EQU 0X15
COUNT2 EQU 0X16
pallo
CLRF PORTA
CLRF PORTB
BSF STATUS,RP0
CLRF TRISB
MOVLW 0X1C
MOVWF TRISA
BCF STATUS,RP0
MOVLW 0X01
MOVWF 0X0D
MOVWF 0X0E
MOVWF 0X30
MOVWF 0X31
MOVWF 0X32
CALL DELAY_0.01S
CALL FUNCSET
CALL DIS_ON
CALL ADDRS_START
MOVF 0F,W
CALL TEXT
BSF RS
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
INCF 0F,W
XORLW D'8'
BTFSC 03,02
GOTO $+03
INCF 0F,F
GOTO $-0B
TIME1
CALL ADDRS_TIME
CLRF 0X0F
MOVF 0F,W
CALL TIMER
BSF RS
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
INCF 0F,W
XORLW D'10'
BTFSC 03,02
GOTO SW
INCF 0F,F
GOTO $-0B
SW
BTFSC START
GOTO SW
MMSEC1
CALL ADDRS_START
CLRF 0X0F
MOVF 0F,W
CALL RUN
BSF RS
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
INCF 0F,W
XORLW D'8'
BTFSC 03,02
GOTO MMSEC
INCF 0F,F
GOTO $-0B
MMSEC
CALL ADDRS_MMSEC
ULE
BTFSS STOP
GOTO STOP1
MOVF 0D,W
CALL NO
BSF RS
MOVWF PORTB
CALL PULSE_E
CALL DELAY_0.01S
CALL DIS_CURSOR_SHIFT_LEFT
INCF 0D,W
XORLW D'10'
BTFSC 03,02
GOTO MSEC
INCF 0D,F
BTFSS STOP
GOTO STOP1
GOTO ULE
MSEC
CALL ADDRS_MSEC
MOVF 0E,W
CALL NO
BSF RS
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
CALL ADDRS_MMSEC
CLRF 0D
MOVF 0D,W
CALL NO
BSF RS
MOVWF PORTB
CALL PULSE_E
INCF 0D,F
INCF 0E,W
XORLW D'11'
BTFSC 03,02
GOTO SEC
INCF 0E,F
GOTO MMSEC
ADDRS_MMSEC
BCF RS
CALL Delay_125ms
MOVLW 0xCA
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
RETURN
SEC
CALL ADDRS_SEC
MOVF 30,W
CALL NO
BSF RS
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
CALL ADDRS_MSEC
CLRF 0E
MOVF 0E,W
CALL NO
BSF RS
MOVWF PORTB
CALL PULSE_E
INCF 0E,F
CALL ADDRS_MMSEC
CLRF 0D
MOVF 0D,W
CALL NO
BSF RS
MOVWF PORTB
CALL PULSE_E
INCF 0D,F
INCF 30,W
XORLW D'7'
BTFSC 03,02
GOTO NEXT_SEC
INCF 30,F
GOTO MMSEC
NEXT_SEC
CALL ADDRS_NEXTSEC
MOVF 31,W
CALL NO
BSF RS
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
CALL ADDRS_SEC
CLRF 30
MOVF 30,W
CALL NO
BSF RS
MOVWF PORTB
CALL PULSE_E
INCF 30,F
CALL ADDRS_MSEC
CLRF 0E
MOVF 0E,W
CALL NO
BSF RS
MOVWF PORTB
CALL PULSE_E
INCF 0E,F
CALL ADDRS_MMSEC
CLRF 0D
MOVF 0D,W
CALL NO
BSF RS
MOVWF PORTB
CALL PULSE_E
INCF 0D,F
INCF 31,W
XORLW D'11'
BTFSC 03,02
GOTO $+3
INCF 31,F
GOTO MMSEC
STOP1
CALL ADDRS_START
CLRF 0X0F
STOPT
MOVF 0F,W
CALL TEXT_STOP1
BSF RS
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
INCF 0F,W
XORLW D'8'
BTFSC 03,02
GOTO BENTI
INCF 0F,F
GOTO STOPT
BENTI
BTFSS RESET
GOTO pallo
BTFSS START
GOTO MMSEC1
GOTO BENTI
PULSE_E
Call Delay_125ms
BSF E
Call Delay_125ms
BCF E
CALL Delay_125ms
RETLW 0
NO
MOVWF PCL
RETLW '0'
RETLW '1'
RETLW '2'
RETLW '3'
RETLW '4'
RETLW '5'
RETLW '6'
RETLW '7'
RETLW '8'
RETLW '9'
TEXT
MOVWF PCL
RETLW 'S'
RETLW 'T'
RETLW 'A'
RETLW 'R'
RETLW 'T'
RETLW 0X20
RETLW 0X20
RETLW 0X20
RUN
MOVWF PCL
RETLW 'R'
RETLW 'U'
RETLW 'N'
RETLW 'N'
RETLW 'I'
RETLW 'N'
RETLW 'G'
RETLW '!'
TIMER
MOVWF PCL
RETLW '0'
RETLW '0'
RETLW ':'
RETLW '0'
RETLW '0'
RETLW ':'
RETLW '0'
RETLW '0'
RETLW '.'
RETLW '0'
TEXT_STOP1
MOVWF PCL
RETLW 'S'
RETLW 'T'
RETLW 'O'
RETLW 'P'
RETLW '!'
RETLW '!'
RETLW 0X20
RETLW 0X20
FUNCSET
BCF RS
CALL Delay_125ms
MOVLW 0x38
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
RETURN
DIS_ON
BCF RS
CALL Delay_125ms
MOVLW 0x0C
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
RETURN
ENTRY_MODE
BCF RS
CALL Delay_125ms
MOVLW 0x06
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
RETURN
ADDRS_MSEC
BCF RS
CALL Delay_125ms
MOVLW 0xC8
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
RETURN
ADDRS_SEC
BCF RS
CALL Delay_125ms
MOVLW 0xC7
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
RETURN
ADDRS_NEXTSEC
BCF RS
CALL Delay_125ms
MOVLW 0xC5
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
RETURN
ADDRS_START
BCF RS
CALL Delay_125ms
MOVLW 0x85
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
RETURN
ADDRS_TIME
BCF RS
CALL Delay_125ms
MOVLW 0xC1
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
RETURN
DIS_CURSOR_SHIFT_LEFT
BCF RS
CALL Delay_125ms
MOVLW 0x10
MOVWF PORTB
CALL PULSE_E
CALL Delay_125ms
RETURN
;------Delay-delay------
DELAY_0.1S
MOVLW D'50'
MOVWF D3
MOVLW D'13'
MOVWF D2
MOVLW D'50'
MOVWF D1
DECFSZ D1
GOTO $-1
DECFSZ D2
GOTO $-5
DECFSZ D3
GOTO $-9
RETURN
DELAY_0.01S
MOVLW D'50'
MOVWF D3
MOVLW D'14'
MOVWF D2
MOVLW D'50'
MOVWF D1
DECFSZ D1
GOTO $-1
DECFSZ D2
GOTO $-5
DECFSZ D3
GOTO $-9
RETURN
Delay_125ms
MOVLW D'42' ;Repeat 42 cycle
MOVWF COUNT1
DECFSZ COUNT1
GOTO $-1
RETURN