新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC單片機之I2C(從模式)

        PIC單片機之I2C(從模式)

        作者: 時間:2013-05-30 來源:網絡 收藏

        7,使能中斷

        PIE1bits.SSP1IE = 1;//Enabe interrupt MSSP

        INTCONbits.PEIE = 1;

        INTCONbits.GIE = 1;

        如果你要使用只要使用下面的代碼:

        將void i2c_salve_interrupt_tx();void i2c_salve_interrupt_rx();放到中斷程序中,如下:

        void interrupt isr(void)

        {

        if(SSP1IE SSP1IF)

        {

        i2c_salve_interrupt_tx();

        i2c_salve_interrupt_rx();

        SSP1IF=0;

        }

        }

        將初始化函數init_i2c_slave();放到主函數中

        void main()

        {

        init_i2c_slave();

        }

        頭文件 :i2c_salve.h

        #ifndef __SALVE_H

        #define _I2C_SALVE_H

        void init_i2c_slave();

        void i2c_salve_interrupt_tx();

        void i2c_salve_interrupt_rx();

        #endif

        代碼:i2c_salve.c

        #include ;

        #define input 1

        #define RX_BUF_LEN 29

        #define while_delay 6000

        unsigned char i2c_address,word_address,Register[29];

        unsigned char RANDOM_READ,i2c_counter;

        extern unsigned char A_readflag;

        /*I2C SALVE */

        void init_i2c_slave()

        {

        TRISB6 = input;

        TRISB4 = input;

        SSP1CONbits.SSPM0 = 0;

        SSP1CONbits.SSPM1 = 1;

        SSP1CONbits.SSPM2 = 1;

        SSP1CONbits.SSPM3 = 0;// I2C slave mode ,7bit address

        SSP1CONbits.CKP = 1; // enable clock

        SSP1ADD =0xA0; //slave address is 0xa0

        SSP1CONbits.SSPEN=1;//enable I2c

        SSPSTAT=0;

        PIE1bits.SSP1IE = 1;//Enabe interrupt MSSP

        INTCONbits.PEIE = 1;

        INTCONbits.GIE = 1;

        }

        /*I2C salve mode interrupt */

        void i2c_salve_interrupt_tx()//master read

        {

        unsigned char Temp;

        unsigned int timercounter;

        Temp=SSP1STAT;

        Temp = 0x2D;

        if(SSP1STATbits.R_nW ==1)//Read operation.

        {

        A_readflag=0;

        SSP1IF = 0;

        i2c_address = SSP1BUF;

        i2c_counter = word_address;

        while(i2c_counter RX_BUF_LEN)

        {

        SSP1BUF=Register[i2c_counter];//send data

        SSP1CONbits.CKP=1;// enable colck

        timercounter=while_delay;

        單片機相關文章:單片機教程


        單片機相關文章:單片機視頻教程


        單片機相關文章:單片機工作原理




        關鍵詞: PIC單片機 I2C 從模式

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 德清县| 甘南县| 灌云县| 陆川县| 三门峡市| 建始县| 施甸县| 梓潼县| 鄂伦春自治旗| 武穴市| 墨玉县| 松溪县| 柘城县| 沁水县| 东宁县| 庄浪县| 慈利县| 贺兰县| 文登市| 镇康县| 黎川县| 永兴县| 轮台县| 岫岩| 榆树市| 诸城市| 江门市| 瑞丽市| 澄城县| 清水县| 嘉义县| 通渭县| 大英县| 滕州市| 乐清市| 化德县| 吉隆县| 通许县| 林甸县| 达孜县| 阿鲁科尔沁旗|