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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2276|回復: 3
打印 上一主題 下一主題
收起左側

為什么我在用單片機P2口的某些引腳會報錯?

[復制鏈接]
跳轉到指定樓層
樓主
ID:735654 發表于 2020-9-13 12:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我的特殊寄存器頭文件里已經是了這樣寫的了(下面是STC標準頭文件的IO并口定義片段)
sfr P0   = 0x80;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr P1   = 0x90;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sfr P2   = 0xA0;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sfr P3   = 0xB0;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
但是,在一個工程里,其中一個頭文件這么寫就不會報錯
#define LCD_DATA P0
#define LCD_EN P27
#define LCD_RS P26
#define LCD_RW P25


LCD_w_com(uc com) /*LCD輸入指令*/
{
LCD_EN=1;
dly(1);
LCD_RS=0;
LCD_RW=0;
LCD_DATA=com;
dly(2);
LCD_EN=0;
dly(1);
LCD_EN=1;
}


LCD_w_data(uc disdat) /*LCD輸入數據*/
{
LCD_EN=1;
dly(1);
LCD_RS=1;
LCD_RW=0;
LCD_DATA=disdat;
dly(2);
LCD_EN=0;
dly(1);
LCD_EN=1;
}


LCD_init()  /*LED初始化*/
{
LCD_w_com(0x38);  /*00111000,功能設置*/
LCD_w_com(0x0c);  /*00001100,顯示開關*/
LCD_w_com(0x06);  /*00000110,輸入模式光標右移,*/
LCD_w_com(0x01);  /*擦除屏幕,最簡單的命令*/
}


LCD_display(uc x,uc y,ui disdat[]) /*LCD1206顯示程序*/
{
xui i,j;
j=szof(disdat);
if(j>16)
  {
  rtn 1;
  }
if(y==1&&y==2)  /*判斷是1行還是2行*/
  {
    if(y==1)  /*如果是第一行*/
    {  
      LCD_w_com(0x80+x);  /*指令位*/
      fr(i=0;i<j;i++)
      {
      LCD_w_data(*disdat);
      disdat++;
      }
    }
    if(y==2)  /*如果是第二行*/
    {   
      LCD_w_com(0x80+0x40+x);  /*指令位*/
      fr(i=0;i<j;i++)
      {
      LCD_w_data(*disdat);
      disdat++;
      }
    }
  rtn 0;
  }
else
  {
  rtn 1;
  }
}
另一個頭文件,這么寫就會報錯,而且怎么弄也不行:
  1. #define SDA P20
  2. #define SCL P21
  3. i2c_clk_en() /*時鐘使能函數*/
  4. {
  5. dly(5);
  6. SCL=1;
  7. dly(5);
  8. SCL=0;
  9. dly(5);
  10. }


  11. i2c_ack() /*應答位輸出*/
  12. {
  13. SDA=0;
  14. i2c_clk_en();
  15. }


  16. i2c_start()   /*啟動傳輸函數*/
  17. {
  18. SCL=1;
  19. dly(1);
  20. SDA=0; /*輸出下降沿*/
  21. dly(2);
  22. SCL=0;
  23. dly(2);
  24. }


  25. i2c_finish()  /*結束傳輸函數*/
  26. {
  27. SCL=0;
  28. dly(1);
  29. SDA=0;
  30. dly(1)
  31. SCL=1;
  32. dly(2)
  33. SDA=1;
  34. dly(2);
  35. }


  36. i2c_init(ui startadd,bt wt)  /*初始化函數,向從機聲明器件地址、讀寫方式、和字節地址*/
  37. {
  38. xui i;
  39. xui *add_p = &startadd; /**/
  40. SDA=1;
  41. i2c_clk_en();
  42. SDA=0;
  43. i2c_clk_en();
  44. SDA=1;
  45. i2c_clk_en();
  46. SDA=0;
  47. i2c_clk_en();
  48. SDA=0;
  49. i2c_clk_en();
  50. i2c_clk_en();
  51. i2c_clk_en();
  52. if(wt==0)  /*傳輸讀寫標志位*/
  53.   {
  54.   SDA=0;
  55.   i2c_clk_en();
  56.   }
  57. else
  58.   {
  59.   SDA=1;
  60.   i2c_clk_en();
  61.   }
  62. i2c_ack();
  63. fr(i=0;i<8;i++)  /*傳輸字節地址幀*/
  64.   {
  65.   if(i>0)
  66.     {
  67.     startadd<<1;
  68.     }
  69.   if(startadd && 0x80)
  70.     {
  71.     SDA=1;
  72.     }
  73.     else
  74.     {
  75.     SDA=0;
  76.     }
  77.   i2c_clk_en();
  78.   }
  79. }


  80. i2c_write_core(uc *wdats)  /*存儲寫入內核函數*/
  81. {
  82. xui i;
  83. fr(i=0;i<8;i++)
  84.   {
  85.   if(i>0)
  86.     {
  87.     wdats[ i]<<1;
  88.     }
  89.   if(wdats[ i] && 0x80)
  90.     {
  91.     SDA=1;
  92.     }
  93.     else
  94.     {
  95.     SDA=0;
  96.     }
  97.   }
  98. i2c_ack();/*數據應答位*/
  99. }




  100. i2c_read_core(ui datsize)  /*I2C存儲器讀出內核函數*/
  101. {
  102. xui i;
  103. xui j;
  104. xuc rdat[];
  105. xui *pnt;
  106. pnt=&rdat[0];
  107. fr(j=0;j<datsize;j++) /*每循環一次發送一個字節*/
  108.   {
  109.   fr(i=0;i>8;i++) /*八個讀位循環,一個字節*/
  110.     {
  111.     if(i>0)
  112.       {
  113.       rdat[j]<<1; /*頭一位不左移,其余的都左移*/
  114.       }
  115.     i2c_clk_en();
  116.     if(SDA==1) /*如果總線沒有被從機拉低*/
  117.       {
  118.       rdat[j]+1; /*則判斷為1,否則為0,加到rdat[j]的最后一位上*/
  119.       }
  120.     }
  121.   i2c_ack();    /*發送一個應答位*/
  122.   }
  123. rtn pnt;
  124. }


  125. i2c_r_optr(ui startadd,ui dtsz) /*完整讀操作函數*/
  126. {
  127. xui i;
  128. xuc rdat[];
  129. xui *pnt=rdat[0];
  130. i2c_start();
  131. i2c_init(startadd,1);
  132. fr(i=0;i<dtsz;i++)
  133.   {
  134.   rdat[ i]=i2c_read_core(dtsz);
  135.   }
  136. i2c_finishi();
  137. rtn pnt;  /*返回讀出數據的指針*/
  138. }


  139. i2c_w_optr(ui startadd,uc *dats,ui dtsz) /*完整寫操作函數*/
  140. {
  141. xui j;  /*定義循環變量*/
  142. i2c_start(); /*執行起始操作*/
  143. i2c_init(startadd,0); /*傳遞起始讀寫地址,進行初始化*/
  144. fr(j=0;j<dtsz;j++)
  145.   {
  146.   i2c_write_core(dats+j); /*傳遞參數,進行讀出*/
  147.   }
  148. i2c_finishi();/*返回空值*/

  149. }
復制代碼


百思不得其解,求幫助!



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:342954 發表于 2020-9-13 16:43 | 只看該作者
是不是你加了STC頭文件,和又寫了SRF P2
回復

使用道具 舉報

板凳
ID:792404 發表于 2020-9-13 19:00 | 只看該作者
I/O要先定義試試  
sbit P20 = P2^0;
sbit P21 = P2^1;
#define SDA P20
#define SCL P21
回復

使用道具 舉報

地板
ID:735654 發表于 2020-9-13 21:27 | 只看該作者
YUANYUXING 發表于 2020-9-13 19:00
I/O要先定義試試  
sbit P20 = P2^0;
sbit P21 = P2^1;

我要是沒定義還用問你嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线视频一区二区三区 | 欧美精品久久久久久久久久 | 日韩三级电影一区二区 | 免费观看av | 久久久久亚洲精品 | 精品国产精品一区二区夜夜嗨 | 视频一区二区中文字幕 | 范冰冰一级做a爰片久久毛片 | 成人在线视频网 | 91精品国产高清一区二区三区 | 91久久国产综合久久91精品网站 | 女人av| 久久久久国产精品一区二区 | 一级毛片视频在线观看 | 亚洲精品成人在线 | 免费国产精品久久久久久 | 国产三级大片 | 蜜桃视频在线观看www社区 | 欧美日韩福利视频 | 特一级毛片| 99精品久久久| 国产高清在线 | 日本黄色高清视频 | 一区中文字幕 | 国产精品123区 | 日韩一区二区在线视频 | 久久国产福利 | 国产精品毛片 | 2022精品国偷自产免费观看 | 国产亚洲精品久久久优势 | 黄视频免费在线 | 精品粉嫩aⅴ一区二区三区四区 | 亚洲经典一区 | 亚洲精品一区二区在线观看 | 黄色免费av | 性色视频 | 夜夜爽夜夜操 | 色黄爽 | 亚洲欧美日韩精品久久亚洲区 | 中文字幕二区 | 黄色免费网站在线看 |