淺談單片機c語言模塊化編程-附ds1302時鐘芯片驅動程序
C51中為了節(jié)省ram資源,數(shù)組用code定義在rom中,這樣定義數(shù)組就不能重新賦值。
自己對著例程一條一條的看。真心表示沒有發(fā)現(xiàn)錯誤。最后把函數(shù)一個一個替換成例程中的。最終確定在ds1302_write_byte中。發(fā)現(xiàn)了一個很奇特的事情。錯誤是因為fou循環(huán),我用for(i=0;i<8;i++)替換成為for(i=8;i>0;i--)解決了問題。
extern可以置于變量或者函數(shù)前,以表示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時在其他模塊中尋找其定義。另外,extern也可用來進行鏈接指定。
使用模塊化編程的時候,在.h里聲明了數(shù)組。.c文件直接使用數(shù)組,在連接時會出現(xiàn)錯誤multiple public definition。
在.h文件用extren聲明數(shù)組,在.c文件聲明賦值。錯誤解決。
附ds1302時鐘芯片驅動程序
void ds1302_write_byte(unsigned char d)
{
unsigned char i;
ACC=d;
for(i=0;i<8;i++)//改成i=0;i<8;沒有現(xiàn)象。。為嘛呀。。。
{
io=ACC0;
//delayus(1);
sck=1;
//delayus(1);
sck=0;
ACC=ACC>>1;
}
}
void ds1302_write(uchar ad,uchar dat)
{
rst=0;
sck=0;
rst=1;
//delayus(1);
ds1302_write_byte(ad);
ds1302_write_byte(dat);
sck=1;
rst=0;
}
unsigned char ds1302_read_byte()
{
unsigned char i;
for(i=0;i<8;i++)
{
ACC=ACC>>1;
ACC7 =io;
sck=1;
//delayus(1);
sck=0;
//delayus(1);
}
return (ACC);
}
unsigned char ds1302_read(unsigned char add)
{
unsigned char ucdat;
rst=0;
sck=0;
rst=1;
//delayus(1);
ds1302_write_byte(add);
ucdat=ds1302_read_byte();
sck=1;
rst=0;
return ucdat;
}
void ds1302_init()
{
ds1302_write(0x8E,0x00);
}
評論