📄 zz11_i2ctime.c
字号:
/************************************************
** 功能描述:I2C应用,PCF8583读写程序**
************************************************/
#include "p30f6014.h"
int failmemory[40];
unsigned int WriteTable[16]={0x00,0x00,0x22,0x13,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned int ReadTable[16];
unsigned int ControlByteW=0xa2; //控制字:写准备(器件地址001)
unsigned int ControlByteR=0xa3; //控制字:读准备(器件地址001)
unsigned int AddressH=0x00; //数据地址高7位
unsigned int AddressL=0x00; //数据地址低8位
unsigned char table[10]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned long int i = 0;
void initial()
{
INTCON1 = 0x0000;
INTCON2 = 0x0000; //关闭所有中断
I2CCONbits.I2CEN = 1; //启动I2C模块
I2CBRG = 0x064; //I2C波特率
TRISG=0xfdff; //RG9设置为输出
TRISF=0xfebf; //SDO,SCK(RF6,RF8)引脚为输出
SPI1CON = 0x0060; //配置SPI模块,master/8位方式
SPI1STATbits.SPIEN =1; //启动SPI模块
}
void pagewrite()
{
I2CCONbits.SEN = 1; //发送启动位
while(I2CCONbits.SEN==1){} //等待启动操作完成
I2CTRN = ControlByteW; //发送控制字:写准备
while(I2CSTATbits.TRSTAT==1){} //等待发送完成
I2CTRN = AddressH;
while(I2CSTATbits.TRSTAT==1){} //等待发送完成
I2CTRN = AddressL;
while(I2CSTATbits.TRSTAT==1){} //等待发送完成
for (i=0;i<16;i++)
{
I2CTRN = WriteTable[i];
while(I2CSTATbits.TRSTAT==1){} //等待发送完成
}
I2CCONbits.PEN = 1; //发送停止位
while(I2CCONbits.PEN==1){} //等待停止操作完成
}
void pageread()
{
I2CCONbits.SEN = 1; //发送启动位
while(I2CCONbits.SEN == 1){} //等待启动操作完成
I2CTRN = ControlByteW; //发送控制字:写准备
while(I2CSTATbits.TRSTAT==1){} //等待发送完成
I2CTRN = AddressH;
while(I2CSTATbits.TRSTAT==1){} //等待发送完成
I2CTRN = AddressL;
while(I2CSTATbits.TRSTAT==1){} //等待发送完成
I2CCONbits.RSEN = 1; //发送重启动位
while(I2CCONbits.RSEN==1){} //等待重启动操作完成
I2CTRN = ControlByteR; //发送控制字:读准备
while(I2CSTATbits.TRSTAT==1){} //等待发送完成
for (i=0;i<16;i++)
{
I2CCONbits.RCEN = 1; //接收数据使能
while(I2CSTATbits.RBF==0){}
ReadTable[i] = I2CRCV;
I2CCONbits.ACKDT = 0;
if (i==15)
I2CCONbits.ACKDT = 1; //最后一字节则不发ACK
I2CCONbits.ACKEN = 1;
while(I2CCONbits.ACKEN==1){}
}
I2CCONbits.PEN = 1; //发送停止位
while(I2CCONbits.PEN==1){} //等待停止操作完成
}
int main()
{
while (1)
{
initial(); //初始化
//pagewrite();
//for (i=0;i<650000;i++){} //页写操作后的等待
pageread();
PORTGbits.RG9=0; //LACK送低电平,为锁存做准备
i = (ReadTable[3]&0x00f0)>>4;
SPI1BUF=table[i];
while(SPI1STATbits.SPITBF==1){}
i = ReadTable[3]&0x000f;
SPI1BUF=table[i];
while(SPI1STATbits.SPITBF==1){}
SPI1BUF=0xbf;
while(SPI1STATbits.SPITBF==1){}
i = (ReadTable[2]&0x00f0)>>4;
SPI1BUF=table[i];
while(SPI1STATbits.SPITBF==1){}
i = ReadTable[2]&0x000f;
SPI1BUF=table[i];
while(SPI1STATbits.SPITBF==1){}
SPI1BUF=0xbf;
while(SPI1STATbits.SPITBF==1){}
i = (ReadTable[1]&0x00f0)>>4;
SPI1BUF=table[i];
while(SPI1STATbits.SPITBF==1){}
i = ReadTable[1]&0x000f;
SPI1BUF=table[i];
while(SPI1STATbits.SPITBF==1){}
SPI1BUF=0xbf;
while(SPI1STATbits.SPITBF==1){}
PORTGbits.RG9=1; //给锁存信号
for (i=0;i<100;i++){}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -