博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LPC2103开发板I2C测试试验
阅读量:5997 次
发布时间:2019-06-20

本文共 2873 字,大约阅读时间需要 9 分钟。

工程下载地址:http://blog.chinaunix.net/u3/106835/showart_2389150.html

#include "config.h" //相关头文件

 

#define C02MasterAddr 

0xa0//C02的器件地址
#define C02SlaveAddr  0   //读写数据的起始地址
#defineLED           (1 << 19)//LED IO口号
#defineLED2          (1 << 20)

 

#defineAA            (1 << 2)//I2CONSET的各位定义

#defineSI            (1 << 3)
#defineSTO           (1 << 4)
#defineSTA           (1 << 5)
#defineI2EN          (1 << 6)

#defineWRMode        0    //写模式

#defineRDMode        1    //读模式

#definelastbyte      1    //是否为最后一个字节

 

uint8 I2C_buf1 = 5;

uint8 I2C_buf2 = 0;
//延时函数
void Delay(uint32 dly)
{
    uint32i;
    
    for(; dly> 0; dly--)
    {
      for(i = 0; i < 50000; i++);
    }
}

//I2C初始化函数

void I2C_Init(uint32 Fi2c)
{
    if(Fi2c> 400000)
    {
      Fi2c =400000;
    }
    
    PINSEL0 =(PINSEL0 & (~0xf0)) |0x50;//这里是让P02,P03选第二功能,即I2C总线
    
    I2SCLH =(Fpclk/Fi2c + 1) / 2;//设置I2C速度为400K
    I2SCLL =(Fpclk/Fi2c) / 2;
    
    I2CONCLR =0x2c; //主发送模式对STA,AA,SI清零
    I2CONSET =0x40;//使用I2C总线
    
//    I2CONCLR =STA|AA|SI;
//    I2CONSET =I2EN;
    
}
//I2C bus start function
void I2C_Start(void)
{
    I2CONSET =STA;//set start condition
   do{}while(0x08 != I2STAT);//A start condition hasbeen transmitted
    I2CONCLR =STA;//clear start condition
}

//I2C bus stop function

void I2C_Stop(void)
{
    I2CONSET =STO; //set STO condition
    I2CONCLR =SI; //clear SI condition
}
//write byte function
void WriteByte(uint8 data)
{
    I2DAT =data;// data transmitted
    I2CONCLR =SI;//clear SI condition
}
//wirte I2C bus address mode is RDMode or WRMode
void WriteAddr(uint8 Mode)
{
   WriteByte(C02MasterAddr + Mode);//transmite theI2C address and R/W mode
    
   if(Mode)
    {
      do{}while(0x40 != I2STAT);//SLA+R has beentransmitted;ACK has been recevied
    }
    else
    {
      do{}while(0x18 != I2STAT);//SLA+W has beentransmitted;ACK has been received
    }
}
//write data to I2C
void WriteData(uint8 data)
{
   WriteByte(data);// data is will transmiteddata
   do{}while(0x28 != I2STAT);//Data byte in I2DAThas been transmitted;ACK has been received
}
//read i2c byte
uint8 ReadByte(uint8 last)
{
   if(last)
    {
      I2CONCLR = AA;
      I2CONCLR = SI;
      
      do{} while(0x58 != I2STAT);//data byte has beenreceived;NOT ACK has been returned
    }
    else
    {
      I2CONSET = AA;//transmited ACK
      I2CONCLR = SI;
      do{}while(0x50 != I2STAT);//data byte has beenreceived;ACK has been returned.
   }   
    
    returnI2DAT;//return read data
}
//write data into 24c02
void WriteC02(void)
{
//    uint8i;//define unsigned char i
   I2C_Start();
   WriteAddr(WRMode);
   WriteData(C02SlaveAddr);//the data storaddress
    
   WriteData(I2C_buf1);
   I2C_Stop();
}

//read I2C data

void ReadC02(void)
{
//    uint8i;
   I2C_Start();
   WriteAddr(WRMode);
   WriteData(C02SlaveAddr);
   I2C_Stop();
    
   I2C_Start();
   WriteAddr(RDMode);
    
    I2C_buf2 =ReadByte(lastbyte);
    
   I2C_Stop();
}

int main(void)

{
    
    PINSEL0 =0x00000000;
    PINSEL1 =0x00000000;
    
    IODIR =LED|LED2;
    IOSET =LED|LED2;

    

   I2C_Init(400000);
    
   WriteC02();
   Delay(1000);
   ReadC02();
    
    if(I2C_buf2== I2C_buf1)
    {
   while(1){
      IOCLR = LED;//correct LED1 light
      Delay(50);
      IOSET = LED;
      Delay(50);
      }
    }
    else
    {
      while(1)
      {
         IOCLR = LED2;//error LED2 light
         Delay(50);
         IOSET = LED2;
         Delay(50);
      }
    }
    
    

return 0;   
}

转载地址:http://gyzmx.baihongyu.com/

你可能感兴趣的文章
js中三种弹出框
查看>>
ip通信基础第二周回顾
查看>>
唯美MACD-完全版
查看>>
Canvas中 drawImage绘制图片不显示
查看>>
常用数据库设计(5)————业务匹配表设计
查看>>
MyEclipse新建Server项目
查看>>
51nod 1130
查看>>
记校赛
查看>>
iphone微信后退不刷新的问题
查看>>
将博客搬至CSDN
查看>>
弹出层模板
查看>>
Django视图,与数据库交互并返回数据
查看>>
spring事务
查看>>
hdu 1847 Good Luck in CET-4 Everybody!
查看>>
【转】服务器结构探讨 -- 简单的世界服实现
查看>>
python enumerate函数用法
查看>>
Bzoj1032 [JSOI2007]祖码Zuma
查看>>
Python标准异常总结
查看>>
asp.net ajax学习系列功能强大的UpdatePanel控件
查看>>
前端基础开发之HTML
查看>>