;================================================================
;
; CLOCK
;
;================================================================
#include <DB038-01.INC> ;my include file
;********************** Header **********************************************
;**************** DEFINING VARIABLES ****************************************
; shadow registers and flush subroutines
FLUSH_MACRO MACRO Shadow, Port
CBLOCK
Shadow
ENDC
MOVFW Shadow
MOVWF Port
RETURN
ENDM
PORTA_FLUSH FLUSH_MACRO PORTA_SHADOW, PORTA
PORTB_FLUSH FLUSH_MACRO PORTB_SHADOW, PORTB
PORTC_FLUSH FLUSH_MACRO PORTC_SHADOW, PORTC
PORTD_FLUSH FLUSH_MACRO PORTD_SHADOW, PORTD
PORTE_FLUSH FLUSH_MACRO PORTE_SHADOW, PORTE
; ===========================================================
; WWAIT
WWAIT
CBLOCK
WWaitCounter
ENDC
MOVLW 0x00
MOVWF WWaitCounter
WWaitLoop
CALL WWaitReturn
DECFSZ WWaitCounter, f
GOTO WWaitLoop
WWaitReturn
RETURN
WContinue
; ===========================================================
; A0..A2 and D and E0..E2 are outputs
BSF STATUS, RP0
MOVLW 0xD8
MOVWF ( 0x80 ^ TRISA )
MOVLW 0x00
MOVWF ( 0x80 ^ TRISD )
MOVLW 0xF8
MOVWF ( 0x80 ^ TRISE )
BCF STATUS, RP0
; ===========================================================
; beep
CBLOCK
WBeepCounter
ENDC
CLRF WBeepCounter
MOVLW H'02'
MOVWF PORTE_SHADOW
CALL PORTE_FLUSH
WBeepLoop
BSF PORTA_SHADOW, 1
CALL PORTA_FLUSH
CALL WWAIT
BCF PORTA_SHADOW, 1
CALL PORTA_FLUSH
CALL WWAIT
DECFSZ WBeepCounter, f
GOTO WBeepLoop
; ===========================================================
; activate the LEDs
BSF PORTA_SHADOW, 2
CALL PORTA_FLUSH
MOVLW H'04'
MOVWF PORTE_SHADOW
CALL PORTE_FLUSH
MOVLW H'55' ^ H'FF'
MOVWF PORTD_SHADOW
CALL PORTD_FLUSH
;************************ MAIN PROGRAM **************************************
main ; Start of the main program
banksel ANSEL ; Bank containing register ANSEL
clrf ANSEL ; Clears registers ANSEL and ANSELH
clrf ANSELH ; All pins are digital
banksel TRISB ; Selects bank containing register TRISB
clrf TRISB ; All port B pins are configured as outputs
banksel OPTION_REG ; Bank containing register OPTION_REG
bcf OPTION_REG,T0CS ; TMR0 counts pulses from oscillator
bcf OPTION_REG,PSA ; Prescaler is assign to timer TMR0
bsf OPTION_REG,PS0 ; Prescaler rate is 1:256
bsf OPTION_REG,PS1
bsf OPTION_REG,PS2
banksel INTCON ; Bank containing register INTCON
bsf INTCON,TMR0IE ; TMR0 interrupt overflow enabled
bsf INTCON,GIE ; Global interrupt enabled
banksel PORTD ; Bank containing register PORTB
clrf PORTD ; Clears port B
clrf temp_timer
loop
goto loop ; Remain here
end