You are on page 1of 3

;*******************************************************************************

*********************
;This software is provided in an AS IS condition,NO WARRANTIES in any form apply t
o this software.
; picmicrolab.com 8.2.2014
;*******************************************************************************
********************
;PIC16F876A Based Digital Alarm Clock RB0 - Alarm, RB1 - Time,RB3 - Min,RB4 - H
ours, RB5 - Buzzer,
LIST P=PIC16F876A
include <P16f876A.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _LVP_OFF & _D
EBUG_OFF & _CPD_OFF
;-------------------------------------------------------------------------------
----------------------
OnesMin EQU 0X30 ;1's minutes
TensMin EQU 0X31 ;10's minutes
OnesHour EQU 0X32 ;1's hours
TensHour EQU 0X33 ;10's hours
;-------------------------------------------------------------------------------
----------------------
OnesMinAlarm EQU 0X60 ;1's minutes
TensMinAlarm EQU 0X61 ;10's minutes
OnesHourAlarm EQU 0X62 ;1's hours
TensHourAlarm EQU 0X63 ;10's hours
;-------------------------------------------------------------------------------
---------------------
org 0x00
reset:
goto start
org 0x04
goto IntSRV
org 0x10
start: bcf STATUS, RP0
bcf STATUS, RP1
clrf PORTA
bsf STATUS, RP0
movlw 0x06
movwf ADCON1; all A,E digital
movlw 0xff ; RB7-RB0 of PORTB are inputs
movwf TRISB
bcf OPTION_REG,0x07 ; RBPU is ON -->Pull UP on PORTB is enab
led
movlw 0x00
movwf TRISA
clrf TRISC
bcf STATUS, RP0
bsf PORTC,0X00

clrf T1CON
movlw 0xD8
movwf TMR1H
movlw 0xF0
movwf TMR1L
clrf INTCON
bsf STATUS,RP0
clrf PIE1
bcf STATUS,RP0
clrf PIR1
movlw 0x20
movwf T1CON
bsf INTCON,PEIE
;bsf INTCON,GIE
bcf INTCON,GIE
bsf STATUS,RP0
bsf PIE1,TMR1IE
bcf STATUS,RP0

bsf T1CON,TMR1ON
bcf STATUS, RP0 ;Bank 0
;--------------------------Default Time Settings-----------------------
movlw 0x00
movwf OnesMin
movlw 0x00
movwf TensMin
movlw 0x00
movwf OnesHour
movlw 0x00
movwf TensHour
;-------------------------Default Alarm Settings-------------
movlw 0x03
movwf OnesMinAlarm
movlw 0x02
movwf TensMinAlarm
movlw 0x01
movwf OnesHourAlarm
movlw 0x00
movwf TensHourAlarm
;------------------------------------------------------------

bsf INTCON,GIE ;Enable GIE for 1s count


looop:
;------------------------------------------------------------------------
btfss PORTB,0x00 ;RB0 - AlarmAdj Input OFF
call ShowCountAlarm
btfsc PORTB,0x00 ;RB0 - AlarmAdj Input ON
call ShowCount
call CompareAlarmTime
goto looop
;-----------------------------------------------------------------------
delay:
movlw 0x0f
movwf 0x51
CONT1: movlw 0x0f
movwf 0x52
CONT2: decfsz 0x52,f
goto CONT2
decfsz 0x51,f
goto CONT1
return
;-----------------------------------
IntSRV:
bcf T1CON,TMR1ON
bcf PIR1,TMR1IF
movlw 0xD8
movwf TMR1H
movlw 0xF0
movwf TMR1L
;----------------------------------------
call AdjMin
call AdjHours
call AdjMinAlarm
call AdjHoursAlarm
;----------------------------------------

You might also like