导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→用伟福仿真环境的请帮忙!!

* 55917: 用伟福仿真环境的请帮忙!!

   xushuang00316 
xushuang00316发表的帖子 

 用伟福仿真环境的请帮忙!!
我在伟福软件编译环境下有两个程序出现连接错误,以前的一些程序也没这样啊   ???不好意思,注释粘贴过来变成了乱码,这是一个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

  
回复该帖

本主题共有 2 帖,分页:>>>>>该主题的所有内容[2]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  56145.[详细]可以发邮件问问伟福的工程师
摘要:rt......(2字)
- [guest][1007次] 2004年6月8日

[上一篇帖子]:程序由外扩的ROM放在51的RAM里去执行?我的程序是放在外扩的ROM,现在我想要把其中的一些程序放
[下一篇帖子]:小弟在编一P87C591的程序,挂仿真器运行正常,但写到片子里运行不正常,小弟在编一P87C591的