1. Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.
    Dismiss Notice

DS1302 with PIC16f877 program

Discussion in 'Microcontrollers' started by RasCreationKing, Jun 1, 2006.

  1. pyrodigy

    pyrodigy New Member

    Joined:
    Jul 19, 2006
    Messages:
    4
    Likes:
    0
    Hi phamthaihoa,
    I am currently working on a project RTC DS1307 with 16f877,so i would be very glad if you share your source code with me.
    Thanks
     
  2. falsami

    falsami New Member

    Joined:
    Jul 19, 2006
    Messages:
    1
    Likes:
    0
    Sam

     
  3. masud58

    masud58 New Member

    Joined:
    May 14, 2004
    Messages:
    15
    Likes:
    0
    Location:
    Dhaka
    may help

    it is use keil for at89c51 and ds1307.

    simulate with proteus
     

    Attached Files:

  4. dave

    Dave New Member

    Joined:
    Jan 12, 1997
    Messages:
    -
    Likes:
    0


     
  5. RasCreationKing

    RasCreationKing New Member

    Joined:
    May 29, 2006
    Messages:
    11
    Likes:
    0

    Greetings Everyone!

    After some time putting things together, I have thought to come up with the project that will monitor the BATTERY VOLTAGE(24 V) and display it on LCD.I am currently researching about the similar design. I thought it will be best to share this with my Online friends and tutors to help me with ANALOG to DIGITAL converter using PIC16f877 to monitor input(Battery) voltage and display it on LCD. Any help is greatly appreciated.

    Yours Truly,
    Ras Creation King
     
  6. Nigel Goodwin

    Nigel Goodwin Super Moderator Most Helpful Member

    Joined:
    Nov 17, 2003
    Messages:
    39,235
    Likes:
    641
    Location:
    Derbyshire, UK
    ONLINE
    Check my tutorials, which have everything you require!.
     
  7. PKSURYA

    PKSURYA New Member

    Joined:
    Mar 26, 2007
    Messages:
    1
    Likes:
    0
    SIR, Phamthaihoa
    i read ur quote that u have code for Pic16f877a with rtc ds1307, sir need ur help i want to develop code for display date/time in normal and while taking reading with the any detector signal which is 0-5volt Analog and does 10bit adc and display result in precentage 0.0-100.0% on LCD 16x2 and keep hold till button is not pressed for other reading and then store that read with date and time in its flashmemory. and suggest keypad numder is required for clock setting and other perpuse.

    thank u

    PK SURYA

    "Originally Posted by phamthaihoa
    If you use DS1307, i will post my source code I done 1 year before.

    I've done it, I used 16F877A and DS1307, display year, data, time on LCD 16x2."
     
  8. gramo

    gramo New Member

    Joined:
    Oct 2, 2006
    Messages:
    1,221
    Likes:
    23
    Location:
    Newcastle, Australia
    Sigh, if only you knew how easy this would be in a higher language such as Proton PIC Basic..

    Code (text):
    Device = 16F876
    Xtal = 4
    ALL_DIGITAL = True
    PORTB_PULLUPS = True

    ' Setup the LCD
    LCD_DTPIN = PORTB.4
    LCD_RSPIN = PORTB.2
    LCD_ENPIN = PORTB.3
    LCD_INTERFACE = 4
    LCD_LINES = 2
    LCD_TYPE = 0
     

    ' Define I2C bus ports
    SDA_Pin = PORTA.0 'DS1307 SDA pin
    SCL_PIN =PORTA.1 'DS1307 SCL pin

    Dim Temp1 As Byte
    Dim Temp2 As Byte
    Dim TempVal As Byte

    Dim Secs As Byte
    Dim Mins As Byte
    Dim Hrs As Byte
    Dim day As Byte
    Dim Date As Byte
    Dim Month As Byte
    Dim Year As Byte
    Dim Ctrl As Byte

    Dim Secs_last As Byte

    'Initialize LCD

    Delayms 100
    Cls

    ' Set initial DS1307 time / Date

    Secs = 0                     ' Set seconds
    Mins = 30                    ' Set minutes
    Hrs = 12                      ' Set hours

    Day = 1                       ' Set day of week value

    Date = 30                     ' Day of month value
    Month = 11                   ' Month value
    Year = 6                       ' Year value

    Ctrl = 0                        ' Set the control byte (leave as 0 in this example)


    ' The DS1307 works with data in BCD format, so convert BIN to BCD

    TempVal=Secs
    GoSub BIN_TO_BCD
    Secs=TempVal

    TempVal=Mins
    GoSub BIN_TO_BCD
    Mins=TempVal

    TempVal=Hrs
    GoSub BIN_TO_BCD
    Hrs=TempVal

    TempVal=Day
    GoSub BIN_TO_BCD
    Day=TempVal

    TempVal=Date
    GoSub BIN_TO_BCD
    Date=TempVal

    TempVal=Month
    GoSub BIN_TO_BCD
    Month=TempVal

    TempVal=Year
    GoSub BIN_TO_BCD
    Year=TempVal

    BStart

    ' The datasheet specifies the first byte is 1101000x where x is read(1) or write(0).
    ' The second byte tells the DS 1307 where to start reading, 0 is at the start.
    ' The Ctrl byte contains advanced features, read the datasheet for more info
    Busout 11010000, 0, [Secs, Mins, Hrs, day, Date, Month, Year, Ctrl] 'Write initial values for time / Date

    BStop

    Delayms 20

    Main:

    BStart

    ' The datasheet specifies the first byte is 1101000x where x is read(1) or write(0).
    ' The second byte tells the DS 1307 where to start reading, 0 is at the start.
    BusIn 11010001, 0, [Secs, Mins, Hrs, day, Date, Month, Year, Ctrl]

    BStop

    ' The DS1307 sends it data in BCD, therefore it must be changed to
    ' BIN so that it can be easily used (eg, print onto an LCD)

    TempVal=Secs
    GoSub BCD_TO_BIN
    Secs=TempVal

    TempVal=Mins
    GoSub BCD_TO_BIN
    Mins=TempVal

    TempVal=Hrs
    GoSub BCD_TO_BIN
    Hrs=TempVal

    TempVal=Date
    GoSub BCD_TO_BIN
    Date=TempVal

    TempVal=Month
    GoSub BCD_TO_BIN
    Month=TempVal

    TempVal=Year
    GoSub BCD_TO_BIN
    Year=TempVal


     

    If Secs - Secs_last = 0 Then Goto Main                'If there is update in Secs, display time and Date

    ' The Dec2 modifier makes sure that each value will have 2 characters, eg 1 becomes 01
    Print At 1,1,"Time: ",Dec2 Hrs, ":", Dec2 Mins,":", Dec2 Secs
    Print At 2,1,"Date: ", Dec2 Date, "-", Dec2 Month, "-", Dec2 Year

    Secs_last = Secs

    Goto Main

    BCD_TO_BIN:                                    ' Convert the BCD values into BIN

         Temp1 = $0F & TempVal                     ' Clear off the top four bits
         Temp1 = DIG Temp1, 0
         Temp2 = TempVal >> 4                       ' Shift down four to read 2 BCD value
         Temp2 = DIG Temp2, 0
         TempVal = Temp2 * 10 + Temp1

         Return

    BIN_TO_BCD:

         Temp1 = Dig TempVal, 0                     ' GET THE DEC DIGIT FOR THE FIRST NIBBLE
         Temp2 = Dig TempVal, 1                     ' GET THE DEC DIGIT FOR THE FIRST NIBBLE
         Temp2 = Temp2 << 4                          ' MOVE NUMBER OVER TO 2ND NIBBLE
         TempVal = Temp1 ^ Temp2                  ' XOR THEM TOGTHER TO MAKE THE WHOLE BCD NUMBER
       
         Return

    Click here to watch this circuit in action


    [​IMG]
     
  9. vinodh_simon

    vinodh_simon New Member

    Joined:
    May 3, 2007
    Messages:
    1
    Likes:
    0
    Can any of you help me in getting the instruction sets and thier functionalities for PIC16F877. Please give me the link.
     
  10. ericgibbs

    ericgibbs Well-Known Member Most Helpful Member

    Joined:
    Jan 4, 2007
    Messages:
    21,190
    Likes:
    644
    Location:
    Ex Yorks' Hants UK
    ONLINE

Share This Page