新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > pic單片機IIC通信讀24C02程序例 16F877A 主頻4M

        pic單片機IIC通信讀24C02程序例 16F877A 主頻4M

        作者: 時間:2016-11-29 來源:網絡 收藏
        文本名為 iic.h #ifndef _iic_h_
        #define  _iic_h_//pic單片機IIC通信初始化函數聲明void iiccsh(void);  //pic單片機IIC通信讀外圍設備函數聲明//功能:傳送一個8位地址,返回一個8位數據unsigned char iicread(unsigned char data);//pic單片機IIC通信給外圍器件發送函數聲明//功能:傳送一個8位地址,傳送一個8位數據或指令void iicwrite(unsigned char diz,unsigned char data);#endif          文本名為   iic.c#ifndef  _iic_h_      //立即寫,立即讀,在寫讀之間要有一定的延時(unsigned int sdf; sdf=400; while(sdf)--sdf;)#define  _iic_h_#include//pic單片機IIC通信初始化函數void iiccsh(void)   {TRISC3=1;     TRISC4=1;     //PIC單片機(對16F877A單片機而言IIC通信是RC3和RC4引腳)IIC通信時時鐘引腳和數據引腳要設置成輸入SSPCON=0X28;  //SSPCON同步串口控制寄存器設置成IIC通信功能使能和單片機主控方式SSPCON2=0;    //SSPCON2同步串口控制寄存器置0SSPSTAT=0X80;  //SSPSTAT同步串口狀態寄存器設置成采用標準S模式(100Kb/s)和輸入電平滿足IIC總線標準SSPADD=9;     //SSPADD  iic通信波特率寄存器 }//pic單片機IIC通信讀外圍設備函數//功能:傳送一個8位地址,返回一個8位數據unsigned char iicread(unsigned char address)  //address位{unsigned char data;SSPIF=0;SEN=1;  //在SDA和SCL線上建立和發送一個啟動信號時序while(!SSPIF);  //判斷是啟動信號否發送完畢,SSPIF為1的時候是真 為0的時候是假 !SSPIF(1)為非真,為假退出語句SSPIF=0;  //軟件清零 不會自動清零SSPBUF=0XA0;  //發送外設IIC器件地址和寫信號while(!SSPIF);SSPIF=0;SSPBUF=address;  //發送要讀外設IIC器件數據的地址while(!SSPIF);  //判斷是否發送完畢SSPIF=0;RSEN=1;  //發送啟動重啟信號while(!SSPIF);SSPIF=0;SSPBUF=0XA1;  //發送外設IIC器件地址和讀數據信號while(!SSPIF);  //每發送一個數據都要檢測是否成功SSPIF=0;RCEN=1;  //設置讀允許while(SSPIF==0);data=SSPBUF;// while(SSPIF==0);SSPIF=0;ACKDT=0;  //寫入應答信號ACKEN=1;   //發送應答信號while(!SSPIF);SSPIF=0;RCEN=0; PEN=1;  //在SDA和SCL線上建立和發送一個停止信號時序while(!SSPIF); //如果收到停止信號同樣會置位SSPIF=0;return(data);}//pic單片機IIC通信給外圍器件發送函數聲明//功能:傳送一個8位地址,傳送一個8位數據或指令void iicwrite(unsigned char diz,unsigned char data){SSPIF=0;SEN=1;  //在SDA和SCL線上建立和發送一個啟動信號時序while(!SSPIF);  //判斷是啟動信號否發送完畢,SSPIF為1的時候是真 為0的時候是假 !SSPIF(1)為非真,為假退出語句SSPIF=0;   //軟件清零 不會自動清零SSPBUF=0XA0;  //發送外設IIC器件地址和寫信號while(!SSPIF);  //判斷是否發送完畢SSPIF=0;SSPBUF=diz;  //發送要讀外設IIC器件數據的地址while(!SSPIF);  //每發送一個數據都要檢測是否成功SSPIF=0;SSPBUF=data;  //發送要讀外設IIC器件要存儲的數據或命令while(!SSPIF);  //每發送一個數據都要檢測是否成功SSPIF=0;PEN=1;  //在SDA和SCL線上建立和發送一個停止信號時序while(!SSPIF);  //如果收到停止信號同樣會置位SSPIF=0; }#endif


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 彭山县| 吉安市| 襄樊市| 观塘区| 都兰县| 鄄城县| 宁强县| 盘山县| 上饶市| 滨州市| 富宁县| 乌兰县| 富源县| 报价| 新河县| 龙岩市| 兰坪| 西乡县| 乐山市| 灌阳县| 宜兴市| 沙洋县| 庆安县| 吉木萨尔县| 谢通门县| 隆回县| 扎赉特旗| 澄江县| 二手房| 临武县| 峨山| 衢州市| 兴文县| 广河县| 祁门县| 阳朔县| 仁寿县| 白河县| 西贡区| 新河县| 垣曲县|