92% found this document useful (13 votes)
2K views8 pages

Stopwatch Assembly

This document contains code for an LCD display timer program written for a PIC16F84A microcontroller. It defines constants, labels, and functions for initializing the LCD display, writing text and numbers to the display, incrementing the timer values, and resetting or starting the timer. The timer displays hours, minutes, seconds, and milliseconds and is controlled by buttons connected to ports on the microcontroller.

Uploaded by

Mr Predator
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, TXT or read online on Scribd
92% found this document useful (13 votes)
2K views8 pages

Stopwatch Assembly

This document contains code for an LCD display timer program written for a PIC16F84A microcontroller. It defines constants, labels, and functions for initializing the LCD display, writing text and numbers to the display, incrementing the timer values, and resetting or starting the timer. The timer displays hours, minutes, seconds, and milliseconds and is controlled by buttons connected to ports on the microcontroller.

Uploaded by

Mr Predator
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, TXT or read online on Scribd
You are on page 1/ 8

list p=pic16f84a

include p16f84a.inc

;**************** Label Definition ********************

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

;-------ABIH DOH LA----


END

You might also like