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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3572|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

IIC通訊的程序,調(diào)試通過(guò),但有一點(diǎn)不解~求大神指導(dǎo)!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:153819 發(fā)表于 2017-1-9 14:51 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define srl_W 0xae
#define srl_R 0xaf
sbit SCL=P2^0;
sbit SDL=P2^1;
sbit warn=P2^5;

void delay(uint x)
{        for(;x>0;x--)         _nop_;
}

//開始
void iic_start()
{        SDL=1;
        delay(2);
        SCL=1;
        delay(5);
        SDL=0;
        delay(5);
}

void iic_stop()
{        SDL=0;
        delay(2);
        SCL=1;
        delay(5);
        SDL=1;
        delay(5);
}

void receive_ack()
{   uchar ACK;
        uint j;
        j=0;
        SDL=1;          
        SCL=1;
        while((SDL==1) && j<150) j++;
        ACK=SDL;
        delay(3);
        SCL=0;
        if(ACK) warn=1;
}

void input_noack()
{   SCL=0;
        delay(2);
        SDL=1;
        SCL=1;
        delay(5);
}

void write_data(uchar str)
{        uint i,j;
        uchar temp;
        temp=str;
        SCL=0;
        delay(2);
        for(i=0;i<8;i++)
        {if((temp<<i) & 0x80) SDL=1;
//        {if((temp>>i) & 0x01) SDL=1;
                else SDL=0;
         delay(3);
         SCL=1;
         delay(5);
         SCL=0;
         delay(2);
        }
}

uchar read_data()
{        uchar str_data;
        uint i,j;
        SCL=0;
        delay(5);
        for(i=0;i<8;i++)
        {                   SCL=1;
                        delay(3);
                        if(SDL==1) str_data |= 1 << i;
                        else str_data &= ~(1 << i);
                        delay(2);
                        SCL=0;
                        delay(5);
        }
        return str_data;
}

void iic_init()
{   SCL=1;
        delay(5);
        SDL=1;
        delay(5);
}

void write_str(uchar dress_data,uchar str_data)
{        iic_start();
        write_data(srl_W);
        receive_ack();
        write_data(dress_data);
        receive_ack();
        write_data(str_data);
        receive_ack();
        iic_stop();
}

uchar read_str(uchar data_dress)
{        uchar data_str;
        iic_start();
        write_data(srl_W);
        receive_ack();
        write_data(data_dress);
        receive_ack();
        iic_start();
        write_data(srl_R);
        receive_ack();
        data_str = read_data();
        input_noack();
        iic_stop();
        return data_str;
}

void main()
{   iic_init();
   write_str(0x05,0xaa);
   delay(500);
   delay(500);
   P1 = read_str(0x05);
}


程序調(diào)試通過(guò)了,但是有一點(diǎn)不懂的地方:       
1、{if((temp<<i) & 0x80) SDL=1;
2、{if((temp>>i) & 0x01) SDL=1;
上面的1條是程序里有的,執(zhí)行沒(méi)有問(wèn)題,2條是我注釋掉的語(yǔ)句,如果把2條換成1條,寫的全是11111111。
我不太理解,1條應(yīng)該是先發(fā)高位,在發(fā)地位。2條應(yīng)該是先發(fā)低位,再發(fā)高位。
雖然說(shuō)IIC是先發(fā)高位,再發(fā)低位。但是就程序本身來(lái)說(shuō)只是把數(shù)據(jù)高低位搞反了,不會(huì)存在寫讀錯(cuò)誤的情況。

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费久久99精品国产婷婷六月 | 日本超碰 | 99热这里| 国产欧美一区二区三区在线看 | 国产精品久久久久久亚洲调教 | 日韩av第一页 | 国际精品鲁一鲁一区二区小说 | 久久久久久一区 | 91精品一区| www.国产一区 | 一区二区精品 | 亚洲国产成人在线 | 国产精品美女久久久久久久久久久 | 国产精品二区三区 | 亚洲一区二区三区免费在线观看 | 91九色在线观看 | 草草视频在线免费观看 | 欧美高清dvd| 成人黄色电影在线观看 | 亚洲一二三区精品 | 古装三级在线播放 | 亚洲一区免费视频 | 精品视频一区二区三区四区 | 亚洲国产成人在线 | 香蕉视频1024 | 亚洲一区二区三区桃乃木香奈 | 久久久久久亚洲精品不卡 | 亚洲成人自拍 | 免费视频一区二区 | 亚洲一区二区三区高清 | 亚洲一区 | 国产成人精品一区二区三区 | 精品国产99 | 天天干天天干 | 午夜一区二区三区在线观看 | 成人1区2区| 日韩国产中文字幕 | 看片网站在线 | 91精品国产综合久久小仙女图片 | 免费一级欧美在线观看视频 | 国产人成在线观看 |