最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

I2C 原程序

作者:kfawj 欄目:單片機
I2C 原程序
/*以下程是按周立功網(wǎng)上的例程做的,也24C32通訊的程序
晶振12M,MCU 89S52,但不知為什么總是不是返ACK信號。
輸入與輸出就更不用說了。哪位大俠可以幫忙指導一下,不勝感激!*/
#include <REG51.h>
#include <intrins.h>

void Delay_24C(void);
void Start_24C(void);
void Stop_24C(void);
bit Send_Char(unsigned CHAR);
unsigned CHAR Rece_Char(void);
bit Write_Data(unsigned CHAR,unsigned CHAR,unsigned CHAR);
unsigned CHAR Read_Data(unsigned CHAR,unsigned CHAR);
sbit SCL=P0^7;
sbit SDA=P0^6;

void main()
{
     unsigned CHAR i,j;
     unsigned CHAR xx;
     i=j=0;
     while(1){
         //j++;
        xx=0;
         Write_Data(0x00,i,0x55);
        xx=Read_Data(0x00,i++);
        _nop_();
     }
}

/*void Delay_24C()
{
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
}*/

void Start_24C(void)
{
    SDA=1;
    _nop_();
    SCL=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    //Delay_24C();
    SDA=0;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    //Delay_24C();
    SCL=0;
    _nop_();
    _nop_();
}

void Stop_24C(void)
{
    SDA=0;
    _nop_();
    SCL=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
     //Delay_24C();
    SDA=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    //Delay_24C();
}

bit Send_Char(unsigned CHAR ch)
{
    auto unsigned CHAR i;
    for(i=0;i<8;i++){
        if((ch<<i)& 0x80)
            SDA=1;
        else
            SDA=0;
        _nop_();
        SCL=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        //Delay_24C();
        SCL=0;
    }
    _nop_();
    _nop_();
    SDA=1;
    _nop_();
    _nop_();
    SCL=1;
    _nop_();
    _nop_();
    _nop_();
    //Delay_24C();
    if(SDA==1)
        i=0;
    else
        i=1;
    SCL=0;
    _nop_();
    _nop_();
    return(i);
}

unsigned CHAR Rece_Char()
{
    auto unsigned CHAR i,j;
    j=0;
    SDA=1;
    for(i=0;i<8;i++){
        _nop_();
        SCL=0;
        //Delay_24C();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SCL=1;
        _nop_();
        _nop_();
        j=j<<1;
        if(SDA==1) j++;
        _nop_();
        _nop_();
    }
    SCL=0;
    _nop_();
    _nop_();
    return(j);
}

bit Write_Data(unsigned CHAR ch1,unsigned CHAR ch2,unsigned CHAR ch)
{
    auto unsigned CHAR i;
    i=1;
    Start_24C();
    do{
    i=ch1 & 0x70;
    i=i>>3;
    i=i & 0x0E;
    i=i | 0xA0;
    i=Send_Char(i);
    }while(!i);
    if(!i) return(0);

    do{
    i=ch1 & 0x0F;
    i=Send_Char(i);
    }while(!i);
    if(!i) return(0);
    do{
    i=1;
    i=Send_Char(ch2);
    }while(!i);
    if(!i) return(0);
    do{
    i=Send_Char(ch);
    }while(!i);
    if(!i) return(0);        
    Stop_24C();
    return(1);
}

unsigned CHAR Read_Data(unsigned CHAR ch1,unsigned CHAR ch2)
{
    auto unsigned CHAR i,j;
    i=1;
    Start_24C();
    do{
    j=ch1 & 0x70;
    j=j>>3;
    j=j & 0x0E;
    j=j | 0xA0;
    i=Send_Char(j);
    }while(!i);
    if(!i) return(0);
    do{
    j=ch1 & 0x0F;
    i=Send_Char(j);
    }while(!i);
    if(!i) return(0);
    do{
    i=1;
    i=Send_Char(ch2);
    }while(!i);
    if(!i) return(0);
    
    Start_24C();
    do{
    j=ch1 & 0x70;
    j=j>>3;
  &
2樓: >>參與討論
iC921
但不知為什么總是不是返ACK信號……
 
3樓: >>參與討論
hotpower
從地址不對或時序不對肯定不能返回ACK信號
 
4樓: >>參與討論
kfawj
to: IC921
如果沒有ACK返回信號怎么進行下面的操作呢?

5樓: >>參與討論
kfawj
to:hotpower
我就是不知道哪里不對呀?
程序基本上完全按周立功網(wǎng)上提供的資料寫的,但就是不能正常的完成讀寫。整個板子的其他控制程序都跑通了,就這兩個子程序就是跑不過去。
現(xiàn)在,整個程序就一個寫數(shù)據(jù),和寫0x55了;還是不能正常運行。還請大俠不惜指教一下。
小弟在此謝過了!

6樓: >>參與討論
kfawj
謝謝樓上的兩位。問題解決了。
程序沒有任何問題。
電路也沒有錯誤。
是仿真器的問題,不知道為什么就是不能仿真?我用的是偉福的E6000/L。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
求教:S52的串口下載板問題
慚愧,請教高人這個單位什么意思?
馬達驅(qū)動電路芯片   求助
想用白色發(fā)光led做一個燈泡,取代白熾燈,應該咋辦?
請教MF RC500的問題
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號