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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

感覺一個人學單片機好難,學到i2c總線卡住了

  [復制鏈接]
跳轉到指定樓層
樓主
ID:425921 發表于 2018-11-30 00:36 來自觸屏版 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
感覺一個人學好難,學到i2c總線卡住了,程序沒問題,下到開發版上確不行,找了半天找不出問題,要是有個師傅帶就好了!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:435470 發表于 2018-11-30 08:24 | 只看該作者
還有一句話,師傅領進門,修行在個人。

樓主已經進門,事在人為了,我也沒師傅帶,都是自己摸索的。。。
回復

使用道具 舉報

板凳
ID:401564 發表于 2018-11-30 08:36 | 只看該作者
IIC的關鍵在于應答,你可以在每個時鐘后面加上一個取反的IO,然后接上LED,讀寫的時候可以從LED閃動中看到讀寫的情況,或者是先完全的抄別人的程序先來驗證一下你硬件電路有沒有問題,確定硬件電路沒有問題了再去測試自己的程序
回復

使用道具 舉報

地板
ID:280876 發表于 2018-11-30 08:49 | 只看該作者
單步調試看看,大家都是這樣過來的。
回復

使用道具 舉報

5#
ID:279667 發表于 2018-11-30 08:54 | 只看該作者
可以找一些技術群或者在論壇里留言問問看,興許會找到解決的辦法
回復

使用道具 舉報

6#
ID:164602 發表于 2018-11-30 08:57 | 只看該作者
找個例子看看嘛,有時候自己卡住了不知道,看看別人的成功例子,就可以打開思路了。
共享一個:
IIC.c文件內容:
#include"i2c.h"
/*******************************************************************************
* 函數名         : Delay1us()
* 函數功能                   : 延時
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/

void Delay10us()
{
        unsigned char a,b;
        for(b=1;b>0;b--)
                for(a=2;a>0;a--);

}
/*******************************************************************************
* 函數名         : I2cStart()
* 函數功能                   : 起始信號:在SCL時鐘信號在高電平期間SDA信號產生一個下降沿
* 輸入           : 無
* 輸出                  : 無
* 備注           : 起始之后SDA和SCL都為0
*******************************************************************************/

void I2cStart()
{
        SDA=1;
        Delay10us();
        SCL=1;
        Delay10us();//建立時間是SDA保持時間>4.7us
        SDA=0;
        Delay10us();//保持時間是>4us
        SCL=0;                       
        Delay10us();               
}
/*******************************************************************************
* 函數名         : I2cStop()
* 函數功能                   : 終止信號:在SCL時鐘信號高電平期間SDA信號產生一個上升沿
* 輸入           : 無
* 輸出                  : 無
* 備注           : 結束之后保持SDA和SCL都為1;表示總線空閑
*******************************************************************************/

void I2cStop()
{
        SDA=0;
        Delay10us();
        SCL=1;
        Delay10us();//建立時間大于4.7us
        SDA=1;
        Delay10us();               
}
/*******************************************************************************
* 函數名         : I2cSendByte(unsigned char num)
* 函數功能                   : 通過I2C發送一個字節。在SCL時鐘信號高電平期間,保持發送信號SDA保持穩定
* 輸入           : num
* 輸出                  : 0或1。發送成功返回1,發送失敗返回0
* 備注           : 發送完一個字節SCL=0,SDA=1
*******************************************************************************/

unsigned char I2cSendByte(unsigned char dat)
{
        unsigned char a=0,b=0;//最大255,一個機器周期為1us,最大延時255us。               
        for(a=0;a<8;a++)//要發送8位,從最高位開始
        {
                SDA=dat>>7;         //起始信號之后SCL=0,所以可以直接改變SDA信號
                dat=dat<<1;
                Delay10us();
                SCL=1;
                Delay10us();//建立時間>4.7us
                SCL=0;
                Delay10us();//時間大于4us               
        }
        SDA=1;
        Delay10us();
        SCL=1;
        while(SDA)//等待應答,也就是等待從設備把SDA拉低
        {
                b++;
                if(b>200)         //如果超過2000us沒有應答發送失敗,或者為非應答,表示接收結束
                {
                        SCL=0;
                        Delay10us();
                        return 0;
                }
        }
        SCL=0;
        Delay10us();
        return 1;               
}
/*******************************************************************************
* 函數名         : I2cReadByte()
* 函數功能                   : 使用I2c讀取一個字節
* 輸入           : 無
* 輸出                  : dat
* 備注           : 接收完一個字節SCL=0,SDA=1.
*******************************************************************************/

unsigned char I2cReadByte()
{
        unsigned char a=0,dat=0;
        SDA=1;                        //起始和發送一個字節之后SCL都是0
        Delay10us();
        for(a=0;a<8;a++)//接收8個字節
        {
                SCL=1;
                Delay10us();
                dat<<=1;
                dat|=SDA;
                Delay10us();
                SCL=0;
                Delay10us();
        }
        return dat;               
}
/*******************************************************************************
* 函數名         : I2cReadRespon()
* 函數功能                   : 接收完一個字節之后產生應答,以便接著接收下一個字節
* 輸入           : 無
* 輸出                  : 無
* 備注           : 接收完一個字節SCL=0
*******************************************************************************/
//void I2cReadRespon()
//{
//        SDA=0;
//        Delay10us();
//        SDA=1;
//        Delay10us();
//}


IIC.h文件內容:
#ifndef __I2C_H_
#define __I2C_H_

#include<reg51.h>
sbit SCL=P2^1;
sbit SDA=P2^0;

void I2cStart();
void I2cStop();
unsigned char I2cSendByte(unsigned char dat);
unsigned char I2cReadByte();
void I2cReadRespon();
#endif
回復

使用道具 舉報

7#
ID:436261 發表于 2018-11-30 09:20 | 只看該作者
多參照論壇里別人的設計,慢慢來
回復

使用道具 舉報

8#
ID:436305 發表于 2018-11-30 09:35 | 只看該作者
多看看時序圖啊
回復

使用道具 舉報

9#
ID:436314 發表于 2018-11-30 10:12 | 只看該作者
有問題要多嘗試自己動手解決,慢慢的就會找到方法了,不要急,心急吃不了熱豆腐
回復

使用道具 舉報

10#
ID:308437 發表于 2018-11-30 11:53 | 只看該作者
設計到相關協議的時候,一開始不要自己寫,因為一般人基本上是寫不來的。通常是,找一個大神寫的程序,參考他的,理解他的,然后自己再寫
回復

使用道具 舉報

11#
ID:425921 發表于 2018-11-30 16:58 來自觸屏版 | 只看該作者
謝謝大家,堅持堅持!
回復

使用道具 舉報

12#
ID:413080 發表于 2018-12-1 22:07 | 只看該作者
難免會出現這樣的問題,我也是經常會這樣,可以先仿真看一下,有時候不一定沒有錯誤就能實現功能
回復

使用道具 舉報

13#
ID:437454 發表于 2018-12-2 00:06 | 只看該作者
我有相關資料
回復

使用道具 舉報

14#
ID:418482 發表于 2018-12-10 19:14 | 只看該作者
HC6800-ES-V2.0 發表于 2018-11-30 08:57
找個例子看看嘛,有時候自己卡住了不知道,看看別人的成功例子,就可以打開思路了。
共享一個:
IIC.c文 ...

在哪里可以找到好的例子啊  感覺不是教材寫的一般還看不懂呢  你一般是在哪里看例子啊 給我說說吧  不要說是百度啊
回復

使用道具 舉報

15#
ID:434820 發表于 2018-12-10 22:23 | 只看該作者
如果有相關不懂的問題可以發到貼吧來問問大家討論一下
回復

使用道具 舉報

16#
ID:275111 發表于 2020-4-1 10:43 | 只看該作者
沒辦法的事情。只能默默忍耐。小公司很難有所謂的師傅的,而且一般上點年級的思維方式都是“教會徒弟餓死師傅”那種。不挖坑就算不錯了。
回復

使用道具 舉報

17#
ID:601478 發表于 2020-4-1 16:36 | 只看該作者
看時序圖,會有點幫助的,我也是自己慢慢學的,有問題上論壇,總會有人幫你
回復

使用道具 舉報

18#
ID:411833 發表于 2020-4-2 11:00 | 只看該作者
我也是,自己學好辛苦,工作后專注力也下降了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区av在线播放 | 欧美精品一区二区三区在线 | 成人免费观看男女羞羞视频 | 久久三区 | 国产高清自拍视频在线观看 | 亚洲超碰在线观看 | 久久91精品| 亚洲欧美在线视频 | 狠狠干天天干 | 免费麻豆视频 | 亚洲一区久久 | 亚洲第一黄色网 | 日本高清视频在线播放 | 国内av在线| 爱爱视频在线观看 | 日韩欧美精品 | 99re在线视频免费观看 | 久久久日韩精品一区二区三区 | 91精品国产综合久久久久久 | 亚洲国产一区二区三区 | 超碰人人91 | 久久久不卡网国产精品一区 | 国产精品一区二区久久 | 婷婷亚洲综合 | 久久久91精品国产一区二区三区 | 成人一区在线观看 | 国产视频精品免费 | 日韩精品人成在线播放 | 美国一级片在线观看 | 国产真实精品久久二三区 | 欧美激情精品久久久久久变态 | 色综合国产| 麻豆视频在线免费观看 | 精品国产一区二区三区性色av | 成人免费在线视频 | 中文字幕免费在线 | 国产午夜精品一区二区三区嫩草 | 国产精品久久久久久久久久 | 日韩欧美在线观看视频 | 欧美婷婷 | h在线 |