用伟福仿真环境的请帮忙!!
我在伟福软件编译环境下有两个程序出现连接错误,以前的一些程序也没这样啊 ???不好意思,注释粘贴过来变成了乱码,这是一个8563的写入时间并读出时间的程序???请告诉我连接警告是怎么回事???
那样的话是不是我就不能在硬件上实现了??
#include <reg51.h>
/*Í·ÎļþµÄ°üº¬*/
#include <intrins.h>
#define uchar unsigned char /*ºê¶¨Òå*/
#define uint unsigned int
#define _Nop() _nop_() /*¶¨Òå¿ÕÖ¸Áî*/
#define PCF8563 0xa2
#define WRADR 0x00
#define RDADR 0x02
/*¶Ë¿Ú붨Òå*/
sbit SDA=P1^3; /*Ä£ÄâI2CÊý¾Ý´«ËÍλ*/
sbit SCL=P1^2; /*Ä£ÄâI2CʱÖÓ¿ØÖÆÎ»*/
bit ack; /*Ó¦´ð±ê־λ*/
data uchar time_ram[6];
void Start_I2c()
{
SDA=1; /*·¢ËÍÆðʼÌõ¼þµÄÊý¾ÝÐźÅ*/
_Nop();
SCL=1;
_Nop(); /*ÆðʼÌõ¼þ½¨Á¢Ê±¼ä´óÓÚ4.7us,ÑÓʱ*/
_Nop();
_Nop();
_Nop();
_Nop();
SDA=0; /*·¢ËÍÆðʼÐźÅ*/
_Nop(); /* ÆðʼÌõ¼þËø¶¨Ê±¼ä´óÓÚ4¦Ìs*/
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0; /*ǯסI2C×ÜÏߣ¬×¼±¸·¢ËÍ»ò½ÓÊÕÊý¾Ý */
_Nop();
_Nop();
}
void Stop_I2c()
{
SDA=0; /*·¢ËͽáÊøÌõ¼þµÄÊý¾ÝÐźÅ*/
_Nop(); /*·¢ËͽáÊøÌõ¼þµÄʱÖÓÐźÅ*/
SCL=1; /*½áÊøÌõ¼þ½¨Á¢Ê±¼ä´óÓÚ4¦Ìs*/
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=1; /*·¢ËÍI2C×ÜÏß½áÊøÐźÅ*/
_Nop();
_Nop();
_Nop();
_Nop();
}
void SendByte(uchar c)
{
uchar BitCnt;
for(BitCnt=0;BitCnt <8;BitCnt++) /*Òª´«Ë͵ÄÊý¾Ý³¤¶ÈΪ8λ*/
{
if((c < <BitCnt)&0x80)SDA=1; /*ÅжϷ¢ËÍλ*/
else SDA=0;
_Nop();
SCL=1; /*ÖÃʱÖÓÏßΪ¸ß£¬Í¨Öª±»¿ØÆ÷¿ªÊ¼½ÓÊÕÊý¾Ýλ*/
_Nop();
_Nop(); /*±£Ö¤Ê±ÖÓ¸ßµçÆ½ÖÜÆÚ´óÓÚ4¦Ìs*/
_Nop();
_Nop();
_Nop();
SCL=0;
}
_Nop();
_Nop();
SDA=1; /*8λ·¢ËÍÍêºóÊÍ·ÅÊý¾ÝÏߣ¬×¼±¸½ÓÊÕÓ¦´ðλ*/
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
if(SDA==1)ack=0;
else ack=1; /*ÅжÏÊÇ·ñ½ÓÊÕµ½Ó¦´ðÐźÅ*/
SCL=0;
_Nop();
_Nop();
}
uchar RcvByte()
{
uchar retc;
uchar BitCnt;
retc=0;
SDA=1; /*ÖÃÊý¾ÝÏßΪÊäÈ뷽ʽ*/
for(BitCnt=0;BitCnt <8;BitCnt++)
{
_Nop();
SCL=0; /*ÖÃʱÖÓÏßΪµÍ£¬×¼±¸½ÓÊÕÊý¾Ýλ*/
_Nop();
_Nop(); /*ʱÖÓµÍµçÆ½ÖÜÆÚ´óÓÚ4.7¦Ìs*/
_Nop();
_Nop();
_Nop();
SCL=1; /*ÖÃʱÖÓÏßΪ¸ßʹÊý¾ÝÏßÉÏÊý¾ÝÓÐЧ*/
_Nop();
_Nop();
retc=retc < <1;
if(SDA==1)retc=retc+1; /*¶ÁÊý¾Ýλ,½ÓÊÕµÄÊý¾Ýλ·ÅÈëretcÖÐ */
_Nop();
_Nop();
}
SCL=0;
_Nop();
_Nop();
return(retc);
}
void Ack_I2c(bit a)
{
if(a==0)SDA=0; /*ÔÚ´Ë·¢³öÓ¦´ð»ò·ÇÓ¦´ðÐźŠ*/
else SDA=1;
_Nop();
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop(); /*ʱÖÓµÍµçÆ½ÖÜÆÚ´óÓÚ4¦Ìs*/
_Nop();
_Nop();
_Nop();
SCL=0; /*ÇåʱÖÓÏߣ¬Ç¯×¡I2C×ÜÏßÒÔ±ã¼ÌÐø½ÓÊÕ*/
_Nop();
_Nop();
}
/bit ISendByte(uchar sla,uchar c)
{
Start_I2c(); /*Æô¶¯×ÜÏß*/
SendByte(sla); /*·¢ËÍÆ÷¼þµØÖ·*/
if(ack==0)return(0);
SendByte(c); /*·¢ËÍÊý¾Ý*/
if(ack==0)return(0);
Stop_I2c(); /*½áÊø×ÜÏß*/
return(1);
}
bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
{
uchar i;
Start_I2c(); /*Æô¶¯×ÜÏß*/
SendByte(sla); /*·¢ËÍÆ÷¼þµØÖ·*/
if(ack==0)return(0);
SendByte(suba); /*·¢ËÍÆ÷¼þ×ÓµØÖ·*/
if(ack==0)return(0);
for(i=0;i <no;i++)
{
SendByte(*s); /*·¢ËÍÊý¾Ý*/
if(ack==0)return(0);
s++;
}
Stop_I2c(); /*½áÊø×ÜÏß*/
return(1);
}
bit IRcvByte(uchar sla,uchar *c)
{
Start_I2c(); /*Æô¶¯×ÜÏß*/
SendByte(sla+1); /*·¢ËÍÆ÷¼þµØÖ·*/
if(ack==0)return(0);
*c=RcvByte(); /*¶ÁÈ¡Êý¾Ý*/
Ack_I2c(1); /*·¢ËͷǾʹðλ*/
Stop_I2c(); /*½áÊø×ÜÏß*/
return(1);
}
bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
{
uchar i;
Start_I2c();
SendByte(sla);
if(ack==0)return(0);
SendByte(suba);
if(ack==0)return(0);
Start_I2c();
SendByte(sla+1);
if(ack==0)return(0);
for(i=0;i <no-1;i++)
{
*s=RcvByte();
Ack_I2c(0);
s++;
}
*s=RcvByte();
Ack_I2c(1);
Stop_I2c();
return(1);
}
mian()
{
uchar code ini_dat[13]={0x0,0x0,0x00,0x30,0x08,0x25,0x5,0x05,0x01,
0X00,0X00,0X00,0X00};
ISendStr(PCF8563,WRADR,ini_dat,13) ;
IRcvStr(PCF8563,RDADR,time_ram,6);
time_ram[0]=time_ram[0]&0x7f;
time_ram[1]=time_ram[1]&0x7f;
time_ram[2]=time_ram[2]&0x3f;
time_ram[3]=time_ram[3]&0x3f;
time_ram[4]=time_ram[4]&0x07;
time_ram[5]=time_ram[5]&0x1f;
}
发表时间:2004年6月3日14:06:35