Device 16F877AXTAL 4; Display ConfigurationLCD_DTPIN = PORTB.4 ' Assigns the Port and Pins that the LCD's DT (data) lines will attach to. LCD_RSPIN = PORTB.2 ' Assigns the Port and Pins that the LCD's RS line will attach to. LCD_ENPIN = PORTB.1 ' Assigns the Port and Pin that the LCD's EN line will attach to. LCD_INTERFACE = 4 ' Inform the compiler as to whether a 4-line or 8-line interface is required by the LCD. LCD_LINES = 2 ' Inform the compiler as to how many lines the LCD has. LCD_TYPE = ALPHA ' Inform the compiler as to the type of LCD that the PRINT command will output toClsDelayMS 500start: Print At 1,1," LOADING..." DelayMS 1000 Cls:DelayMS 10 Print At 1,1, "00:00:00 --DJC--" Print At 2,1, " Hello world" DelayMS 1000 Print At 1,8, "1" DelayMS 1000 Print At 1,8, "2" DelayMS 1000 Print At 1,8, "3" DelayMS 1000 Print At 1,8, "4" DelayMS 1000 Print At 1,8, "5" DelayMS 1000 Print At 1,8, "6" DelayMS 1000 Print At 1,8, "7" DelayMS 1000 Print At 1,8, "8" DelayMS 1000 Print At 1,8, "9" DelayMS 1000 Print At 1,7, "10" DelayMS 1000 Print At 1,7, "11" DelayMS 1000 Print At 1,7, "12" DelayMS 1000 Print At 1,7, "13" DelayMS 1000 Print At 1,7, "14" DelayMS 1000 Print At 1,7, "15" DelayMS 1000 Print At 1,7, "16" DelayMS 1000 Print At 1,7, "17" DelayMS 1000 Print At 1,7, "18" DelayMS 1000 Print At 1,7, "19" DelayMS 1000 Print At 1,7, "20" DelayMS 1000 Print At 1,7, "21" DelayMS 1000 Print At 1,7, "22" DelayMS 1000 Print At 1,7, "23" DelayMS 1000 Print At 1,7, "24" DelayMS 1000 Print At 1,7, "25" DelayMS 1000 Print At 1,7, "26" DelayMS 1000 Print At 1,7, "27" DelayMS 1000 Print At 1,7, "28" DelayMS 1000 Print At 1,7, "29" DelayMS 1000 Print At 1,7, "30" DelayMS 1000 Print At 1,7, "31" DelayMS 1000 Print At 1,7, "32" DelayMS 1000 Print At 1,7, "33" DelayMS 1000 Print At 1,7, "34" DelayMS 1000 Print At 1,7, "35" DelayMS 1000 Print At 1,7, "36" DelayMS 1000 Print At 1,7, "37" DelayMS 1000 Print At 1,7, "38" DelayMS 1000 Print At 1,7, "39" DelayMS 1000 Print At 1,7, "40" DelayMS 1000 Print At 1,7, "41" DelayMS 1000 Print At 1,7, "42" DelayMS 1000 Print At 1,7, "43" DelayMS 1000 Print At 1,7, "44" DelayMS 1000 Print At 1,7, "45" DelayMS 1000 Print At 1,7, "46" DelayMS 1000 Print At 1,7, "47" DelayMS 1000 Print At 1,7, "48" DelayMS 1000 Print At 1,7, "49" DelayMS 1000 Print At 1,7, "50" DelayMS 1000 Print At 1,7, "51" DelayMS 1000 Print At 1,7, "52" DelayMS 1000 Print At 1,7, "53" DelayMS 1000 Print At 1,7, "54" DelayMS 1000 Print At 1,7, "55" DelayMS 1000 Print At 1,7, "56" DelayMS 1000 Print At 1,7, "57" DelayMS 1000 Print At 1,7, "58" DelayMS 1000 Print At 1,7, "59" DelayMS 1000 Print At 1,7, "60" DelayMS 1000 GoTo start
IIRC may example ng clock sa samples folder ng proton
Ganun po ba? for exact timing pala dapat assembly na lang gamitin ko.. huhuhu.. palipat2x ako ng language..
A crystal oscillator circuit is built-in between pins T1OSI(input) and T1OSO (amplifier output). It is enabled bysetting control bit T1OSCEN (T1CON<3>). The oscilla-tor is a low power oscillator rated up to 200 kHz. It willcontinue to run during SLEEP. It is primarily intendedfor use with a 32 kHz crystal. Table 6-1 shows thecapacitor selection for the Timer1 oscillator. The Timer1 oscillator is identical to the LP oscillator.The user must provide a software time delay to ensureproper oscillator start-up.
eh meron naman pala nito... pero paano battery management sir marce? or power down nang machine?
Ganun po ba? for exact timing pala dapat assembly na lang gamitin ko.. huhuhu.. palipat2x ako ng language.. babalik din pala ako sa assembly.. hay..
' DEMONSTARTION OF A 100THS OF A SECOND TIMER ' COUNTING UP TO 255 DAYS ''' FIDDLE WITH FUDGE FACTOR TO IMPROVE ACCURACY''----------------------------------------------- Include "PROTON_4.INC" Dim _100THS As Byte' DECLARE ALL VARS AS BYTES Dim SECS As Byte Dim MINS As Byte Dim HOURS As Byte Dim DAYS As Byte Dim TEMP_100THS As Byte Dim TEMP_SECS As Byte Dim TEMP_MINS As Byte Dim TEMP_HOURS As Byte Dim TEMP_DAYS As Byte Dim GIE As INTCON.7 ' ALIAS Dim TIMER1REG As TMR1L.Word ' MAKE THE TIMER VAR INTO A WORD Symbol FUDGE_FACTOR = 7 ' FIDDLE WITH TO IMPROVE ACCURACY Symbol TMR1_VAL =((65536)-(XTAL*2500))+FUDGE_FACTOR ' CALCULATE OSC OFFSET VALUES FOR 100HZ INTERRUPT On_Interrupt INTERRUPT_ROUTINE ' WHERE TO GO ON AN INTERRUPT GoTo START ' JUMP THE INTERRUPT CODE INTERRUPT_ROUTINE: Clear T1CON.0 ' STOP TMR1 TIMER1REG = TIMER1REG + TMR1_VAL ' LOAD TMR1 Set T1CON.0 ' START TMR1 Inc _100THS If _100THS = 100 Then ' UP 100TS Clear _100THS Inc SECS ' UP SECONDS If SECS = 60 Then Clear SECS Inc MINS ' UP MINS If MINS = 60 Then Clear MINS Inc HOURS If HOURS = 24 Then ' UP HOURS Clear HOURS Inc DAYS EndIf EndIf EndIf EndIf Clear PIR1.0 ' CLEAR TMR1 INTERRUPT FLAG Context Restore ' END INTERRUPT ROUTINE START: Clear ' CLEAR ALL VARS T1CON = %00000000 ' SET UP TMR1 TO HAVE 1:1 PRESCALER AND ACT AS A TIMER PIR1.0 = 0 ' CLEAR TMR1 INTERRUPT FLAG INTCON = %11000000 ' GLOBAL AND PERIPHERAL INTERRUPTS ON PIE1.0 = 1 ' ENABLE TMR1 AS PERIPHERAL INTERRUPT SOURCE T1CON.0 = 1 ' SET TIMER1 RUNNING Cls ' CLEAR THE LCD While 1 = 1 ' MAKE AN ENDLESS LOOP GIE = 0 ' TURN OFF GLOBAL INTERRUPTS While GIE = 1 : GIE = 0 : Wend ' AND MAKE SURE THEY ARE OFF TEMP_100THS = _100THS ' MAKE A COPY OF THE VARS TEMP_SECS = SECS TEMP_MINS = MINS TEMP_HOURS = HOURS TEMP_DAYS = DAYS GIE = 1 ' TURN THE INTERRUPTS BACK ON Print At 1,1,Dec2 TEMP_DAYS,":",Dec2 TEMP_HOURS,":",Dec2 TEMP_MINS,":",Dec2 TEMP_SECS,":",Dec2 TEMP_100THS DelayMS 100 ' SMALL DELAU Wend ' ROUND AND ROUND WE GO Stop
di mo na kailangan ang assembly... kasi pag kinumpile mo yan ang ipo-produce nyan ay assembly at hex file... very simple lang ang timer sa basic using interrupt. Code: [Select]' DEMONSTARTION OF A 100THS OF A SECOND TIMER ' COUNTING UP TO 255 DAYS ''' FIDDLE WITH FUDGE FACTOR TO IMPROVE ACCURACY''----------------------------------------------- Include "PROTON_4.INC" Dim _100THS As Byte' DECLARE ALL VARS AS BYTES Dim SECS As Byte Dim MINS As Byte Dim HOURS As Byte Dim DAYS As Byte Dim TEMP_100THS As Byte Dim TEMP_SECS As Byte Dim TEMP_MINS As Byte Dim TEMP_HOURS As Byte Dim TEMP_DAYS As Byte Dim GIE As INTCON.7 ' ALIAS Dim TIMER1REG As TMR1L.Word ' MAKE THE TIMER VAR INTO A WORD Symbol FUDGE_FACTOR = 7 ' FIDDLE WITH TO IMPROVE ACCURACY Symbol TMR1_VAL =((65536)-(XTAL*2500))+FUDGE_FACTOR ' CALCULATE OSC OFFSET VALUES FOR 100HZ INTERRUPT On_Interrupt INTERRUPT_ROUTINE ' WHERE TO GO ON AN INTERRUPT GoTo START ' JUMP THE INTERRUPT CODE INTERRUPT_ROUTINE: Clear T1CON.0 ' STOP TMR1 TIMER1REG = TIMER1REG + TMR1_VAL ' LOAD TMR1 Set T1CON.0 ' START TMR1 Inc _100THS If _100THS = 100 Then ' UP 100TS Clear _100THS Inc SECS ' UP SECONDS If SECS = 60 Then Clear SECS Inc MINS ' UP MINS If MINS = 60 Then Clear MINS Inc HOURS If HOURS = 24 Then ' UP HOURS Clear HOURS Inc DAYS EndIf EndIf EndIf EndIf Clear PIR1.0 ' CLEAR TMR1 INTERRUPT FLAG Context Restore ' END INTERRUPT ROUTINE START: Clear ' CLEAR ALL VARS T1CON = %00000000 ' SET UP TMR1 TO HAVE 1:1 PRESCALER AND ACT AS A TIMER PIR1.0 = 0 ' CLEAR TMR1 INTERRUPT FLAG INTCON = %11000000 ' GLOBAL AND PERIPHERAL INTERRUPTS ON PIE1.0 = 1 ' ENABLE TMR1 AS PERIPHERAL INTERRUPT SOURCE T1CON.0 = 1 ' SET TIMER1 RUNNING Cls ' CLEAR THE LCD While 1 = 1 ' MAKE AN ENDLESS LOOP GIE = 0 ' TURN OFF GLOBAL INTERRUPTS While GIE = 1 : GIE = 0 : Wend ' AND MAKE SURE THEY ARE OFF TEMP_100THS = _100THS ' MAKE A COPY OF THE VARS TEMP_SECS = SECS TEMP_MINS = MINS TEMP_HOURS = HOURS TEMP_DAYS = DAYS GIE = 1 ' TURN THE INTERRUPTS BACK ON Print At 1,1,Dec2 TEMP_DAYS,":",Dec2 TEMP_HOURS,":",Dec2 TEMP_MINS,":",Dec2 TEMP_SECS,":",Dec2 TEMP_100THS DelayMS 100 ' SMALL DELAU Wend ' ROUND AND ROUND WE GO Stop
Di ako PIC user, pero I believe i can make an educated guess:- Enable the hardware interrupt of the timer driven by the 32kHz source.- Put the MCU in SLEEP Mode or equivalent low power standby mode while it is powered from backup batteries.- The MCU is awaken for a brief moment everytime an RTC interrupt occurs. This is the period where your RTC interrupt routine does its timekeeping job. - And then, the MCU is put into sleep mode again.The average power consumed by the MCU will be very low, allowing it to run on backup batteries for months or even years.
@ ACE_1989 di ko alam kung sino ang coolet sa atin... jowk!