登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

大侠帮我看看我的程序哪错了啊?

作者:发霉的味道 栏目:单片机
大侠帮我看看我的程序哪错了啊?
#include "IO.H"

/* #define  WRITE  0xA0  ; */

/* #define  READ   0xA1  ; */

/* **************************/
void delay ( unsigned int timeM )

{  unsigned  int  con1;

         TH0  = 0x06 ;

         TL0  = 0x06 ;

         TMOD = 0x02 ;

            TF0  = 0 ;

            TR0  = 1 ;

   for ( ; timeM > 0 ; timeM-- )

       { for ( con1=4 ; con1>0 ; )

              if ( TF0 ) {   con1-- ;

                            TF0 = 0;

                          }

        }

}


/* I2C Start */

void startI2C ( void )

{    SDAT = 1 ,SCLK = 1 ;

     someNOP()  ;

     SDAT = 0   ;

     someNOP()  ;

     SCLK = 0   ;

     return ;
}

/*    stop          */

void stopI2C ( void )

{    SDAT = 0  ,SCLK = 1 ;

     someNOP()   ;

     SDAT = 1    ;

     someNOP()   ;

     return  ;

}

/*    answer  */

void ackI2C ( bit answer)

{   if ( answer == 0 )  SDAT = 0  ;

    else   SDAT = 1   ;

    SCLK =  1    ;
     
    someNOP()    ;
    
    SCLK = 0     ;
         
   return    ;

}

/*   TEST ack */

bit TESTack ( void )

{      bit ack  ;

    SDAT = 1 ;

    SCLK = 1  ;

    _nop_()  ;

    _nop_()  ;

    if ( SDAT == 1 )  ack = 0 ;

    else  ack = 1  ;

    SCLK = 0  ;

    _nop_()  ;

    _nop_()  ;

   return ( ack ) ;

}

/*  send byte */

void senddata ( unsigned CHAR sdata )

{  unsigned CHAR bitcount ;
   
   for ( bitcount = 0 ; bitcount < 8 ; bitcount ++ )
       
       {     if ( sdata << bitcount & 0x80 )  SDAT = 1  ;
           
            else  SDAT = 0  ;

            SCLK = 1  ;

            someNOP() ;

            SCLK = 0  ;

        }

    return  ;

}

/*  receive byte  */

unsigned CHAR receivedata ()

{   unsigned CHAR bitcount , rdata = 0 ;

    for ( bitcount = 0 ; bitcount < 8 ; bitcount ++ )
        
        {    SCLK = 0  ;
            
            someNOP() ;

            SCLK = 1  ;

            _nop_() ;

            _nop_() ;

            if ( SDAT == 1 ) rdata = ( rdata << 1 ) + 1  ;

            else  rdata <<= 1  ;

            _nop_() ;

            _nop_() ;

            SCLK = 0  ;

         }

     return ( ( unsigned CHAR ) rdata ) ;

}

/*   read data  */

void  Rreceivedata ( unsigned CHAR headadd , unsigned CHAR N , unsigned CHAR *buf )

{   startI2C () ;

    senddata ( 0xa0 ) ;

    TESTack () ;
    
    senddata ( headadd ) ;

    TESTack ()  ;

    startI2C () ;

    senddata ( 0xa1 ) ;

    TESTack () ;

    for (  ;  N != 0 ; N -- )
        
        {  *buf = receivedata () ;

           buf ++  ;

           ackI2C ( 0 ) ;

         }

    ackI2C ( 1 ) ;

    stopI2C () ;

    return   ;
         
}

/*   write data */

void  Wsenddata ( unsigned CHAR headadd , unsigned CHAR N , unsigned CHAR *buf )
  
{   startI2C () ;

    senddata ( 0xa0 ) ;

    TESTack () ;

    senddata ( headadd ) ;

    TESTack () ;

    for (  ; N != 0 ; N ++ )
        
        {   senddata ( *buf ) ;
2楼: >>参与讨论
发霉的味道
!!!
void  Wsenddata ( unsigned CHAR headadd , unsigned CHAR N , unsigned CHAR *buf )
  
{   startI2C () ;

    senddata ( 0xa0 ) ;


void  Rreceivedata ( unsigned CHAR headadd , unsigned CHAR N , unsigned CHAR *buf )

{   startI2C () ;

    senddata ( 0xa0 ) ;
这几句不知道为什么总是无法编译,其它语句却可以正常编译.真急死我了.


3楼: >>参与讨论
taoest
出错信息呢?
出错信息呢?

4楼: >>参与讨论
turmary
试试这个

#include "ATMEL\AT89X52.H"
#include "INTRINS.H"


#define someNOP() _nop_(); \
    _nop_()
#define SDAT P2_0
#define SCLK P2_1
/* #define  WRITE  0xA0  ; */
/* #define  READ   0xA1  ; */
/* **************************/
void delay(unsigned int timeM)
{
    unsigned int con1;
    TH0 = 0x06;
    TL0 = 0x06;
    TMOD = 0x02;
    TF0 = 0;
    TR0 = 1;
    for (; timeM > 0; timeM--) {
        for (con1 = 4; con1 > 0;)
            if (TF0) {
                con1--;
                TF0 = 0;
            }
    }
}

/* I2C Start */
void startI2C(void)
{
    SDAT = 1, SCLK = 1;
    someNOP();
    SDAT = 0;
    someNOP();
    SCLK = 0;
    return;
}

/*    stop          */
void stopI2C(void)
{
    SDAT = 0, SCLK = 1;
    someNOP();
    SDAT = 1;
    someNOP();
    return;
}

/*    answer  */
void ackI2C(bit answer)
{
    if (answer == 0)
        SDAT = 0;
    else
        SDAT = 1;
    SCLK = 1;

    someNOP();

    SCLK = 0;

    return;
}

/*   TEST ack */
bit TESTack(void)
{
    bit ack;
    SDAT = 1;
    SCLK = 1;
    _nop_();
    _nop_();
    if (SDAT == 1)
        ack = 0;
    else
        ack = 1;
    SCLK = 0;
    _nop_();
    _nop_();
    return (ack);
}

/*  send byte */
void senddata(unsigned CHAR sdata)
{
    unsigned CHAR bitcount;

    for (bitcount = 0; bitcount < 8; bitcount++)
     {
        if (sdata << bitcount & 0x80)
            SDAT = 1;

        else
            SDAT = 0;
        SCLK = 1;
        someNOP();
        SCLK = 0;
    }
    return;
}

/*  receive byte  */
unsigned CHAR receivedata()
{
    unsigned CHAR bitcount, rdata = 0;
    for (bitcount = 0; bitcount < 8; bitcount++)
     {
        SCLK = 0;

        someNOP();
        SCLK = 1;
        _nop_();
        _nop_();
        if (SDAT == 1)
            rdata = (rdata << 1) + 1;
        else
            rdata <<= 1;
        _nop_();
        _nop_();
        SCLK = 0;
    }
    return ((unsigned CHAR) rdata);
}

/*   read data  */
void Rreceivedata(unsigned CHAR headadd, unsigned CHAR N,
          unsigned CHAR *buf)
{
    startI2C();
    senddata(0xa0);
    TESTack();

    senddata(headadd);
    TESTack();
    startI2C();
    senddata(0xa1);
    TESTack();
    for (; N != 0; N--)
     {
        *buf = receivedata();
        buf++;
        ackI2C(0);
    }
    ackI2C(1);
    stopI2C();
    return;

}

/*   write data */
void Wsenddata(unsigned CHAR headadd, unsigned CHAR N, unsigned CHAR *buf)
{
    startI2C();
    senddata(0xa0);
    TESTack();
    senddata(headadd);
    TESTack();
    for (; N != 0; N++)
     {
        senddata(*buf);
        while (TESTack() == 0) {;

        }
        buf++;
    }
    stopI2C();
    delay(10);
    return;
}


5楼: >>参与讨论
发霉的味道
不是啊
我的这些IO口已经定义了,在IO.H中,我一直想不明白编译不出错,但是跟踪时,总是不能跟到
void  Wsenddata ( unsigned CHAR headadd , unsigned CHAR N , unsigned CHAR *buf )
  
{   startI2C () ;             无法设断点

    senddata ( 0xa0 ) ;       无法设断点


void  Rreceivedata ( unsigned CHAR headadd , unsigned CHAR N , unsigned CHAR *buf )

{   startI2C () ;             无法设断点

    senddata ( 0xa0 ) ;       无法设断点

这两个函数是进行8个字节连续操作的,其他语句可以正常断点,就是这开头两行,跟不了,试了重写了函数单字节操作没有问题,为什么连续操作就不行呢?


6楼: >>参与讨论
发霉的味道
!!
我自己顶高点!!

7楼: >>参与讨论
rainbowwrh
无法设断点??
无法设断点???
可能这两句不是有效的语句, 所以编译器不允许在无效的语句(如注释, 空白的地方)设断点的. 仔细看看是不是其他地方出错了.

8楼: >>参与讨论
nust1996
无法设断点??
无法设断点??
是因为被优化了,如果程序有错,你就把错误信息发出来啊

9楼: >>参与讨论
发霉的味道
!!!
没有出错信息啊,也没有提示出错.


参与讨论
昵称:
讨论内容:
 
 
相关帖子
DS1820及其高精度温度测量的实现
错了,是十进制转ASCII的
浮点数转换方法
请教各位单片机学习(培训)
现在广告做的蛮兄的金立手机到底如何?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号