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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

I2C時序相關代碼不理解

[復制鏈接]
跳轉到指定樓層
樓主
I2C對應的時序寫代碼:
延時函數:I2CDelay() {_nop_();_nop_();_nop_();_nop_();}

1.stop函數
void I2CStop()
{
    I2C_SCL = 0;
    I2C_SDA = 0;
    I2CDelay();
    I2C_SCL = 1;
    I2CDelay();
    I2C_SDA = 1;
    I2CDelay();
}


SCL和SDA都是高電平了,不理解最后一行還使用I2CDelay()的原因 ?

2.wrtie函數
  1. bit I2CWrite(unsigned char dat)
  2. {
  3.     bit ack = 0;

  4.     unsigned char mask ;

  5.     for (mask = 0x80; mask != 0; mask >>= 1)
  6.     {
  7.     1.根據時序圖,覺得SDA這里應該加I2CDelay() ?
  8.         if ((mask & dat) == 0)
  9.         {
  10.             I2C_SDA = 0;
  11.         }
  12.         else
  13.         {
  14.             I2C_SDA = 1;
  15.         }
  16.         I2CDelay();
  17.         I2C_SCL = 1;
  18.         I2CDelay();
  19.         I2C_SCL = 0;
  20.     }
  21. 2.時序圖這里也沒有說I2C_SDA是高電平?不知道是干嘛的?
  22.     I2C_SDA = 1;
  23.     I2CDelay();
  24.     I2C_SCL = 1;
  25.     ack = I2C_SDA;
  26.     I2CDelay();
  27.     I2C_SCL = 0;

  28.     return ack;
  29. }
復制代碼
個人對I2C時序的總結:
寫過程::SCL電平主導了SDA的變化,SCL為高電平的時候,單片機讀取SDA信號,SCL為低電平的時候,SDA變化。
開始過程::SDA影響SCL變化。





Snipaste_2023-06-11_21-46-26.jpg (18.7 KB, 下載次數: 75)

Snipaste_2023-06-11_21-46-26.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:332444 發表于 2023-6-12 08:00 | 只看該作者
I2C總線的位傳輸 起始條件:SCL為高電平時,SDA由高電平向低電平切換;表示開始傳送數據。 停止條件:SCL為高電平時,SDA由低電平向高電平跳變;表示結束傳送數據。 空閑條件:I2C總線的SDA和SCL兩條信號線同時處于高電平時;表示空閑狀態。
回復

使用道具 舉報

板凳
ID:230500 發表于 2023-6-12 09:58 | 只看該作者
SCL和SDA都是高電平了,不理解最后一行還使用I2CDelay()的原因 ?

IIC通信速度一般都不快好像最快400K吧,單片機的速度一般遠遠大于IIC從設備;比如在調用程序里,發送Stop函數后 馬上又發Start函數,就會有類似 SCL=0;馬上又SCL=1;從設備會反應不過來; 加delay能夠讓通信更加穩定, 如果主機時鐘頻率和通信速率不高, 不加也是可以的;  個人習慣, 我一般會加幾個Nop的延時時間!  程序本身就是邊寫邊調試;剛開始能跑起來?赡艿搅撕竺婺憔蜁l現,噢,這個地方加個微妙級延時更穩定; 慢慢的這就成為經驗吧!
回復

使用道具 舉報

地板
ID:1034262 發表于 2023-6-12 10:51 | 只看該作者
因為STOP之后要一定時間才能發起START,避免你發了STOP后馬上發起START,所以加了延時,這個延時根據你的器件的時序而定,有的器件要幾個us。而現代的單片機大部分速度都很快,如果發出STO跑步加延時馬上發START,間隔可能在1us以內。
回復

使用道具 舉報

5#
ID:1078938 發表于 2023-6-12 13:21 | 只看該作者
寫時序該如何理解了??
回復

使用道具 舉報

6#
ID:332444 發表于 2023-6-12 16:00 | 只看該作者
哈蘭德 發表于 2023-6-12 13:21
寫時序該如何理解了??

只要注意啟動和停止那2段間隔符合即可,如1602開始的地址建立時間符合要求即可。
回復

使用道具 舉報

7#
ID:1064915 發表于 2023-6-12 17:29 | 只看該作者
哈蘭德 發表于 2023-6-12 13:21
寫時序該如何理解了??

I2C_SDA = 1;是釋放總線
回復

使用道具 舉報

8#
ID:1045628 發表于 2023-6-12 17:46 | 只看該作者
第9行,也就是你提出的問題,沒有必要,函數進來默認scl是低電平,這時候可以立馬拉低對sda進行操作
第18行延時,這是為了給從機時間,并且延時使時鐘達到從機要求
第20行延時,給從機讀數據的時間
第24行,將sda恢復到高電平并在25行做延時是為了給從機操作sda,作為ask,防止發送字節最后一位為低電平產生誤判
I2C一般也就400k最大,你這4個空操作的時間夠嗎,這芯片頻率也太低了吧
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲综合一区二区三区 | www.99热.com| www久久av | 国产精品欧美一区二区三区 | 精品96久久久久久中文字幕无 | 国产精品久久久久久久久久尿 | 色视频www在线播放国产人成 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 视频一区二区三区中文字幕 | 91精品国产综合久久久久久丝袜 | 亚洲精品一区二区三区 | www.日本在线播放 | 99精品久久久久久久 | 国产精品久久久久久久久久久久久久 | 国产粉嫩尤物极品99综合精品 | 丝袜 亚洲 另类 欧美 综合 | 久久成人免费视频 | 天天影视色综合 | 久久精品视频免费看 | 国产精品99久久久久久www | 欧美日韩成人影院 | www午夜视频| 一区二区中文 | 福利视频网 | 91久久精品国产免费一区 | www.v888av.com | 久久婷婷国产麻豆91 | 成人网在线看 | 久久久九九 | 日韩欧美综合在线视频 | 看黄在线 | 午夜精品视频 | 欧美va大片 | 日日干夜夜操 | 亚洲一区二区三区视频 | 久在线观看 | 激情五月婷婷丁香 | 香蕉大人久久国产成人av | 日本精品视频一区二区三区四区 | 国户精品久久久久久久久久久不卡 | 日韩视频一区二区在线 |