Hi All, Hope I posted the code correctly in the box

I have been working on this for about 8 hours now and have GOOGLED it to death, I am usualy very good at finding my solution on my own.

When I set the time I get some strange outputs on the LCD, like I am thinking HEX and it is thinking DEC and visa versa.

I have writen some test code to play with the modifiers (DEC, HEX, BIN) to see if I could figure it out but..................

The trees seem to be so thick I can't see the problem on this one.

Any pointers would be great.

Thanks
Aaron



Code:
                                                               
'----------------------- Chip Setup ----------------------------------------

Define osc 4
CMCON     = 7          ' PortA = digital I/O
VRCON     = 0          ' A/D Voltage reference disabled
TRISA     = %11110000  ' Set PortA I/O
TRISB     = %11110001  ' Set PortB I/O 
PORTA     = 0          ' Clear PortA
PORTB     = 0          ' Clear PortB

'-------------------------- I/O Variables ----------------------------------

rst var portb.2 ' DS1302 Reset PIC Pin 8 Blue
clk var portb.1 ' DS1302 Clock PIC Pin 7 Orange
dq  var portb.0 ' DS1302 Data PIC Pin 6 White
LCD var PortA.2 ' PIC pin 1

'----------------------- Write Commands For DS1302 --------------------------

writectrl con $8E ' Control byte
writeram con $80 ' Write to RAM
writeprotect con $00 ' Write-protect DS1302
writesec con $80 ' Write seconds
writemin con $82 ' Write minutes
writehour con $84 ' Write hour
writedate con $86 ' Write date
writemonth con $88 ' Write month
writeyear con $8C ' Write year

'------------------------- Read Commands For DS1302 -------------------------

readsec con $81 ' Read seconds from DS1302
readmin con $83 ' Read minutes from DS1302
readhour con $85 ' Read hours from DS1302
readdate con $87 ' Read date from DS1302
readyear con $8D ' Read year from DS1302
readmonth con $89 ' Read month from DS1302

'------------------------- Commands For LCD ---------------------------------

Baud con 16780  'Baud rate 2400 8N1

'------------------------------ Time Variables ------------------------------

mem var byte ' Temporary data holder
outbyte var byte ' Second byte to ds1302
reg_adr var byte ' First byte to DS1302
date var byte ' Date variable
ss var byte ' Seconds variable
ss2 var byte 'seconds comparison byte
mm var byte ' Minutes varibale
hh var byte ' Hours variable
mo var byte ' Month variable
yr var byte ' Year variable

'------------------------ Initial Settings For Ports ------------------------

low rst ' Set reset pin low
low clk ' Set clock pin low

'----------------------- Set Initial Time  ----------------------------------

reg_adr = writectrl ' Set to control byte 
outbyte = writeprotect ' Set turn off protection
gosub w_out ' Send both bytes

reg_adr = writesec ' Set to write seconds register
outbyte = $00 ' Set to write 00 to seconds register
gosub w_out

reg_adr = writemin
outbyte = $2D
gosub w_out

reg_adr = writehour
outbyte = $04
gosub w_out

reg_adr = writedate
outbyte = $A
gosub w_out

reg_adr = writemonth
outbyte = $01
gosub w_out

reg_adr = writeyear
outbyte = $09
gosub w_out

reg_adr = writectrl
outbyte = writeprotect
gosub w_out

'----------------------- Main Program -----------------------------------

Main_Program:
gosub Get_time
gosub Display
goto Main_Program
end

'----------------------- Get Time Subroutine ---------------------------

Get_time:
reg_adr = readsec ' Read seconds
gosub w_in
ss = mem

reg_adr = readmin ' Read minutes
gosub w_in
mm = mem

reg_adr = readhour ' Read Hours
gosub w_in
hh = mem

reg_adr = readyear ' Read Year
gosub w_in
yr = mem

reg_adr = readdate ' Read Date
gosub w_in
date = mem

reg_adr = readmonth ' Read Month
gosub w_in
mo = mem
return

'----------------------- Display Subroutine ---------------------------                        

Display:
pause 250
serout2 LCD,Baud,[12,14, "TIME ", hex2 hh,":", hex2 mm,":", hex2 ss]
return

'----------------------- Time Commands Subroutines --------------------------

w_in:
mem = reg_adr ' Set mem variable to reg_adr contents
high rst ' Activate the DS1302
shiftout dq,clk,0, [mem] ' Send control byte
shiftin dq,clk,1, [mem] ' Retrieve data in from the DS1302
low rst ' Deactivate DS1302
return 

w_out:
mem = reg_adr ' Set mem variable to reg_adr contents
high rst ' Activate the DS1302
shiftout dq,clk,0, [mem] ' Send control byte
mem = outbyte ' Set mem variable to outbyte contents
shiftout dq,clk,0, [mem] ' Send data stored in mem variable to DS1302
low rst ' Deactivate DS1302
return