新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AT45DB021B在電力參數監測中的應用

        AT45DB021B在電力參數監測中的應用

        作者: 時間:2013-08-06 來源:網絡 收藏

        #include Msp430x14x.h>
        #define SCK_1 P4OUT = BIT7 //SCK=1
        #define SCK_0 P4OUT =~ BIT7 //SCK=0
        #define SI_1 P5OUT = BIT0 //CPU向AT寫1
        #define SI_0 P5OUT =~ BIT0 //CPU向AT寫0
        #define SO_IN ((P5IN 0x02) == 0x02) //CPU讀.
        #define DIR_IN P5DIR =~ BIT1; P5OUT = BIT1 //I/O輸入,接受AT的數據
        #define DIR_OUT P5DIR = BIT1; P5OUT = BIT1 //I/O輸出
        #define STARTOP P4OUT = BIT6; _NOP(); P4OUT =~ BIT6
        #define ENDOP P4OUT =~ BIT6; _NOP(); P4OUT = BIT6
        #define HIGHTOLOW {_NOP(); SCK_1; _NOP(); SCK_0; _NOP();}
        int tempArray[150];
        void Init(void) //引腳初始化;
        {
        P4DIR = BIT6;
        P4OUT = BIT6;
        P4DIR = BIT7;
        P4OUT = BIT7;
        P5DIR = BIT0;
        P5OUT = BIT0;
        P5DIR = BIT1;
        P5OUT = BIT1;
        }
        寫一字節子程序:
        void Wr1byte(unsigned char tt)
        { unsigned char i;
        for (i=0; i8; j++)
        {
        if ((tt 0x80) == 0x80)
        SI_1;
        else
        SI_0;
        HIGHTOLOW;
        tt = tt 1;
        }
        }

        讀一字節子程序:

        unsigned char Rd1byte(void)
        {unsigned char i,medBit=0;
        char Data=0;
        for (i=0; i8; i++)
        { HIGHTOLOW;
        _NOP();
        if (SO_IN )
        medBit = 1; //if(SO==1)medBit=1;
        else
        medBit = 0;
        Data = (Data 1) medBit;
        return Data;
        }
        }
        對AT45DB021進行寫操作子函數: (通過緩沖存儲器2對主存儲器寫操作)
        參數:pInData 指向要寫入數據的指針
        mm 寫入數據數組的大小
        startPage 將數據寫入主存的起始頁地址
        startByte 將數據寫入主存的起始頁地址中的起始字節地址
        void WriteMemory(const int *pInData, unsigned char mm, unsigned int startPage, unsigned int startByte)
        {
        unsigned char i, j;
        unsigned char opCode;
        char lowData;
        char highData;
        opCode = 0x85; //opCode=0x82 is also available.
        lowData = highData = 0;
        SCK_0;
        _NOP();
        STARTOP;
        _NOP();
        Wr1byte(opCode );
        for (j=0; j5; j++)
        HIGHTOLOW;
        //send startPage address //發送起始頁地址子程序;
        //send startByte address //發送頁內起始地址子程序;
        for (j=0; jmm; j++) //對目的地址寫操作,先寫低字節后寫高字節
        {
        lowData = (char)(*(pInData + j));
        Wr1byte(lowData);
        highData = (char)((*(pInData + j)) >> 8);
        Wr1byte(highData);
        }

        ENDOP;
        _NOP();
        SI_1;
        }
        讀出AT45DB021存儲的數據(主存儲器頁讀, 讀出字)
        參數:mm 讀出數據數組的大小
        startPage 讀出數據的起始頁地址
        startByte 讀出數據的起始頁地址中的起始字節地址
        返回值:無
        void ReadMemory(unsigned char mm, unsigned int startPage, unsigned int startByte)
        {
        unsigned char i, j;
        unsigned char opCode;
        unsigned char medBit;
        char lowData;
        char highData;
        opCode = 0x52;
        lowData = highData = 0;
        medBit = 0;
        SCK_0;
        _NOP();
        STARTOP;
        _NOP();
        Wr1byte(opCode );
        for (j=0; j5; j++)
        HIGHTOLOW; //5位保留碼;
        //send startPage address //發送起始頁地址子程序;
        //send startByte address //發送頁內起始地址子程序;
        for (j=0; j32; j++)
        HIGHTOLOW; //32位無關碼;
        DIR_IN;
        for (j=0; jmm; j++)
        {
        lowData= Rd1byte();
        highData= Rd1byte();
        tempArray[j] = ((int)highData 8) + lowData;
        }
        ENDOP;
        SI_1;
        _NOP();
        DIR_OUT;
        }


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 花垣县| 从江县| 天峨县| 长阳| 阿克苏市| 沁水县| 突泉县| 夏河县| 乌审旗| 潜江市| 泾源县| 苍南县| 齐河县| 郧西县| 雅安市| 平谷区| 翼城县| 太谷县| 法库县| 晋城| 晋中市| 富源县| 贺州市| 虞城县| 峨边| 竹溪县| 阳泉市| 柳州市| 保定市| 海丰县| 嘉定区| 大渡口区| 南昌县| 望江县| 巴南区| 北京市| 台州市| 铜陵市| 嘉鱼县| 招远市| 射阳县|