16F877A和24C02通信汇编语言,pic单片机IIC通信读24C02程序例 16F877A 主频4M
#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同步串口控制寄存器置0
SSPSTAT=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
總結
以上是生活随笔為你收集整理的16F877A和24C02通信汇编语言,pic单片机IIC通信读24C02程序例 16F877A 主频4M的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: laravel中使用的PDF扩展包——l
- 下一篇: S-function入门及案例详解(1)