Learning to walk again. (18F46J50 configuration)


Results 1 to 27 of 27

Threaded View

  1. #14
    Join Date
    Jan 2009
    Location
    California, USA
    Posts
    323


    Did you find this post helpful? Yes | No

    Default

    Part2...

    Code:
    '-----------------------------------------------------------------------------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
    
    '---ENOUGH SETUP, LET'S GET STARTED................
    HPWM 1, contrast, 500   'set the LCD contrast
    Pause 1000   'wait for the LCD to wake up
    lcdout $fe, 1   'Clear LCD
    
    asm  ;This bit of code turns ON the RTC WRITE ENABLE. It MUST be done in ASM... RTFM- "16.2.7 WRITE LOCK", "SETTING THE RTCWREN BIT"
        movlb 0x0F ;RTCCFG is banked
        bcf INTCON, GIE ;Disable interrupts
        movlw 0x55
        movwf EECON2
        movlw 0xAA
        movwf EECON2
        bsf RTCCFG,RTCWREN
    endasm
    RTCCFG.7 = 1  'turn on the RTCC module
    
    '!!!!!!!!!!!!!!!!!!!USER SETTING!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    '---USER CAN SET THE CLOCK HERE----------------------------
    year = 10      '(last 2 digits of the millenium, 0-99)
    month = 03     '(1-12)
    day = 26       '(1-31)
    hours = 19     '(0-23)
    minutes = 29   '(0-59)
    seconds = 00   '(0-59)
    weekdaynum = 6 '(0-6)  (0=sunday, 1= monday, etc)
    '!!!!!!!!!!!!!!!!!//USER SETTING//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    '----------------------------------------------------------
    
    Gosub settime 'put the user settings into the time registers
    RTCCFG.5 = 0   'disable RTC write enable
    
    goto main  'skip the subroutines and JGIG
    
    '--SUBROUTINES!----------------------------------------------------------------
    '---SUBROUTINE TO CONVERT USER ENTRY TO BCD AND LOAD THE TIME REGISTERS---------
    settime: '------(RTCPTR<1:0> automatically decrements by 1 each time RTCVALH is read or written to) RTFM, TABLE 16-3--------
        RTCCFG.1 = 1 'set RTCPTR1
        RTCCFG.0 = 1 'set RTCPTR0
        rtcvall = year dig 1 *16 + year dig 0  'set year
        rtcvalh = 00  'unused... just send something to rtcvalh so it will increment the pointer
        rtcvall= day dig 1 *16 + day dig 0  'set day
        rtcvalh = month dig 1 *16 + month dig 0 'set month
        rtcvall= hours dig 1 *16 + hours dig 0  'set hours
        rtcvalh = weekdaynum   'set weekday (0-6)
        rtcvall= seconds dig 1 *16 + seconds dig 0  'set seconds
        rtcvalh = minutes dig 1 *16 + minutes dig 0 'set minutes
    return
    '-----------------------------------------
    
    '---SUBROUTINE TO CONVERT THE BCD FOR EASY DISPLAY----------
    convertBCD:
        timevall = ((timevall/16)*10)+(timevall & %00001111)
        timevalh = ((timevalh/16)*10)+(timevalh & %00001111)
    return
    '------------------------------------------
    
    '---SUBROUTINE TO CONVERT MONTH NUMBER TO REAL TEXT-------------------
    decodemonth:   'there's GOT to be a better way to convert an index number to a string...
        if month = 1 then monthname[0] = "J": monthname[1] = "A": monthname[2] = "N"
        if month = 2 then monthname[0] = "F": monthname[1] = "E": monthname[2] = "B"
        if month = 3 then monthname[0] = "M": monthname[1] = "A": monthname[2] = "R"
        if month = 4 then monthname[0] = "A": monthname[1] = "P": monthname[2] = "R"
        if month = 5 then monthname[0] = "M": monthname[1] = "A": monthname[2] = "Y"
        if month = 6 then monthname[0] = "J": monthname[1] = "U": monthname[2] = "N"
        if month = 7 then monthname[0] = "J": monthname[1] = "U": monthname[2] = "L"
        if month = 8 then monthname[0] = "A": monthname[1] = "U": monthname[2] = "G"
        if month = 9 then monthname[0] = "S": monthname[1] = "E": monthname[2] = "P"
        if month = 10 then monthname[0] = "O": monthname[1] = "C": monthname[2] = "T"
        if month = 11 then monthname[0] = "N": monthname[1] = "O": monthname[2] = "V"
        if month = 12 then monthname[0] = "D": monthname[1] = "E": monthname[2] = "C"
    return
    '-----------------------------------------------------------------------------------
    '---[/subroutines]---------------------------------------------------------
    
    
    '-----------------------------------------------------------------------
    '---MAIN PROGRAM--------------------------------------------------------
    Main:
        '---set RTCPTR1 & RTCPTR2 to 11--- 
        RTCCFG.1 = 1  'set RTCPTR1 (RTCPTR<1:0> automatically decrements by 1 each time RTCVALH is read or written to) RTFM, TABLE 16-3--------
        RTCCFG.0 = 1  'set RTCPTR0
        
        '---get year---
        timevall = rtcvall
        timevalh = rtcvalh
        gosub convertBCD
        year = timevall
        
        '---get month and day---
        timevall = rtcvall
        timevalh = rtcvalh
        gosub convertBCD
        month = timevalh
        day = timevall
        
        '---get weekday and hours---
        timevall = rtcvall
        timevalh = rtcvalh
        gosub convertBCD
        weekdaynum = timevalh
        hours = timevall
        
        '---get minutes and seconds---
        timevall = rtcvall
        timevalh = rtcvalh
        gosub convertBCD
        minutes = timevalh
        seconds = timevall
        
        '---do the 24/12 hour dance---
        If hours > 11 then
            pmflag = "P"
            else
            pmflag = "A"
            endif        
        if hours > 12 then hours = hours - 12
        if hours = 0 then hours = 12
        
        gosub decodemonth
             
        '---display it all---
        lcdout $fe,2,"     ",dec hours,":",DEC2 minutes,":",Dec2 seconds," ",pmflag,"M  ",$fe,$c0,"    ",STR monthname\3," ",dec day,", 20",dec year
        pause 30 'Slow down you move too fast, You've got to make the morning last. Just skippin' down the cobble stones, Lookin' for fun and feelin' groovy
        
     goto main
    
    end
    end of part 2...
    Last edited by Byte_Butcher; - 27th March 2010 at 05:50.

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts