code shown on top is my program code. i want to know how to let real time work continuing when the time is match which what the time i was setted. because i has foind out the problem when time is matched. the real time will stopped it there.Code:define LOADER_USED 1 define OSC 4 define LCD_DREG PORTB DEFINE LCD_DBIT 0 DEFINE LCD_RSREG PORTB DEFINE LCD_RSBIT 5 DEFINE LCD_EREG PORTB DEFINE LCD_EBIT 4 DEFINE LCD_BITS 4 adcon1 = 7 trisa = %11111111 hour var byte ' Define hour variable dhour var byte ' Define display hour variable minute var byte ' Define minute variable second var byte ' Define second variable ticks var byte ' Define pieces of seconds variable update var byte ' Define variable to indicate update of LCD i var byte ' Debounce loop variable cl var byte buf var byte(10) tagNum var byte idx var byte char var byte tag1 data "0010828978" @ device WDT_OFF CMCON = 7 ' PORTA digital Pause 100 ' Wait for LCD to startup hour = 00 ' Set initial time to 00:00:00 minute = 00 second = 00 ticks = 00 update = 1 ' Force first display ' Set TMR0 to interrupt every 16.384 milliseconds OPTION_REG = $55 ' Set TMR0 configuration and enable PORTB pullups INTCON = $a0 ' Enable TMR0 interrupts On Interrupt Goto tickint PORTB = 0 ' PORTB lines low to read buttons TRISB = %11001111 ' Enable buttons ' Main program loop - in this case, it only updates the LCD with the time mainloop: ' Check any button pressed to set time If PORTa.0 = 1 Then decmin If PORTA.1 = 1 Then incmin bbb: if porta.2 = 1 then nice ' Check for time to update screen chkup: If update = 1 Then Lcdout $fe,1 ' Clear screen 'lcdout $FE,$c0,"Next 12:10:00" ' Display time as hh:mm:ss dhour = hour ' Change hour 0 to 12 If (hour // 12) = 0 Then dhour = dhour + 12 Endif ' Check for AM or PM If hour < 12 Then Lcdout dec2 dhour, ":", dec2 minute, ":", dec2 second, " AM" Else Lcdout dec2 (dhour - 12), ":", dec2 minute, ":", dec2 second, " PM" Endif update = 0 ' Screen updated Endif lcdout $FE,$c0,"Next 12:10:10 AM" if (dhour = 12) and (minute = 10) and (second = 10) then aaa goto mainloop aaa: 'freqout porta.5,1000*/$100,115*/$100 sound porta.5, [200,100] lcdout $FE,1,"please" lcdout $FE,$c0,"Medicine!!" high portc.0 update = 1 'pause 2000 goto mainloop nice: high porta.3 low portc.0 'freqout porta.5,1000*/$100,115*/$100 high porta.3 'pause 3000 serin2 portc.7,84,[str buf\10] 'nextline: for tagnum = 1 to 2 for idx = 0 to 9 read(((tagnum-1)*10)+idx),char if(char<>buf(idx)) then goto bad_char next goto tag_correct bad_char: next bad_tag: low porta.3 'pause 500 high portc.0 tagnum = 0 lcdout $FE,1,"Sorry,Wrong" lcdout $FE,$c0,"Medicine!!" sound porta.5, [200,100] 'freqout porta.5,1000*/$100,115*/$100 'pause 3000 lcdout $FE,1,"Please Take" lcdout $FE,$c0,"Medicine A" goto nice tag_correct low porta.4 high porta.5 freqout porta.5,2000*/$100,880*/$100 lcdout $FE,1,"Correct take" lcdout $FE,$c0,"Medicine!!" high portc.3 second = second + 1 pause 3000 goto mainloop 'Goto mainloop ' Do it all foreve ' Increment minutes incmin: minute = minute + 1 If minute >= 60 Then minute = 0 hour = hour + 1 If hour >= 24 Then hour = 0 Endif Endif Goto debounce ' Decrement minutes decmin: minute = minute - 1 If minute >= 60 Then minute = 59 hour = hour - 1 If hour >= 24 Then hour = 23 Endif Endif ' Debounce and delay for 250ms debounce: For i = 1 to 25 Pause 10 ' 10ms at a time so no interrupts are lost Next i update = 1 ' Set to update screen Goto chkup ' Interrupt routine to handle each timer tick disable ' Disable interrupts during interrupt handler tickint: ticks = ticks + 1 ' Count pieces of seconds If ticks < 61 Then tiexit ' 61 ticks per second (16.384ms per tick) ' One 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 If hour >= 24 Then hour = 0 Endif Endif Endif update = 1 ' Set to update LCD tiexit: INTCON.2 = 0 ' Reset timer interrupt flag Resume End![]()
Bookmarks