新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用HI-TECH C寫的使用PIC12C508讀寫93LC4

        用HI-TECH C寫的使用PIC12C508讀寫93LC4

        作者: 時間:2011-05-17 來源:網絡 收藏

        /*----------------------------------------------------
        Function : EWEN
        Input : None
        Output : None
        Description : ERASE/WRITE Enable
        ------------------------------------------------------*/
        void EWEN(void)
        {
        unsigned char i,temp;

        StartBit(); /* 1 */

        temp = 0x80; /* 0011xxxx ,(opcode:00, Address:11xxxx) */
        for(i=0; i8; i++) {
        if(0x30 temp)
        DI = 1;
        else
        DI = 0;
        Pulse();
        temp >>= 1;
        }

        CS = 0;
        }

        /*----------------------------------------------------
        Function : EWDS
        Input : None
        Output : None
        Description : ERASE/WRITE Disable
        ------------------------------------------------------*/
        void EWDS(void)
        {
        unsigned char i;

        StartBit(); /* 1 */

        DI = 0; /* 0000xxxx, (opcode:00, Address:00xxxx) */
        for(i=0; i8; i++)
        Pulse();

        CS = 0;
        }

        /*----------------------------------------------------
        Function : Write6
        Input : unsigned char Offset Address, unsigned int tx_data
        Output : None
        Description : Write 16bits data in to 6 Offset Address
        ------------------------------------------------------*/
        void Write6(unsigned char Offset_Addr, unsigned int tx_data)
        {
        unsigned char Addr, i;
        unsigned int temp;

        EWEN();

        StartBit(); /* 1 */
        Offset_Addr=Offset_Addr0x3F; /* 6bits address */
        Addr = Offset_Addr + 0x40; /* 01AAAAAA ,(opcode:01, address:AAAAAA) */
        temp = 0x0080;
        for(i=0; i8; i++) {
        if(Addr temp)
        DI = 1;
        else
        DI = 0;
        Pulse();
        temp >>= 1;
        }

        temp = 0x8000; /* DDDDDDDDDDDDDDDD(16bits data)*/
        for(i=0; i16; i++) {
        if(tx_data temp)
        DI = 1;
        else
        DI = 0;
        Pulse();
        temp >>= 1;
        }
        CS = 0;

        EWDS();
        }

        /*----------------------------------------------------
        Function : Read93LC46
        Input : unsigned char Offset Address
        Output : unsigned int
        Description : Read 16bits data from 93LC46 offset address
        ------------------------------------------------------*/
        unsigned int Read93LC46(unsigned char Offset_Addr)
        {
        unsigned char Addr, i, temp;
        unsigned int rx_data;

        StartBit(); /* 1 */
        Offset_Addr = Offset_Addr0x3F; /* 6bits address */
        Addr = Offset_Addr + 0x80; /* 10AAAAAA ,(opcode:10, address:AAAAAA) */
        temp = 0x80;
        for(i=0; i8; i++) {
        if(Addr temp)
        DI = 1;
        else
        DI = 0;
        Pulse();
        temp >>= 1;
        }

        rx_data = 0x0000; /* DDDDDDDDDDDDDDDD(16bits data)*/
        for(i=0; i16; i++) {
        Pulse();
        if(DO)
        rx_data |= 0x0001;
        if(i 15)
        rx_data = 1;
        }
        CS = 0;

        return(rx_data);
        }

        void InitPIC(void)
        {
        OPTION = (GPWU | GPPU | PS2 | PS1 | PS0);
        TRIS = 0x10;
        CS = 0;
        CLK = 0;
        DI = 0;
        }

        /* Main routine */
        void main(void)
        {
        unsigned char addr;
        unsigned int rx_buf;

        InitPIC();
        /* Read a word then +1 and write back to 93LC46 */
        for (addr = 0; addr 10; addr++)
        {
        rx_buf = Read93LC46(addr);
        rx_buf = rx_buf+1;
        Write93LC46(addr, rx_buf);
        }

        }


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阿克陶县| 武冈市| 金阳县| 平舆县| 丹阳市| 北票市| 兰溪市| 密山市| 射阳县| 上杭县| 凤城市| 磐石市| 齐齐哈尔市| 柳江县| 荣成市| 南和县| 同江市| 仁布县| 建始县| 石狮市| 花莲县| 西宁市| 卫辉市| 油尖旺区| 杭锦旗| 松潘县| 灵寿县| 通许县| 遵化市| 商河县| 渝中区| 营口市| 南川市| 定日县| 河东区| 天津市| 石景山区| 海城市| 涞源县| 枞阳县| 梅河口市|