ME Labs, Inc.
719-520-5323
 
Home:
  Developer Resources:

Programming Clues
    Sample Programs
   
    PICBASIC PRO™
Compiler Manual
    PICBASIC™ Compiler
Manual
    Serin2/Serout2 Modes
    ASCII Character Set
    Number Conversion
    Floating Point
Routines
    PBP Debug Monitor
    Articles and Tutorials

Hardware Clues
    Parts / Vendor List
    PICPROTO™ Boards
    LAB-X1 Docs
    LAB-X2 Docs
    LAB-X20 Docs
    LAB-X3 Docs
    LAB-X4 Docs
    LAB-XUSB Docs
    LAB-XT Docs
     
 

ME Labs, Inc. | 1-719-520-5323 | Example Program - JRCX.pbp

PICBASIC PRO program for an LCD clock using the JRC6355 RTC.
' Name        : JRCX.pbp
' Compiler    : PICBASIC PRO Compiler 2.60
' Assembler   : PM or MPASM
' Target PIC  : 40-pin 16F887
' Hardware    : LAB-X1 Experimenter Board
' Oscillator  : 4MHz external crystal
' Keywords    : SHIFTIN, SHIFTOUT, LCDOUT, RTC
' Description : PICBASIC PRO program for an LCD clock using the
' JRC6355 RTC. 
'

Include "MODEDEFS.BAS"  ' Include Shiftin/out modes

Define LCD_DREG  PORTD  ' Define LCD connections
Define LCD_DBIT  4
Define LCD_RSREG PORTE
Define LCD_RSBIT 0
Define LCD_EREG  PORTE
Define LCD_EBIT  1

' Alias pins
CE    Var PORTA.2
CLK   Var PORTC.1
SDATA Var PORTC.3
IO    Var PORTC.5

' Allocate variables
rtcyear  Var byte
rtcmonth Var byte
rtcdate  Var byte
rtcday   Var byte
rtchr    Var byte
rtcmin   Var byte
rtcsec   Var byte

   Low CE          ' Disable RTC
   Low CLK
   High IO
   ANSEL = %00000000 ' Make AN0-AN7 digital
   ANSELH= %00000000 ' Make AN8-AN13 digital
   Low PORTE.2     ' LCD R/W low = write
   Pause 100       ' Wait for LCD to startup

   ' Set initial time to 8:00:00AM 07/16/99
   rtcyear = $99
   rtcmonth = $07
   rtcdate = $16
   rtcday = 6
   rtchr = $08
   rtcmin = 0
   rtcsec = 0
   Gosub settime   ' Set the time
   Goto mainloop   ' Skip subroutines

' Subroutine to write time to RTC
settime:
   IO = 1          ' Set RTC to input
   CE = 1          ' Enable transfer

   ' Write all 7 RTC registers
   Shiftout SDATA, CLK, LSBFIRST, [rtcyear, rtcmonth, rtcdate, rtcday\4, rtchr, rtcmin]
   CE = 0          ' Disable RTC
   Return

' Subroutine to read time from RTC
gettime:
   IO = 0          ' Set RTC to output
   CE = 1          ' Enable transfer

   ' Read all 7 RTC registers
   Shiftin SDATA, CLK, LSBPRE, [rtcyear, rtcmonth, rtcdate, rtcday\4, rtchr, rtcmin, rtcsec]
   CE = 0          ' Disable RTC
   Return

' Main program loop - in this case, it only updates the LCD with the time
mainloop:
   Gosub gettime   ' Read the time from the RTC

   ' Display time on LCD
   Lcdout $fe, 1, hex2 rtcmonth, "/", hex2 rtcdate, "/" , hex2 rtcyear,_
   "  ", hex2 rtchr, ":", hex2 rtcmin, ":", hex2 rtcsec

   Pause 300       ' Do it about 3 times a second
   Goto mainloop   ' Do it forever

   End

           

Download the program file.