新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于HI-TECH C的PIC12C508讀寫93LC4源程序

        基于HI-TECH C的PIC12C508讀寫93LC4源程序

        作者: 時間:2012-08-18 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/171028.htm

        /*----------------------------------------------------
        Function : StartBit
        Input : None
        Output : None
        Description :
        1. Set Chip Select(CS) = 1 (high)
        2. Set a Start Bit(1) to Serial Data Input(DI)
        ------------------------------------------------------*/
        void StartBit(void)
        {
        CS = 1;
        DI = 1;
        Pulse();
        }

        /*----------------------------------------------------
        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 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 苍溪县| 台东市| 崇州市| 洛南县| 大厂| 扬州市| 平谷区| 丹江口市| 阳城县| 彭泽县| 岑溪市| 特克斯县| 江源县| 合川市| 荥经县| 景洪市| 墨玉县| 聂荣县| 右玉县| 西安市| 顺义区| 东兰县| 禹城市| 屏边| 鹤庆县| 灵璧县| 宜兰县| 胶南市| 扶余县| 马尔康县| 铜山县| 咸阳市| 曲周县| 罗田县| 黄龙县| 扎鲁特旗| 石狮市| 涟源市| 蓝山县| 合山市| 九龙县|