本帖最后由 hotpower 于 2012-9-22 12:40 编辑
这个是刚调通的,我认为MINI51的IIC非常好,简单好用。
I2C是一个双向串行总线标准,2根线,在设备间提供简单有效的数据传输方法. I2C 标准支持多主设备,冲突检测和仲裁,如果两个以上的主设备试图同时控制总线时,可以防止数据被破坏. 双向,串行,8位数据宽度,最快速度可以达到1.0 Mbps.
Mini51 系列的I2C可以作为主或者从设备,I2C驱动可以帮助用户更容易的使用I2C功能.
I2C有如下特性:
. 支持主/从模式,最高速度可以达到1Mbps.
. 内嵌一个14-bit超时计数器,如果I2C操作阻塞,超时将发生超时中断.
. 支持7-bit中断模式.
. 支持多地址识别. (4个从地址,带掩码)
其设置非常方便如:
DrvI2C_Open (100000);
这样把通讯速率也给设好了
下面说一下,我的24LC64的编程思想,就是往1,2,3,4,单元写11,12,13,14,写完并读完灯依次亮,最后出厂时总检一下,都对灯全灭,这个老好了,有MINI51的童鞋可以试下:- /*---------------------------------------------------------------------------------------------------------*/
- /* */
- /* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved. */
- /* */
- /*---------------------------------------------------------------------------------------------------------*/
- #include "includes.h" //包含所需的头文件
- extern void Write_24LC64(uint32_t address, uint8_t data);
- extern uint8_t Read_24LC64(uint32_t address);
- uint32_t i2cdata = 0;
- uint8_t count;
- uint8_t flag;
- /*************************************************************************************
- ** Function name: main
- ** Descriptions: GPIOINT
- ** input parameters: 无
- ** output parameters: 无
- ** Returned value: 无
- *************************************************************************************/
- int main (void)
- {
- Set_System(); //调用系统初始化函数
- DrvGPIO_InitFunction(FUNC_I2C);
- Write_24LC64(0x00000000,11);
- i2cdata = Read_24LC64(0x00000000);
- if(i2cdata == 11)
- DrvGPIO_ClrBit(E_PORT3, 1); //LED0-ON
- delay_ms(200);
- Write_24LC64(0x00000001,12);
- i2cdata = Read_24LC64(0x00000001);
- if(i2cdata == 12)
- DrvGPIO_ClrBit(E_PORT3, 6); //LED1-ON
- delay_ms(200);
- Write_24LC64(0x00000002,13);
- i2cdata = Read_24LC64(0x00000002);
- if(i2cdata == 13)
- DrvGPIO_ClrBit(E_PORT5, 2); //LED2-ON
- delay_ms(200);
- Write_24LC64(0x00000003,14);
- i2cdata = Read_24LC64(0x00000003);
- if(i2cdata == 14)
- DrvGPIO_ClrBit(E_PORT2, 6); //LED3-ON
- delay_ms(200);
- for(count=0;count<4;count++)
- {
- if(Read_24LC64(count)==count+11)
- flag++;
- else
- {
- break;
- }
- }
- if(flag==4)
- {
- DrvGPIO_SetBit(E_PORT3, 1); //LED0-OFF
- DrvGPIO_SetBit(E_PORT3, 6); //LED1-OFF
- DrvGPIO_SetBit(E_PORT5, 2); //LED2-OFF
- DrvGPIO_SetBit(E_PORT2, 6); //LED3-OFF
- }
- while(1);
- }
上工程,欧啦
|