新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)—IIC—EEPROM(CAT24WCXX)—03

        51單片機(jī)—IIC—EEPROM(CAT24WCXX)—03

        作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏

        4.IIC的總線讀寫操作

        先介紹一下在IIC讀寫一個(gè)字節(jié)的數(shù)據(jù)~~~這樣以后說(shuō)起來(lái)就方便了

        發(fā)送字節(jié)子程序:

        先是asm文件形式:

        ;字節(jié)數(shù)據(jù)放入ACC
        ;每發(fā)送一個(gè)字節(jié)筪掉用一次CACK(檢測(cè)應(yīng)答子程序),取應(yīng)答位
        WRBYTE:
        MOVR0,#08H
        WLP:
        RLCA
        JCWR_1
        SJMPWR_0
        WLP1:
        DJNZR0,WLP
        NOP
        RET
        WR_1: ;發(fā)送1
        SETBSDA
        NOP
        SETBSCL
        NOP
        NOP
        NOP
        NOP
        NOP
        CLRSCL
        SJMPWLP1
        WR_0: ;發(fā)送0
        CLRSDA
        NOP
        SETBSCL
        NOP
        NOP
        NOP
        NOP
        NOP
        CLRSCL
        SJMPWLP1

        然后就是c文件:

        void send_byte(uchar c)
        {
        uchar bit_cnt;
        for(bit_cnt=0;bit_cnt<8;bit_cnt++)//循環(huán)傳送8位
        {
        if((c< //取當(dāng)前發(fā)送位
        sda=1;
        else
        sda=0;
        _nop_();
        scl=1;//發(fā)送到數(shù)據(jù)線上
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        scl=0;
        }
        IIC_ack();
        }

        ~~~~~~~~~接收子程序

        匯編:

        ;讀出的值再ACC中
        ;每取一個(gè)字節(jié)要發(fā)送一個(gè)應(yīng)達(dá)或者非應(yīng)答信號(hào)(要知道你讀取就成了從機(jī),就要發(fā)送一個(gè)信號(hào)告訴主機(jī))
        RDBYTE:
        MOVR0,#08H
        RLP:
        SETBSDA
        NOP
        CLRSCL;置時(shí)鐘線為低電平,準(zhǔn)備接收數(shù)據(jù)
        NOP
        NOP
        NOP
        NOP
        NOP
        SETBSCL
        NOP
        MOVC,SDA;讀取數(shù)據(jù)位
        RLCA;進(jìn)行數(shù)據(jù)位的處理
        NOP
        DJNZR0,RLP;沒有到8位,再來(lái)一次
        RET

        c代碼:

        //返回接收的8位數(shù)據(jù)
        uchar rec_byte()
        {
        uchar temp;
        uchar bit_cnt;
        temp=0;
        sda=1; //置數(shù)據(jù)線為輸入方式
        for(bit_cnt=0;bit_cnt<8;bit_cnt++)
        {
        _nop_();
        scl=0; //置時(shí)鐘線為低電平,準(zhǔn)備接收數(shù)據(jù)
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        scl=1;
        _nop_();
        _nop_();
        temp<<=1;
        if(sda==1)//接收當(dāng)前數(shù)據(jù)位,接收內(nèi)容放入temp中
        temp+=1;
        _nop_();
        _nop_();
        }
        scl=0;
        _nop_();
        _nop_();
        return(temp);
        }

        好了,下面的就好說(shuō)了~~~~哎。。。累死了

        IIC總線的讀寫操作主要是三個(gè)(主要的表格與時(shí)序圖自己可以在網(wǎng)上搜的~~一搜一大片,我也就不要再贅述了)

        (1)當(dāng)前地址讀

        該操作將從所選期間的當(dāng)前地址讀,讀的字節(jié)數(shù)不指定

        (2)指定單元讀

        該操作將從指定所選期間指定地址讀,讀的字節(jié)數(shù)不指定

        (4)指定字節(jié)寫(不說(shuō)了,一看就明白了)

        二、IIC總線EEPROM芯片與單片機(jī)的接口

        1.串行EEPROM電路CAT24WCXX概述

        美國(guó)CATALYST公司出品的CAT24WCXX 是一個(gè)1-256K位的支持I2C總線數(shù)據(jù)傳送協(xié)議的串行CMOS E2PROM,可用電擦除,可編程自定時(shí)寫周期(包括自動(dòng)擦除時(shí)間不超過(guò)10ms,典型時(shí)間為5ms)的。串行E2PROM一般具有兩種寫入方式,一種是字節(jié)寫入方式,還有另一種頁(yè)寫入方式。允許在一個(gè)寫周期內(nèi)同時(shí)對(duì)1個(gè)字節(jié)到一頁(yè)的若干字節(jié)的編程寫入,1頁(yè)的大小取決于芯片內(nèi)頁(yè)寄存器的大小。其中,CAT24WC01具有8字節(jié)數(shù)據(jù)的頁(yè)面寫能力,CAT24WC02/04/08/16具有16字節(jié)數(shù)據(jù)的頁(yè)面寫能力,CAT24WC32/64具有32字節(jié)數(shù)據(jù)的頁(yè)面寫能力,CAT24WC128/256具有64字節(jié)數(shù)據(jù)的頁(yè)面寫能力。美國(guó)CALAYST公司先進(jìn)的CMOS技術(shù)實(shí)質(zhì)上是降低了器件的功耗,可在電源電壓低到1.8V的條件下工作,等待電流和額定電流分別為0和3mA。該系列器件提高商業(yè)級(jí)、工業(yè)級(jí)、汽車級(jí)芯片。CALAYST公司特有的噪聲保護(hù)施密特觸發(fā)輸入技術(shù)和ESD最小達(dá)到2000V,從而保證CAT24WCXX系列E2PROM有極強(qiáng)的干擾下數(shù)據(jù)不丟失,因此CAT24WCXX系列E2PROM在汽車電子及電度表、水表、煤氣表中得到了廣泛的話應(yīng)用(個(gè)人感覺這些應(yīng)用還是對(duì)自己有很大用途,可以好好看看,對(duì)自己那是相當(dāng)?shù)挠袔椭#ㄏ旅娴谋砀窨纯磣~)



        (注意頁(yè)寫,還要注意一個(gè)MCU上可以擴(kuò)展的數(shù)量,后面有介紹為什么可以擴(kuò)展這么多,其實(shí)就是因?yàn)橐玫巾?yè)寫,呵呵,別的就不用太注意了)



        關(guān)鍵詞: 51單片機(jī)IICEEPRO

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 盖州市| 黄石市| 三台县| 名山县| 仲巴县| 凤台县| 民丰县| 濮阳市| 五家渠市| 弋阳县| 宜川县| 乐山市| 成安县| 锡林郭勒盟| 镇雄县| 纳雍县| 湘乡市| 湖南省| 汉川市| 郑州市| 永泰县| 耿马| 萨嘎县| 岗巴县| 江西省| 秦皇岛市| 阿勒泰市| 天全县| 孝义市| 邵阳市| 吴江市| 景谷| 苍山县| 观塘区| 朝阳市| 织金县| 延长县| 滦平县| 鄂伦春自治旗| 邹平县| 大新县|