用keil编译DS1302时钟芯片的错误:error c213

编译时出现图片上的错误,求助各位大侠是什么原因?出错的是①-②、③-④、⑤-⑥行,估计是数组的错误,但我找不到有什么错误,程序如下:#include "ds1302.h"
#include <reg52.h>
#include<intrins.h>
unsigned char time_buf1[8]={20,10,6,5,12,55,00,6};//空年月日时分秒周
unsigned char time_buf[8];
sbit SCLK=P1^7;
sbit CE=P1^5;
sbit DIO=P1^6;
/*------------------------------------------------
*名称:void Write_ds1302(uchar add,uchar dat)
*功能:向DS1302指定地址写入一字节数据
*说明:无返回值
------------------------------------------------*/
void Write_ds1302(unsigned char add,unsigned char dat)
{
unsigned char i,temp;
CE=0;
SCLK=0;
CE=1;
for(i=8;i>0;i--)
{
SCLK=0;
temp=add;
DIO=(bit)(temp&0x01);
add>>=1;
SCLK=1;
}
for(i=8;i>0;i--)
{
SCLK=0;
temp=dat;
DIO=(bit)(temp&0x01);
dat>>=1;
SCLK=1;
}
CE=0;
}
/*------------------------------------------------
*名称:void Write_ds1302(uchar add,uchar dat)
*功能:从DS1302指定地址读出一字节数据
*说明:有返回值
------------------------------------------------*/
unsigned char Read_ds1302(unsigned char add)
{
unsigned char i,temp,dat;
CE=0;
SCLK=0;
CE=1;
for(i=8;i>0;i--)
{
SCLK=0;
temp=add;
DIO=(bit)(temp&0x01);
add>>=1;
SCLK=1;
}
for(i=8;i>0;i--)
{
SCLK=1;
dat>>=1;
if(DIO==1)
dat|=0x80;
SCLK=0;
}
CE=0;
return dat;
}
/*------------------------------------------------
向DS1302写入时钟数据
------------------------------------------------*/
void Ds1302_Write_Time(void)
{
unsigned char i,tmp;
for(i=0;i<8;i++)
{ //BCD处理
① tmp=time_buf1[i]/10;
time_buf[i]=time_buf1[i]%10;
② time_buf[i]=time_buf[i]+tmp*16
}
Write_ds1302(0x8e,0x00);//写保护关
Write_ds1302(0x80,0x80);//暂停
Write_ds1302(0x8c,time_buf[1]);
Write_ds1302(0x88,time_buf[2]);
Write_ds1302(0x86,time_buf[3]);
Write_ds1302(0x84,time_buf[4]);
Write_ds1302(0x82,time_buf[5]);
Write_ds1302(0x80,time_buf[6]);
Write_ds1302(0x8a,time_buf[7]);
Write_ds1302(0x8e,0x80);//写保护开
}
/*------------------------------------------------
从DS1302读出时钟数据
------------------------------------------------*/
void Ds1302_Read_Time(void)
{
unsigned char i,tmp;
③ time_buf[1]=Read_ds1302(0x8c); //年
time_buf[2]=Read_ds1302(0x88); //月
time_buf[3]=Read_ds1302(0x86); //日
time_buf[4]=Read_ds1302(0x84); //时
time_buf[5]=Read_ds1302(0x82); //分
time_buf[6]=(Read_ds1302(0x81))&0x7F;//秒
④time_buf[7]=Read_ds1302(0x8a); //周
for(i=0;i<8;i++){ //BCD处理

⑤ tmp=time_buf1[i]/10;
time_buf[i]=time_buf1[i]%10;
⑥ time_buf[i]=time_buf[i]+tmp*16;

}
}

你的程序我编译了一下,除了在“② time_buf[i]=time_buf[i]+tmp*16”之后少了个分号外,其他都是正确的啊。追问

源程序加了分号。加上分号之后还是同样的错误啊,你怎么编译没错啊,我用的是keil uVision2.重新建了一个project,还是同样的错误,你是怎么试的?

追答

我把你程序中的1、2、3、4、5、6去掉,再把分号加上,然后编译就通过了啊,不过我用的是KEIL3,C51版本是8.02

追问

为什么你把头文件去掉,编译不出错?我是初学者,有很多不太懂,如图有很多.c和.h的文件,他们之间是什么关系,为什么下载的别人的程序编译还是出错?如何编写一个大型的程序?

追答

因为在这个C文件中,并没有使用到文件外的函数或变量,所以编译能通过。C和H文件的关系就好比是一个明星和他的经纪人一样。理论上,你也可以不要H文件,只要把所有的函数和变量定义写在一个C文件中就可以了。这样分开,是便于模块化地开发一个程序,也便于DEBUG,呵呵,等你开发的多了你自然而然就会采用这样的方法了。

温馨提示:答案为网友推荐,仅供参考
相似回答