I2C程序和流程图
程序和流程图: IIC.h
void Init_IIC(void);
void EEPROM_ByteWrite(unsigned char nAddr,unsigned char nVal); unsigned char EEPROM_RandomRead(unsigned char nAddr); unsigned char EEPROM_CurrentAddressRead(void); void EEPROM_AckPolling(void); void Init_CLK(void); void Init_IIC_Port(void); Main.C
/*******************************************
IIC for AT24c16 OR AT24CXXX 系列
只要控制好IICRM IICSTP IICSTT 其硬件会自动完成
SCL SDA的一系列时序 只要注意各个发送与接收的控制标志位. ******************************************/ #include
volatile unsigned char Data[6]; void main(void) {
//volatile unsigned char Data[6];
//停止看门狗
WDTCTL = WDTPW+WDTHOLD; //初始化端口 Init_IIC_Port();
//初始化时钟 Init_CLK(); //I2C初始化
Init_IIC(); //置传输方式及控制方式
//打开中断 _EINT();
//写入数据
EEPROM_ByteWrite(0x0000,0x12); //等待写操作完成
EEPROM_AckPolling(); //写入数据
EEPROM_ByteWrite(0x0001,0x34); //等待写操作完成
EEPROM_AckPolling(); //写入数据
EEPROM_ByteWrite(0x0002,0x56); //等待写操作完成
EEPROM_AckPolling(); //写入数据
EEPROM_ByteWrite(0x0003,0x78); //等待写操作完成
EEPROM_AckPolling(); //写入数据
EEPROM_ByteWrite(0x0004,0x9A); //等待写操作完成
EEPROM_AckPolling(); //写入数据
EEPROM_ByteWrite(0x0005,0xBC); //等待写操作完成
EEPROM_AckPolling();
//读出数据,随机读
Data[0] = EEPROM_RandomRead(0x0000); //地址自动加1 //读出数据,当前地址读
Data[1] = EEPROM_CurrentAddressRead(); //读出数据,当前地址读
Data[2] = EEPROM_CurrentAddressRead(); //读出数据,当前地址读
Data[3] = EEPROM_CurrentAddressRead(); //读出数据,当前地址读
Data[4] = EEPROM_CurrentAddressRead(); //读出数据,当前地址读
Data[5] = EEPROM_CurrentAddressRead(); }
IIC.C
#include
#define SLAVEADDR 0x50; int tx_count; int rx_count;
unsigned char I2CBuffer[3]; void Init_IIC(void) {
//将P3.1和P3.3设置为I2C管脚 P3SEL = 0x0A;
//设置P3.1和P3.3管脚的方向 P3DIR &= ~0x0A; //选择为I2C模式
U0CTL |= I2C + SYNC; //禁止I2C模块
U0CTL &= ~I2CEN;
//设置I2C为7位地址模式,不使用DMA, //字节模式,时钟源为SMCLK, //设置成传输模式
I2CTCTL = I2CTRX + I2CSSEL_2; //定义从器件地址
I2CSA = SLAVEADDR; //设置本身的地址
I2COA = 0x01A5;
//I2C时钟为SMCLK / 160 I2CPSC = 159;
//SCL 高电平为:5 *I2C 时钟 I2CSCLH = 0x03;
//SCL 低电平为:5 *I2C 时钟 I2CSCLL = 0x03; //I2C 模块有效 U0CTL |= I2CEN; tx_count = 0; rx_count = 0; }
void I2CWriteInit(void) //对于AT24CXXX的写操作是置成主模式并置位中断使能. {
//主(Master)模式 U0CTL |= MST;
//传输模式,R/W 为:0 I2CTCTL |= I2CTRX; //清除中断标志
I2CIFG &= ~TXRDYIFG; //发送中断使能
I2CIE = TXRDYIE; }
void I2CReadInit(void) {
//接收模式,R/W 为:1 I2CTCTL &= ~I2CTRX; //接收中断使能
I2CIE = RXRDYIE; }
void EEPROM_ByteWrite(unsigned char nAddr, unsigned char nVal) {
//等待I2C模块完成所有操作 //在选定的地址写入数据. while (I2CDCTL&I2CBUSY) ; //设置地址数据
I2CBuffer[1] = nAddr; //设置数据
I2CBuffer[0] = nVal; //设置缓冲区指针 tx_count = 1; //写数据初始化
I2CWriteInit(); //设置为主模式 //发送数据的长度
//1个控制字节,2个数据字节
I2CNDAT = 2; //开始和停止条件产生 //开始I2C通信
I2CTCTL |= I2CSTT+I2CSTP; return; }
unsigned char EEPROM_CurrentAddressRead(void)
{
//等待I2C模块完成所有操作 while (I2CDCTL&I2CBUSY); //读操作的初始化 I2CReadInit(); //主(Master)模式 U0CTL |= MST;
//接收1个字节的数据 I2CNDAT = 1; //清除中断标志
I2CIFG &= ~ARDYIFG;
//开始接收,产生重新起始和停止条件 I2CTCTL |= I2CSTT + I2CSTP; //等待传输完成
while ((~I2CIFG)&ARDYIFG) ; //返回数据
return I2CBuffer[0]; }
unsigned char EEPROM_RandomRead(unsigned char nAddr) {
//等待I2C模块完成所有操作 while (I2CDCTL&I2CBUSY); //设置地址
I2CBuffer[0] = nAddr; //设置缓冲区指针 tx_count = 0; //写操作初始化 I2CWriteInit(); //传输数据长度
//1个控制字节和一个地址数据 I2CNDAT = 1; //清除中断标志
I2CIFG &= ~ARDYIFG; //起始条件产生
I2CTCTL |= I2CSTT; //等待传输完成
while ((~I2CIFG)&ARDYIFG); //读操作初始化 I2CReadInit();
//接收一个字节的数据 I2CNDAT = 1; //清除中断标志
I2CIFG &= ~ARDYIFG;
//开始接收,产生重新起始和停止条件 I2CTCTL |= I2CSTT + I2CSTP; //等待传输完成
while ((~I2CIFG)&ARDYIFG); //返回数据
return I2CBuffer[0]; }
void EEPROM_AckPolling(void) {
unsigned int count;
//等待I2C模块完成所有操作 while (I2CDCTL&I2CBUSY);
count=0;
//清除I2CEN位
U0CTL &= ~I2CEN; I2CTCTL |= I2CRM; //使能I2C模块 U0CTL |= I2CEN; //设置NACKIFG标志 I2CIFG = NACKIFG;
while (NACKIFG & I2CIFG) {
//清除中断标志 I2CIFG=0x00; //主(Master)模式 U0CTL |= MST; //设置传输模式
I2CTCTL |= I2CTRX; //产生起始条件
相关推荐:
- [建筑文档]2018年公需课:专业技术人员创新能力与
- [建筑文档]2013年福建教师招考小学数学历年真题
- [建筑文档]高中信息技术课flash知识点总结 - 图文
- [建筑文档]电工实训 - 图文
- [建筑文档]最高院公告案例分析100篇(民商篇)
- [建筑文档]南开中学高2017级14-15学年(上)期末
- [建筑文档]五粮液集团战略分析
- [建筑文档]鲁教版(2012秋季版)九年级化学 酸碱
- [建筑文档]超星尔雅2017中国哲学概论自整理题库答
- [建筑文档]关于成为海口金盘饮料公司材料独家供货
- [建筑文档]LNG学习资料第一册 基础知识 - 图文
- [建筑文档]四年级品社下册《好大一个家》复习资料
- [建筑文档]现阶段领导权力腐败的特点及发展趋势
- [建筑文档]魏晋南北朝诗歌鉴赏—嵇康
- [建筑文档]坚持追求真爱是理智的行为 正方一辩稿
- [建筑文档]湘西州刑释解教人员帮教安置工作存在的
- [建筑文档]园林工程试题库及答案
- [建筑文档]计算机长期没有向WSUS报告状态
- [建筑文档]日语最新流行语
- [建筑文档]B62-016 景观进场交底专题会议
- 2018年中考语文课内外古诗词鉴赏专题复
- 高考试题研究心得体会
- C语言基础题及答案
- 电气控制及PLC习题及答案
- 都昌小学家长学校汇报材料
- GMAT作文模板正确使用方法
- 俄军办坦克大赛:中国99式有望与豹2A6
- 成本会计练习题
- 酒店餐饮业最流行的5S管理方法
- 2014-2015学年山东省菏泽市高二(下)
- 《黄鹤楼送孟浩然之广陵》教案、说课、
- 2013年结构化学自测题 有答案版
- 2011西安世界园艺博览会游览解说词(附
- 窗口文明单位示范单位创建活动总结
- 2018满分超星尔雅就业课后练习期末答案
- 韶山市城市总体规划-基础资料
- 苏教版第三单元知识点归纳
- 第4章 曲轴模态分析
- 加大查办案件力度的思考
- 武汉CPC导轨介绍




