Hodiny reálneho času

Zdravím.
Pokúšam sa napísať v Céčku program pre DS1302,no nejak sa mi nedarí.
Zatiaľ sa pokúšam iba zinicializovať RTC a vyčítavať iba sekundy,ktoré následne zobrazím na LCD display.
Neviem prísť na to prečo mi to nebeží.Vyčíta(ak to vôbec je z neho) hodnotu 01 a dosť .Používam PIC16F877A Hi-techsoft 9.60 pod Mplabom.
Zapojené to mám bez pull up či down odporov.V datashete som ich nevidel.
Vopred ďakujem za každú radu.
Relatko.

#include <pic.h>
#include <stdio.h>
#include “delay.h”
#include “lcd.h”

#define SPI_CS RA1
#define SPI_CK RA0
#define SPI_IO RA2

#define _XTAL_FREQ 4000000
__CONFIG(XT & WDTDIS & LVPDIS & DEBUGDIS & BORDIS);

void spiWrite(const unsigned char reg)
{
unsigned char SPICount;
unsigned char SPIData;
SPIData = reg;
TRISA = 0;
for (SPICount = 0; SPICount < 8; SPICount++)
{
if (SPIData & 0x80)
SPI_IO = 1;
else
SPI_IO = 0;
SPI_CK = 1;
SPI_CK = 0;
SPIData <<= 1;
TRISA = 0;
}
}

unsigned char spiRead (void)
{

unsigned char SPICount;

unsigned char SPIData;

TRISA = 4;

for (SPICount = 0; SPICount < 8; SPICount++)
{
SPIData <<=1;
SPI_CK = 1;
SPIData += SPI_IO;
SPI_CK = 0;
SPI_CK = 0;
SPI_CK = 0;
}
TRISA = 0;
return ((unsigned char)SPIData);
}

unsigned char bin_dec(unsigned char value)
{
unsigned char val =0;
if(value & (1<<0))
val =(val + 1);
if(value & (1<<1))
val =(val + 2);
if(value & (1<<2))
val =(val + 4);
if(value & (1<<3))
val =(val + 8 );
if(value & (1<<4))
val =(val + 10);
if(value & (1<<5))
val =(val + 20);
if(value & (1<<6))
val =(val + 40);
if(value & (1<<7))
val =(val + 80);
return(val);
}

void main (void)
{
char a =0;
char b =0;
ADCON1 =7;
TRISA =0;
TRISB =0;
TRISC =0;
PORTA =0;
PORTB =0;
PORTC =0;
lcd_init();

RC2 =1;//test ledka či sa vôbec niečo koná
SPI_CS =1;
spiWrite (0x8E); //WP disable
spiWrite (0x0);
SPI_CS =0;
DelayMs(10);
SPI_CS =1;
spiWrite (0x80); //CH aj zo sekundami nula
spiWrite (0x0);
SPI_CS =0;
RC2 =0; //test ledka či sa vôbec niečo koná
DelayMs(10);
while(1)
{
SPI_CS =1;
spiWrite (0x81);
a = spiRead();
SPI_CS =0;
//a = 55; //test či to vôbec niečo zobrazuje
lcd_goto(0); // select first line

a =bin_dec(a);//prevod z binárej hod.na dekadickú

b = (a / 10) % 10; // desiatky
lcd_putch(b + 48 ); // zobrazenie na LCD
b = a % 10; // jednotky
lcd_putch(b + 48 ); // zobrazenie na LCD

}	

}

EDIT.
Tak už to mám.Funkcie pre komunikáciu z DS1302 boli na nič.
Pripájam funkčný zdroják.
Relatko.
DS1302.c.txt (4.63 KB)