郁闷了,做了一个月连和万年历都做不出来!好烦躁。现在把程序烧进自己制作的板子的
单片机里,LCD显示时间部分有问号出现,我用的是DS1302的时钟
芯片。要死了,不知道该怎么调试啊~~现在就是不能确定是程序问题还是板子问题。各位大神知道该怎么调试吗?附上时钟芯片的部分程序,各位看下有不有错~~求助。
sbit bit7=ACC^7;
sbit bit0=ACC^0;
sbit rst=P1^5;
sbit sclk=P1^6;
//sbit rst=P1^6;
//sbit sclk=P1^5;
sbit IO=P1^7;
void input(uchar);
uchar output(void);
void wr1302(uchar, uchar);
uchar re1302(uchar);
void set1302(uchar *p);
void get1302(uchar cur
time[]);
uchar time[7];
void input(uchar date)
{
uchar i;
rst=1;
ACC=date;
for(i=8;i>0;i--)
{
IO=bit0;
sclk=0;
sclk=1;
ACC=ACC>>=1;
}
}
uchar output(void)
{
uchar i;
rst=1;
for(i=8;i>0;i--)
{
ACC=ACC>>=1;
IO=1;
sclk=1;
sclk=0;
bit7=IO;
}
return(ACC);
}
void wr1302(uchar add, uchar date)
{
rst=0;
sclk=0;
rst=1;
input(add);
input(date);
sclk=1;
rst=0;
}
uchar re1302(uchar add)
{
uchar date;
rst=0;
sclk=0;
rst=1;
input(add);
date=output();
sclk=1;
rst=0;
return(date);
}
void set1302(uchar *p)
{
uchar i;
uchar add=0x80;
wr1302(0x8e,0x00);
for(i=7;i>0;i--)
{
wr1302(add,*p);
p++;
add+=2;
}
wr1302(0x8e,0x00);
}
void get1302(uchar curtime[])
{
uchar i;
uchar add=0x81;
for(i=0;i<7;i++)
{
curtime[i]=re1302(add);
add+=2;
}
}
第一:既然用C语言写程序了,就不要用到ACC,程序运行的时候经常用到ACC,因此你运行的时候很容易出错。
第二:IC通信的时候电平时序有一定的要求。写驱动的时候要严格遵守。
第三:写程序的时候注意一下格式。很多大神看到你的代码这样别人都不愿意看,更别说帮你解决问题了。
以下附改过的程序,亲测可用,运行正常:
- sbit rst=P3^5;
- sbit sclk=P3^6;
- sbit IO=P3^4;
- void input(uchar);
- uchar output(void);
- void wr1302(uchar, uchar);
- uchar re1302(uchar);
- void set1302(uchar *p);
- void get1302(uchar curtime[]);
- void input(uchar date)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- sclk=0;
- IO = date&0x01; //每次传输低字节
- date >>= 1; //右移一位
- sclk=1;
- }
- }
- uchar output(void)
- {
- uchar i,result;
- for(i=0;i<8;i++)
- {
- if(IO)
- {
- result|=0x80; //每次传输低字节
- }
- sclk=0;
- result >>= 1; //右移一位
- _nop_();
- _nop_();
- _nop_();
- sclk=1;
- }
- return(result);
- }
- void wr1302(uchar add, uchar date)
- {
- rst=0;
- _nop_();
- sclk=0;
- _nop_();
- rst=1;
- _nop_();
- input(add);
- input(date);
- rst=0;
- }
- uchar re1302(uchar add)
- {
- uchar date;
- rst=0;
- _nop_();
- sclk=0;
- _nop_();
- rst=1;
- _nop_();
- input(add);
- date=output();
- return(date);
- }
- void set1302(uchar *p)
- {
- uchar i;
- uchar add=0x80;
- wr1302(0x8e,0x00);
- for(i=7;i>0;i--)
- {
- wr1302(add,*p);
- p++;
- add+=2;
- }
- wr1302(0x8e,0x00);
- }
- void get1302(uchar curtime[])
- {
- uchar i;
- uchar add=0x81;
- for(i=0;i<7;i++)
- {
- curtime[i]=re1302(add);
- add+=2;
- }
- }
复制代码一周热门 更多>