您的位置 首页 方案

浅谈单片机c言语模块化编程-附ds1302时钟芯片驱动程序

在单片机c语言编程中,模块化编程显得非常重要。我觉得,模块化恰恰体现了c语言很好的可移植性。嵌入式编程中,硬件模块区分非常明显,所以…

单片机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);

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/263978.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部