在单片机c言语编程中,模块化编程显得非常重要。我觉得,模块化恰恰表现了c言语很好的可移植性。嵌入式编程中,硬件模块委任非常显着,所以驱动程序用模块化编程显得非常便利简练。
C51中为了节约ram资源,数组用code界说在rom中,这样界说数组就不能从头赋值。
自己对着例程一条一条的看。诚心一共没有发现过错。终究把函数一个一个替换成例程中的。终究确定在ds1302_write_byte中。发现了一个很独特的工作。过错是因为fou循环,我用for(i=0;i<8;i++)替换成为for(i=8;i>0;i–)处理了问题。
extern能够置于变量或许函数前,以一共变量或许函数的界说在其他文件中,提示编译器遇到此变量和函数时在其他模块中寻觅其界说。别的,extern也可用来进行链接指定。
运用模块化编程的时分,在.h里声明晰数组。.c文件直接运用数组,在衔接时会呈现过错multiple public definition。
在.h文件用extren声明数组,在.c文件声明赋值。过错处理。
附ds1302时钟芯片驱动程序
void ds1302_write_byte(unsigned char d)
{
unsigned char i;
ACC=d;
for(i=0;i<8;i++)//改成i=0;i<8;没有现象。。为嘛呀。。。
{
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);
}