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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

高手求幫忙 關于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  我學的是郭天祥的書   快一個月了  我每天都花大量時間不比作者花的時間少  但是快一個月了還是只會編一些基礎程序 ,高深的有點不行,我是一名專科生  ,難道這隱約能看出一個人的聰明程度嗎  當我堅持不住編了一天的程序時得到的只是這一部分知識點的原因弄明白了,當我堅持不下去的時候我都會想起在工廠里的父親,然后給我力量。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

評分

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

查看全部評分

回復

使用道具 舉報

板凳
ID:170144 發表于 2017-4-10 21:03 | 只看該作者
你像風兒來了 發表于 2017-4-10 20:45
堅持下去你一定能有所突破,老實說大部分人智力都差不多,專科生只是基礎差,因為你基礎不夠,要想寫出優秀 ...

受教了,謝謝
回復

使用道具 舉報

地板
ID:151348 發表于 2017-4-10 21:19 | 只看該作者
這是讀寫AT24吧

評分

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

查看全部評分

回復

使用道具 舉報

5#
ID:187614 發表于 2017-4-10 21:48 | 只看該作者
I2C使用的關鍵是時序,按技術資料的時序寫沒問題,范例中都有,重在調試。

評分

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

查看全部評分

回復

使用道具 舉報

6#
ID:146949 發表于 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
(出處: 單片機論壇)

評分

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

查看全部評分

回復

使用道具 舉報

7#
ID:187901 發表于 2017-4-11 09:41 | 只看該作者
買個便宜的邏輯分析儀,照著時序很容易調試的。  

評分

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

查看全部評分

回復

使用道具 舉報

8#
ID:111634 發表于 2017-4-11 11: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案例,用于仿真實驗操作。
回復

使用道具 舉報

9#
ID:123289 發表于 2017-4-11 12:23 | 只看該作者
沙發說的很對,如果智力不夠(成績不好不等于智力不夠,邏輯思維要好)不要涉及這一行。
做單片機,關鍵不在寫程序是,而是構思如何達成目的,寫程序按規則抄抄寫寫即可,而構思怎樣的程序結構才能達成目的,才是關鍵。
就比如“I2c總線的編程”,寫一下,短短一個小程序就OK了。但在寫之前如何構思呢?
如打仗一樣,知彼知已才行,首先必須弄清目標的原理。
1、IC2原理是什么?
當你弄清原理后,就面臨以下問題:
2、要用到幾根線通訊?
3、你打算用CPU上的哪幾根引腳線?所用的這此線是否方便程序操作?
4、CLK脈沖如何做,頻率如確定,何時給1何時給0,如何操作可以實現?
5、數據如何位讀入,如何拼裝成字節,存于何存儲?又如何將字節分拆成位,如何逐位輸出?
……還有還有,依程序的目的而定。
如果以上都清楚了,寫程序也就不難了。如果有不清楚的地方,說明你還缺某方面的知識,需要補課。

如果樓主立志于單片機,我給你一張A4紙,讀懂、弄清這張A4紙上的內容,51單片機就過關了。A4紙上濃縮了基本51的精華部分,讀不懂的部分就說明要補課。

評分

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

查看全部評分

回復

使用道具 舉報

10#
ID:170144 發表于 2017-4-11 12:42 | 只看該作者

對  是的   
回復

使用道具 舉報

11#
ID:170144 發表于 2017-4-11 12:43 | 只看該作者
wosiyabo 發表于 2017-4-11 03:22
a=read_byte();
        a=P1;
        stop();

多謝幫忙   
回復

使用道具 舉報

12#
ID:170144 發表于 2017-4-11 12:44 | 只看該作者
51Lovers 發表于 2017-4-10 21:48
I2C使用的關鍵是時序,按技術資料的時序寫沒問題,范例中都有,重在調試。

對  但是我感覺按時序寫出來總是有問題
回復

使用道具 舉報

13#
ID:111634 發表于 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和匯編)語句條條有注解,便于閱讀理解,便于自學。
關鍵還是你沒學好沒理解,沒學好沒理解的原因可能有多種,其中之一是沒有好教材,沒有便于閱讀理解的教材,有些教材沒講透講細,高職生就更不易理解了。我推薦的書絕不忽悠你,有比較才能有鑒別!


回復

使用道具 舉報

14#
ID:169626 發表于 2017-4-11 22:28 | 只看該作者
yzwzfyz 發表于 2017-4-11 12:23
沙發說的很對,如果智力不夠(成績不好不等于智力不夠,邏輯思維要好)不要涉及這一行。
做單片機,關鍵不 ...

這張A4紙可否也給我一張.....
回復

使用道具 舉報

15#
ID:170144 發表于 2017-4-13 12:28 | 只看該作者
yzwzfyz 發表于 2017-4-11 12:23
沙發說的很對,如果智力不夠(成績不好不等于智力不夠,邏輯思維要好)不要涉及這一行。
做單片機,關鍵不 ...

我的確想弄 那你能不能給我參考一下 不勝感激
回復

使用道具 舉報

16#
ID:170144 發表于 2017-4-13 12:33 | 只看該作者
zl2168 發表于 2017-4-11 22:06
⒈ I2C總線基本信號
I2C總線依靠兩根線(數據線SDA和時鐘線SCL)傳送信息,對于虛擬I2C總線,有4個基本 ...

樓業的內容實在精辟  讓我受益匪淺  謝謝
回復

使用道具 舉報

17#
ID:111634 發表于 2017-4-13 18:25 | 只看該作者
憤怒的小鳥嗷 發表于 2017-4-13 12:33
樓業的內容實在精辟  讓我受益匪淺  謝謝

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精选一区二区 | 99久久久无码国产精品 | 精品日韩电影 | 免费观看黄网站 | 自拍偷拍第一页 | 啪啪免费 | 午夜精品视频 | 成av人电影在线 | 日韩毛片| 国产在线精品一区二区三区 | 黄网站免费在线看 | av男人天堂影院 | 久草青青草| 欧美日韩在线观看视频 | 三级成人在线 | 久久亚洲一区二区三区四区 | 久久综合一区 | 欧美xxxx色视频在线观看免费 | 黄色精品 | 国产视频一区二区 | 国产一区二区三区四区 | 搞黄网站在线观看 | www.一区二区 | 亚洲一区二区三区在线 | 99国内精品久久久久久久 | 超碰在线免费公开 | 国产一区二区三区在线 | 91视频免费视频 | 国产视频一区在线 | 日韩在线视频免费观看 | 99久久精品国产麻豆演员表 | 欧美精三区欧美精三区 | 美女天天操 | 99久久精品免费 | 国产成人一区二区三区 | 日日摸日日碰夜夜爽2015电影 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 超碰成人免费观看 | 天堂av在线影院 | 香蕉二区| 国产精品日韩一区 |