Hi there,
I'm stuck in trying to make a multiple alarms-timer based on Melanie's "Olympic Timer".
Doing it the way it is here, the timer will mess-up and the sound stop only after a little time (20 to 40 seconds).
This is probably due to the SOUND command witch takes to much time to execute and blocks the interrupt count or so.
I have the feeling it is not possible to get this working this way.
Can anybody confirm?
I think, I'll better go for a RTC (yes/no)?
Code:' Fuses @ DEVICE PIC12F675, XT_OSC ;Xtal 4MHz @ DEVICE PIC12F675, WDT_OFF @ DEVICE PIC12F675, PWRT_OFF @ DEVICE PIC12F675, MCLR_ON @ DEVICE PIC12F675, BOD_OFF @ DEVICE PIC12F675, PROTECT_OFF @ DEVICE PIC12F675, CPD_OFF '------------------------------------------------------------------------------- ' Registers 76543210 CMCON = %00000111 'Comparator OFF ANSEL = %00000000 'Analog/Digital ports OPTION_REG = %00000101 'Pull-Ups ENabled, TMR0 prescaler 1:64=16.384 ms INTCON = %10100000 'GPIO.2 External Interrupt enabled GPIO = %00000000 'Ports High/Low TRISIO = %00000000 'Set Input/Output '------------------------------------------------------------------------------- ' Variables Ticks var byte Second var byte Minute var byte Hour var byte Buzzer var GPIO.2 DOutPin var GPIO.1 Update var byte second = 0 Minute = 0 hour = 0 Update = 0 '------------------------------------------------------------------------------- ' Program On Interrupt Goto tick_int MAIN: if Update = 1 then update = 0 if second = 0 and minute = 9 and hour = 0 then goto beep1 if second = 0 and minute = 27 and hour = 0 then goto beep1 endif BEEP1: sound buzzer,[100,10,50,10] goto main end '------------------------------------------------------------------------------- ' Time Counter - Interrupt Service Routine to handle each timer tick disable ' Disable interrupts during interrupt handler (or ISR) TICK_INT: Ticks = Ticks + 1 'Count pieces of seconds If Ticks < 61 Then TICK_INT_RESET 'Continue count ' if Ticks >= 61, 1 second elasped => update time Ticks = 0 Second = Second + 1 If Second >= 60 Then Second = 0 minute = minute + 1 If minute >= 60 Then minute = 0 Hour = Hour + 1 Endif Endif Update = 1 TICK_INT_RESET: INTCON.2 = 0 'Reset timer interrupt flag and continue de Ticks count Resume enable





Bookmarks