浅谈单片机c语言模块化编程-附ds1302时钟芯片驱动程序
报错原因,修改了不能修改的变量。
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);
}
单片机模块化编程ds130 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)