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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求助大佬關于PCF8591的問題 不能寫入d/a的數據進行模擬輸出

[復制鏈接]
跳轉到指定樓層
樓主
我這個程序哪里有問題   一直不能寫入d/a的數據進行模擬輸出  
以及不能讀取8591的數據

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit scl=P0^1;
  6. sbit sda=P0^0;
  7. void delay()
  8. {_nop_();_nop_();_nop_();_nop_();_nop_();}
  9. void init()
  10. {
  11. scl=1;
  12. delay();
  13. sda=1;
  14. delay();
  15. }
  16. void start()
  17. {
  18. sda=1;
  19. delay();
  20. scl=1;
  21. delay();
  22. sda=0;
  23. delay();
  24. }
  25. void respons()
  26. {
  27. uchar i=0;
  28. scl=0;
  29. delay();
  30. while((sda==1)&&i<255)
  31.   i++;
  32.   scl=0;
  33.   delay();
  34. }
  35. void stop()
  36. {
  37. sda=0;
  38. delay();
  39. scl=1;
  40. delay();
  41. sda=1;
  42. delay();
  43. }
  44. void writebyte(uchar byte)
  45. {
  46. uchar i;
  47. for(i=0;i<8;i++)
  48. {
  49.   byte=byte<<1;
  50.   scl=0;
  51.   delay();
  52.   sda=CY;
  53.   delay();
  54.   scl=1;
  55.   delay();
  56. }
  57. scl=0;
  58. delay();
  59. sda=1;
  60. delay();
  61. }
  62. uchar readbyte()
  63. {
  64. uchar i,k=0;
  65. scl=0;
  66. delay();
  67. sda=1;
  68. for(i=0;i<8;i++)
  69. {
  70.   scl=1;
  71.   delay();
  72.   k=(k<<1)|sda;
  73.   delay();
  74.   scl=0;
  75.   delay();
  76. }
  77. sda=0;
  78. delay();
  79. return k;
  80. }
  81. uchar read(uchar address,uchar date) //¶ÁadµØÖ·¿ØÖÆÊý¾Ý
  82. {
  83. uchar k;
  84. start();
  85. writebyte(address);
  86. respons();
  87. writebyte(date);
  88. respons();
  89. start();
  90. writebyte(address+1);
  91. respons();
  92. k=readbyte();
  93. respons();
  94. stop();
  95. return k;
  96. }
  97. void write(uchar address,uchar date,uchar dig)//дdaµØÖ·¿ØÖÆÊý¾Ý
  98. {
  99. start();
  100. writebyte(address);
  101. respons();
  102. writebyte(date);
  103. respons();
  104. writebyte(dig);
  105. respons();
  106. stop();
  107. }
  108. void main()
  109. {
  110. init();
  111.   write(0x90,0x40,0x80);
  112. }
復制代碼



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

使用道具 舉報

沙發
ID:351832 發表于 2018-9-3 19:04 | 只看該作者
求助大佬   可以幫看看我這個程序哪里有問題嗎   iic接口的8591

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:351832 發表于 2018-9-3 20:22 | 只看該作者
我查找iic協議對照  按照順序表    模擬的iic協議   
想要8591模擬輸出電壓   網上有要上拉電阻我加了  芯片還是沒用反應
找了幾遍沒用找到問題所在  
希望有熟悉的人幫忙解答下 謝謝

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:351832 發表于 2018-9-3 20:27 | 只看該作者
單片機用的是stc 89c52
回復

使用道具 舉報

5#
ID:111634 發表于 2018-9-3 21:47 | 只看該作者
本帖最后由 zl2168 于 2018-9-4 07:18 編輯

給你介紹一個正確有效看得懂的案例,自己對照查錯吧!
實例85  PCF8591 I2C串行A-D(1602顯示)

Proteus仿真一下,確認有效。
實例85 PCF8591 I2C串行A-D.rar (57.96 KB, 下載次數: 30)

以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1書中電路和程序設計有詳細說明,程序語句條條有注解。
回復

使用道具 舉報

6#
ID:384109 發表于 2018-9-3 23:00 | 只看該作者
在網上找個例程吧,調通了,再回頭來看自己的程序錯在哪,IIC要確定地址是否正確,另外粗看了一下,你的程序沒有判斷PCF8591的應答,IIC里主機要判斷設備的應答的

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:351832 發表于 2018-9-3 23:01 | 只看該作者
zl2168 發表于 2018-9-3 21:47
給你介紹一個正確有效看得懂的案例,自己對照查錯吧!

好的 謝謝   可以給個鏈接嗎
回復

使用道具 舉報

8#
ID:382067 發表于 2018-9-4 00:03 來自手機 | 只看該作者
/*------------------------------------------------                     啟動IIC總線 ------------------------------------------------*/   void Start(void)   {    Sda=1;    _nop_();    Scl=1;    _nop_();    Sda=0;    _nop_();    Scl=0;   }   /*------------------------------------------------                     停止IIC總線 ------------------------------------------------*/   void Stop(void)   {    Sda=0;    _nop_();    Scl=1;    _nop_();    Sda=1;    _nop_();    Scl=0;    }   /*------------------------------------------------                    應答IIC總線 ------------------------------------------------*/    void Ack(void)    {     Sda=0;         _nop_();         Scl=1;         _nop_();         Scl=0;         _nop_();         }  /*------------------------------------------------               發送一個字節 ------------------------------------------------*/          void Send(unsigned char Data)          {            unsigned char BitCounter=8;           unsigned char temp;            do             {                  temp=Data;                  Scl=0;                  _nop_();                  if((temp&0x80)==0x80)                     Sda=1;                  else                     Sda=0;                          Scl=1;                         temp=Data<<1;                         Data=temp;                         BitCounter--;                   }           while(BitCounter);               Scl=0;           }  /*------------------------------------------------                     寫入DA數模轉換值 ------------------------------------------------*/           void DAC(unsigned char Data)           {                    Start();                    Send(AddWr); //寫入芯片地址                    Ack();                    Send(0x40);  //寫入控制位,使能DAC輸出                    Ack();                    Send(Data);  //寫數據                    Ack();                    Stop();                              }           void fmg(void)//fm關          {                 Fm=1;        //                關 fm          }                  void cmg(void)//數碼管鎖存函數                   關時鐘DS1302         {         dula=1;         P0=0x00;         dula=0;         wela=1;         P0=0x00;         wela=0;         RST=0;                //                關時鐘DS1302         } /*------------------------------------------------                    主程序 ------------------------------------------------*/         void main()         {          unsigned char num;                   //DA數模輸出變量    Init_Timer1();          cmg();//數碼管鎖存          fmg();          while(1)            {         DAC(num);       //DA輸出,可以用LED模擬電壓變化                    num++;          //累加,到256后溢出變為0,往復循環。顯示在LED上亮度逐漸變化                    mDelay(20);     //延時用于清晰看出變化            }         }
回復

使用道具 舉報

9#
ID:111634 發表于 2018-9-4 07:19 | 只看該作者
rdsfds 發表于 2018-9-3 23:01
好的 謝謝   可以給個鏈接嗎

《80C51單片機仿真設計實例教程——基于Keil C和Proteus》清華大學出版社ISBN 978-7-302-41682-1
實例85  PCF8591 I2C串行A-D(1602顯示)
仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。
回復

使用道具 舉報

10#
ID:351832 發表于 2018-9-4 12:33 | 只看該作者
人中狼 發表于 2018-9-3 23:00
在網上找個例程吧,調通了,再回頭來看自己的程序錯在哪,IIC要確定地址是否正確,另外粗看了一下,你的程 ...

respons()  這個應該是應答時序吧
回復

使用道具 舉報

11#
ID:351832 發表于 2018-9-4 12:35 | 只看該作者
zl2168 發表于 2018-9-3 21:47
給你介紹一個正確有效看得懂的案例,自己對照查錯吧!
實例85  PCF8591 I2C串行A-D(1602顯示)

非常感謝
回復

使用道具 舉報

12#
ID:351832 發表于 2018-9-4 13:11 | 只看該作者
yang陽 發表于 2018-9-4 00:03
/*------------------------------------------------                     啟動IIC總線 ----------------- ...

iic 信號保持時間不是要4微秒以上嗎    我的12M晶振一個空指令不是才1微妙嗎   這樣也可嗎?
回復

使用道具 舉報

13#
ID:351832 發表于 2018-9-4 17:54 | 只看該作者
大佬們  iic協議的應答和非應答是什么意思  沒太理解
應答是主機發給從機數據結束后,從機發給主機的信號嗎?還是不管是誰發送數據都是接收方給發送方   發送的信號

非應答是主機接收到數據后,給從機發送非應達信號嗎?還是說數據未接收成功,接收方給發送方發送的信號?   

網上太多結果了不知道那個是正確,求解答
回復

使用道具 舉報

14#
ID:135253 發表于 2018-9-15 08:07 | 只看該作者
rdsfds 發表于 2018-9-4 17:54
大佬們  iic協議的應答和非應答是什么意思  沒太理解
應答是主機發給從機數據結束后,從機發給主機的信號 ...

請參閱http://www.zg4o1577.cn/bbs/dpj-132121-1.html
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99视频免费在线 | 日韩精品一区二区三区在线播放 | 亚洲一区综合 | 亚洲第一在线视频 | 中文字幕一区二区三区乱码在线 | 91精品国产综合久久福利软件 | 毛片视频观看 | 日日干夜夜干 | 天天激情综合 | 久草在线 | 一区二区国产精品 | 黄色片网此 | 亚洲不卡在线观看 | 色又黄又爽网站www久久 | 精品中文字幕一区二区三区 | 国产一区二区三区四区 | 欧美午夜精品 | 天天欧美 | 亚洲高清视频一区 | 一区二区精品视频 | 九九九视频 | 精品一区二区三区中文字幕 | 国产乱一区二区三区视频 | 久久亚洲美女 | 在线观看免费高清av | 日韩网站在线观看 | 国产免费av在线 | www.国产精品 | 欧美自拍第一页 | 国产精品久久久久久久久久三级 | 国产成人精品久久 | 午夜久久久久 | 国产精品1区2区 | 国产资源视频 | 国产精品视频久久久 | 精品一二三区在线观看 | 蜜月aⅴ国产精品 | 伊人99| 国产清纯白嫩初高生在线播放视频 | 色偷偷噜噜噜亚洲男人 | 国产亚洲精品精品国产亚洲综合 |