久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2900|回復: 3
收起左側

C51單片機寫的I2C驅動頭文件中,引腳經過宏定義為什么會報錯?

[復制鏈接]
ID:735654 發表于 2020-8-18 16:18 | 顯示全部樓層 |閱讀模式
最近用C51寫一個單片機的門禁機操作系統,其中一個I2C驅動文件我的宏定義試了以下很多種寫法,但還是報錯
貌似這四種都會報錯
#define SDA P20 /*定義SDA線為P2^0端口*/
#define SDA P2^0
sb SDA=P2^0; /*sb是sbit的宏定義簡寫*/
sb SDA=P2^0;
/*下面是頭文件的程序,錯誤代碼是C141語法錯誤,*/
#define SCL P21  /*定義SCL線為P2^1端口*/
#define SDA P20  /*定義SDA線為P2^0端口*/
i2c_clk_en() /*時鐘使能函數*/
{
dly(5);
SCL=1;
dly(5);
SCL=0;
dly(5);
}
i2c_ack() /*應答位輸出*/
{
SDA=0;
i2c_clk_en();
}
i2c_start()   /*啟動傳輸函數*/
{
SCL=1;
dly(1);
SDA=0; /*輸出下降沿*/
dly(2);
SCL=0;
dly(2);
}
i2c_finish()  /*結束傳輸函數*/
{
SCL=0;
dly(1);
SDA=0;
dly(1)
SCL=1;
dly(2)
SDA=1;
dly(2);
}
i2c_init(ui startadd,bt wt)  /*初始化函數,向從機聲明器件地址、讀寫方式、和字節地址*/
{
xui i;
xui *add_p = &startadd;
SDA=1;
i2c_clk_en();
SDA=0;
i2c_clk_en();
SDA=1;
i2c_clk_en();
SDA=0;
i2c_clk_en();
SDA=0;
i2c_clk_en();
i2c_clk_en();
i2c_clk_en();
if(wt==0)  /*傳輸讀寫標志位*/
  {
  SDA=0;
  i2c_clk_en();
  }
else
  {
  SDA=1;
  i2c_clk_en();
  }
i2c_ack();
fr(i=0;i<8;i++)  /*傳輸字節地址幀*/
  {
  if(i>0)
    {
    startadd<<1;
    }
  if(startadd && 0x80)
    {
    SDA=1;
    }
    else
    {
    SDA=0;
    }
  i2c_clk_en();
  }
}
i2c_write_core(uc *wdats)  /*存儲寫入內核函數*/
{
xui i;
fr(i=0;i<8;i++)
  {
  if(i>0)
    {
    wdats[ i]<<1;
    }
  if(wdats[ i] && 0x80)
    {
    SDA=1;
    }
    else
    {
    SDA=0;
    }
  }
i2c_ack();/*數據應答位*/
}

i2c_read_core(ui datsize)  /*I2C存儲器讀出內核函數*/
{
xui i;
xui j;
xuc rdat[];
xui *pnt;
pnt=&rdat[0];
fr(j=0;j<datsize;j++) /*每循環一次發送一個字節*/
  {
  fr(i=0;i>8;i++) /*八個讀位循環,一個字節*/
    {
    if(i>0)
      {
      rdat[j]<<1; /*頭一位不左移,其余的都左移*/
      }
    i2c_clk_en();
    if(SDA==1) /*如果總線沒有被從機拉低*/
      {
      rdat[j]+1; /*則判斷為1,否則為0,加到rdat[j]的最后一位上*/
      }
    }
  i2c_ack();    /*發送一個應答位*/
  }
rtn pnt;
}
i2c_r_optr(ui startadd,ui dtsz) /*完整讀操作函數*/
{
xui i;
xuc rdat[];
xui *pnt;
i2c_start();
i2c_init(startadd,1);
fr(i=0;i<dtsz;i++)
  {
  rdat[ i]=i2c_read_core(dtsz);
  }
i2c_finishi();
rtn pnt;  /*返回讀出數據的指針*/
}
i2c_w_optr(ui startadd,uc *dats,ui dtsz) /*完整寫操作函數*/
{
xui j;
i2c_start();
i2c_init(startadd,0);
fr(j=0;j<dtsz;j++)
  {
  i2c_write_core(dats+j);
  }
i2c_finishi();
}

回復

使用道具 舉報

ID:287575 發表于 2020-8-18 23:30 | 顯示全部樓層
#define sb sbit
#define P21 P2^1

sb SDA=P21;

編譯了一下,沒錯誤呀
回復

使用道具 舉報

ID:235200 發表于 2020-8-19 00:13 | 顯示全部樓層
#define SDA P20 /*定義SDA線為P2^0端口*/
#define SDA P2^0
sb SDA=P2^0; /*sb是sbit的宏定義簡寫*/
sb SDA=P2^0;
/*下面是頭文件的程序,錯誤代碼是C141語法錯誤,*/
#define SCL P21  /*定義SCL線為P2^1端口*/
#define SDA P20  /*定義SDA線為P2^0端口*/
這些定義的對錯取決于所選用的單片機頭文件,如REG51.h,未看到該頭文件無法判斷
回復

使用道具 舉報

ID:735654 發表于 2020-8-21 17:58 | 顯示全部樓層
zhangxiaozi 發表于 2020-8-18 23:30
#define sb sbit
#define P21 P2^1

我怎么就不行啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久久久18免费网站 | 一区二区高清在线观看 | 亚洲一区二区三区在线免费观看 | 亚洲第1页| 久久久久久国产精品免费免费狐狸 | 精品一区二区三区在线观看国产 | 国产一区二区三区四区在线观看 | 色综合激情 | 精精国产xxxx视频在线播放 | 伊人电影院av | 国产精品永久在线观看 | 精品一区二区三区91 | 中文字幕欧美一区 | 久久久久久亚洲 | 国产精品二区三区 | 四虎影院在线观看av | 久久国产免费 | 在线a视频 | 蜜桃色网 | 成人二区三区 | 日韩在线视频一区二区三区 | 亚洲精品久久久一区二区三区 | 日韩一二三区 | 日韩综合网 | 亚洲精品视频一区 | 欧美久久久久久 | 国产免费一区二区 | 国产视频精品视频 | 福利视频二区 | 视频一二三区 | 成人性视频免费网站 | 国产精品视频网站 | 亚洲免费网 | 欧美中文字幕一区 | 精品伊人 | 国产激情 | 人干人人 | 亚洲欧洲一区二区 | 久久综合香蕉 | 欧美激情在线精品一区二区三区 | 亚洲国产精品成人久久久 |