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

標題: 高手求幫忙 關于I2c總線的編程無法實現 [打印本頁]

作者: 憤怒的小鳥嗷    時間: 2017-4-10 20:17
標題: 高手求幫忙 關于I2c總線的編程無法實現
這是程序代碼   求幫忙 指出錯誤!
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay()
{ ; ; }
bit write=0;
sbit sda=P2^0;
sbit scl=P2^1;
void init()
{
        scl=1;
        sda=1;
}
void start()
{
        sda=1;
        delay();
        scl=1;
        delay();
        sda=0;
        delay();
}
void stop()
{
        sda=0;
        delay();
        scl=1;
        delay();
        sda=1;
        delay();
}
void respons()
{
        uchar i=0;
        scl=1;
        delay();
        while((sda==1)&&(i<255))
                i++;
        scl=0;
        delay();
}
void delay1(uint xsm)
        {
                uint i,j;
                for(i=xsm;i>0;i--)
                        for(j=110;j>0;j--);
        }
void write_byte(uchar date)
{       
          uchar i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
                temp=temp<<1;
                sda=CY;
                scl=1;
                delay();
                scl=0;
                delay();
               
        }
                scl=0;
                delay();
                sda=1;
                delay();
       
}

uchar read_byte()
{
        uchar i,k;
        for(i=0;i<8;i++)
        {
                k=(k<<1)|sda;
                delay();
                scl=1;
                delay();
                scl=0;
                delay();
               
        }
                delay();
                return k;
               
}
void main()
{        uchar a;
        init();
        start();
        write_byte(0xa0);
        respons();
        write_byte(0xaa);
        respons();
        write_byte(0xaa);
        respons();
        stop();

        delay1(100);
        start();
        write_byte(0xa0);
        respons();
        write_byte(0xaa);
        respons();
        start();
        write_byte(0xa1);
        respons();
        write_byte(0xaa);
        a=read_byte();
        a=P1;
        stop();
        while(1);       
}






另外我想提出一些問題 希望有貴人能幫助我
1  我學的是郭天祥的書   快一個月了  我每天都花大量時間不比作者花的時間少  但是快一個月了還是只會編一些基礎程序 ,高深的有點不行,我是一名?粕  ,難道這隱約能看出一個人的聰明程度嗎  當我堅持不住編了一天的程序時得到的只是這一部分知識點的原因弄明白了,當我堅持不下去的時候我都會想起在工廠里的父親,然后給我力量。

作者: 你像風兒來了    時間: 2017-4-10 20:45
堅持下去你一定能有所突破,老實說大部分人智力都差不多,?粕皇腔A差,因為你基礎不夠,要想寫出優秀的程序,數學一定要好,要有很強的邏輯能力,但是我們就是數學不好怎么辦,沒事,有句話叫勤能補拙,多看些算法,多研究別人優秀的程序,多思考,單片機雖然是硬件,但比的還是編程能力,看100個程序不如自己寫1個,加油,你一定可以很優秀
作者: 憤怒的小鳥嗷    時間: 2017-4-10 21:03
你像風兒來了 發表于 2017-4-10 20:45
堅持下去你一定能有所突破,老實說大部分人智力都差不多,專科生只是基礎差,因為你基礎不夠,要想寫出優秀 ...

受教了,謝謝
作者: imxuheng    時間: 2017-4-10 21:19
這是讀寫AT24吧
作者: 51Lovers    時間: 2017-4-10 21:48
I2C使用的關鍵是時序,按技術資料的時序寫沒問題,范例中都有,重在調試。
作者: wosiyabo    時間: 2017-4-11 03:22
       a=read_byte();
        a=P1;
        stop();
        while(1);        
}
后面那句反了吧,改為P1=a;
宏芯I2C調試工具
http://www.zg4o1577.cn/bbs/dpj-79714-1.html
(出處: 單片機論壇)
作者: 21780460    時間: 2017-4-11 09:41
買個便宜的邏輯分析儀,照著時序很容易調試的。  
作者: zl2168    時間: 2017-4-11 11:03
憤怒的小鳥嗷 發表于 2017-4-10 21:03
受教了,謝謝

為什么一定要郭天祥的書?本網不乏質疑的帖子,盛名之下其實難符。我給你推薦2本書,書中案例個個能proteus仿真演示,直觀能看,電路與程序真實可靠可信可行,語句條條有注解,便于閱讀理解,便于自學。
《80C51單片機實用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學習51單片機原理,雙解c和匯編程序!80C51單片機仿真設計實例教程——基于Keil C和Proteus》清華大學出版社ISBN 978-7-302-41682-1,內有常用的單片機應用100案例,用于仿真實驗操作。
作者: yzwzfyz    時間: 2017-4-11 12:23
沙發說的很對,如果智力不夠(成績不好不等于智力不夠,邏輯思維要好)不要涉及這一行。
做單片機,關鍵不在寫程序是,而是構思如何達成目的,寫程序按規則抄抄寫寫即可,而構思怎樣的程序結構才能達成目的,才是關鍵。
就比如“I2c總線的編程”,寫一下,短短一個小程序就OK了。但在寫之前如何構思呢?
如打仗一樣,知彼知已才行,首先必須弄清目標的原理。
1、IC2原理是什么?
當你弄清原理后,就面臨以下問題:
2、要用到幾根線通訊?
3、你打算用CPU上的哪幾根引腳線?所用的這此線是否方便程序操作?
4、CLK脈沖如何做,頻率如確定,何時給1何時給0,如何操作可以實現?
5、數據如何位讀入,如何拼裝成字節,存于何存儲?又如何將字節分拆成位,如何逐位輸出?
……還有還有,依程序的目的而定。
如果以上都清楚了,寫程序也就不難了。如果有不清楚的地方,說明你還缺某方面的知識,需要補課。

如果樓主立志于單片機,我給你一張A4紙,讀懂、弄清這張A4紙上的內容,51單片機就過關了。A4紙上濃縮了基本51的精華部分,讀不懂的部分就說明要補課。
作者: 憤怒的小鳥嗷    時間: 2017-4-11 12:42
imxuheng 發表于 2017-4-10 21:19
這是讀寫AT24吧

對  是的   
作者: 憤怒的小鳥嗷    時間: 2017-4-11 12:43
wosiyabo 發表于 2017-4-11 03:22
a=read_byte();
        a=P1;
        stop();

多謝幫忙   
作者: 憤怒的小鳥嗷    時間: 2017-4-11 12:44
51Lovers 發表于 2017-4-10 21:48
I2C使用的關鍵是時序,按技術資料的時序寫沒問題,范例中都有,重在調試。

對  但是我感覺按時序寫出來總是有問題
作者: zl2168    時間: 2017-4-11 22:06
憤怒的小鳥嗷 發表于 2017-4-11 12:44
對  但是我感覺按時序寫出來總是有問題

⒈ I2C總線基本信號
I2C總線依靠兩根線(數據線SDA和時鐘線SCL)傳送信息,對于虛擬I2C總線,有4個基本信號:起始信號S、終止信號P、應答信號A和 ,如圖7-26所示。說明如下:
⑴ 起始信號S:如圖7-26a所示,必須在時鐘線SCL高電平時,數據線SDA出現從高電平到低電平的變化。即在時鐘線SCL高電平期間,數據線SDA出現下降沿,啟動I2C總線傳送數據。
⑵ 終止信號P:如圖7-26b所示,必須在時鐘線SCL高電平時,數據線SDA出現從低電平到高電平的變化。即在時鐘線SCL高電平期間,數據線SDA出現上升沿,停止I2C總線數據傳送。
⑶ 應答信號分為兩種:A和 。在SCL脈沖高電平時,數據線SDA低電平為應答信號A,如圖7-26c所示;數據線SDA高電平為應答信號 ,如圖7-26d所示。兩種信號均在時鐘SCL低電平時刷新,在時鐘SCL高電平時傳送。

需要說明的是,發送數據“0”的時序要求與應答A完全相同,發送數據“1”時序要求與應答 完全相同。從圖7-26中看出,在時鐘線SCL高電平期間,數據線SDA的電平不能變化,否則,將被認為是一個起始信號S或終止信號P,引起出錯。因此,若需改變數據線SDA的電平,必須先拉低時鐘線SCL電平。

程序就是根據I2C時序圖編的,例如:


啟動信號通用子程序STAT
void  STAT ( ){                     //啟動信號子函數STAT
  SCL=0;SDA=1;                  //時鐘線電平期間,改變SDA電平(高電平)
  SCL=1;                               //時鐘線發出時鐘脈沖
  SDA=0;                              //在時鐘線高電平期間,SDA下跳變(啟動信號規定動作)
  SCL=0;}                            //SCL電平復位,與SCL=1組成時鐘脈沖


而你上傳的程序少了一句SCL=0,使得時序出錯。當然上述程序少了4us延時,用于proteus仿真沒問題,用于實例最好加4us延時。
⒉ I2C總線數據傳送時序
I2C總線數據傳送時序如圖7-27所示。說明如下:
⑴ 數據傳送以起始位開始,以終止位結束。
⑵ 每次傳送的字節數沒有限制,但要求每傳送一個字節,對方回應一個應答位。即每幀數據9位,前8位是數據位,最后一位為應答位ACK,傳送數據位的順序是從高位到低位。
⑶ 每次傳送的第一個字節應為尋址字節(包括尋址和數據傳送方向)。
一次完整的數據傳送過程應包括起始S、發送尋址字節(SLA  R/ )、應答、發送數據、應答、…、發送數據、應答、終止P。如圖7-27所示。



以上摘自張志良編著《80C51單片機實用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學習51單片機原理,程序(雙解c和匯編)語句條條有注解,便于閱讀理解,便于自學。
關鍵還是你沒學好沒理解,沒學好沒理解的原因可能有多種,其中之一是沒有好教材,沒有便于閱讀理解的教材,有些教材沒講透講細,高職生就更不易理解了。我推薦的書絕不忽悠你,有比較才能有鑒別!



作者: 3到15字符    時間: 2017-4-11 22:28
yzwzfyz 發表于 2017-4-11 12:23
沙發說的很對,如果智力不夠(成績不好不等于智力不夠,邏輯思維要好)不要涉及這一行。
做單片機,關鍵不 ...

這張A4紙可否也給我一張.....
作者: 憤怒的小鳥嗷    時間: 2017-4-13 12:28
yzwzfyz 發表于 2017-4-11 12:23
沙發說的很對,如果智力不夠(成績不好不等于智力不夠,邏輯思維要好)不要涉及這一行。
做單片機,關鍵不 ...

我的確想弄 那你能不能給我參考一下 不勝感激
作者: 憤怒的小鳥嗷    時間: 2017-4-13 12:33
zl2168 發表于 2017-4-11 22:06
⒈ I2C總線基本信號
I2C總線依靠兩根線(數據線SDA和時鐘線SCL)傳送信息,對于虛擬I2C總線,有4個基本 ...

樓業的內容實在精辟  讓我受益匪淺  謝謝
作者: zl2168    時間: 2017-4-13 18:25
憤怒的小鳥嗷 發表于 2017-4-13 12:33
樓業的內容實在精辟  讓我受益匪淺  謝謝

僅僅是上傳了一部分,你還得進一步學,才能掌握。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人午夜黄色 | 亚洲精品视频免费观看 | 91国内精精品久久久久久婷婷 | 国产高清一区二区三区 | 日本不卡一区二区三区在线观看 | 欧美日产国产成人免费图片 | 在线观看免费av网 | 伊人伊人 | 激情一区二区三区 | 成年人在线电影 | 99国产精品久久久久 | 久久综合伊人一区二区三 | 欧美精品第一页 | 久久久久久久国产 | 国产日韩欧美一区 | 欧美一区二区三区在线播放 | 天天干夜夜操 | 99久久婷婷国产综合精品电影 | 91天堂网 | a级黄色片视频 | 精品久久免费 | 国产高清免费 | 97视频在线观看免费 | 中文字幕成人av | 欧美日韩在线一区 | 欧美激情国产日韩精品一区18 | 99在线资源| 91热爆在线观看 | 日韩在线视频免费观看 | 欧美日韩高清 | 亚洲免费成人 | 第一区在线观看免费国语入口 | av国产精品毛片一区二区小说 | 国产高清性xxxxxxxx | 免费在线观看成人 | 亚洲欧美视频一区 | 草草视频在线观看 | 99资源站 | 国产精品久久久久久久久免费相片 | 欧美精品啪啪 | 91丨国产 |