弗原創IT教育中心 I2C器件C51读写程序 数据定义说明: sbit sda=P0~0;∥2C器件SDA数据线 sbit scl=P041;∥2C器件SCL时钟线 # define nopsoi nop_0 nop_0; nop_0 nop_0;nop_0, nop指令个数定义 uchar ia2 c ad main;∥器件从地址 uchar i2 c ad sub;∥器件子地址 uchar*2cbuf;∥发送接收数据缓冲区 uchar i2cnum;∥/发送/接收数据个数 说明:可以在你的应用程序中修改上述值,使其适应你的 demo设计
I2C器件C51读写程序 数据定义说明: sbit sda=P0^0; //I2C器件SDA数据线 sbit scl=P0^1; //I2C器件SCL时钟线 #define nops() {_nop_();_nop_();_nop_();_nop_();_nop_();} //nop指令个数定义 uchar i2c_ad_main; //器件从地址 uchar i2c_ad_sub; //器件子地址 uchar *i2c_buf; //发送/接收数据缓冲区 uchar i2c_num; //发送/接收数据个数 说明:可以在你的应用程序中修改上述值,使其适应你的 demo设计
弗原創IT教育中心 子函数说明:(私有函数,不能调用) void i2 c start(void)∥送起始位 vidⅰ2 c stop(oid)∥送停止位 void2 c ack main( bit ack main)∥主应答 说明: ack main=1:ack主应答; ack main=0 no ack无需应答 void send byte( uchar c)∥)送单个字节 uchar read byte(void)∥接收单个字节 说明:此函数需要配合主应答来用
子函数说明:(私有函数,不能调用) void i2c_start(void) //送起始位 void i2c_stop(void) //送停止位 void i2c_ack_main(bit ack_main) //主应答 说明:ack_main=1:ack主应答; ack_main=0:no_ack无需应答 void send_byte(uchar c) //发送单个字节 uchar read_byte(void) //接收单个字节 说明:此函数需要配合主应答来用
弗原創IT教育中心 模块函数说明:(2C外部接口函数,可被应用程序调用) void send to byte(uchar ad main, uchar c)∥向无子地址器 件发送单字节数据 void send to byte(uchar ad main, uchar ad sub, uchar buf uchar num ∥向有子地址器件发送多字节数据 void read from byte( uchar ad main, uchar *bu)∥从无子地 址器件读单字节数据 void read from byte(uchar ad main, uchar ad sub, uchar buf, uchar num) ∥从人有子地址器件读多个字节数据
模块函数说明:(I2C外部接口函数,可被应用程序调用) void send_to_byte(uchar ad_main,uchar c) //向无子地址器 件发送单字节数据 void send_to_nbyte(uchar ad_main,uchar ad_sub,uchar *buf,uchar num) //向有子地址器件发送多字节数据 void read_from_byte(uchar ad_main,uchar *buf) //从无子地 址器件读单字节数据 void read_from_nbyte(uchar ad_main,uchar ad_sub,uchar *buf,uchar num) //从有子地址器件读多个字节数据
弗原創IT教育中心 C51读写程序源代码 头文件<2 cbus h>定义 define uchar unsigned char define uint unsigned int nop指令个数定义 define nopso Lnop_0;nop_0 nop_0;nop_0; nop_0, ∥端口位定义,可修改 sbit sda=Poo sbit sc= 1 ∥内部数据定义 uchar2 c ad main;∥器件从地址 uchar i2 ad sub;∥器件子地址 ucha*2c_buf,∥发送接收数据缓冲区 uchar i2_num;∥发送|接收数据个数 # define ack1∥主应答 # define no ack0∥从应答
C51读写程序源代码: 头文件<i2cbus.h>定义: #define uchar unsigned char #define uint unsigned int //nop指令个数定义 #define nops() {_nop_();_nop_();_nop_();_nop_();_nop_();} //端口位定义,可修改 sbit sda=P0^0; sbit scl=P0^1; //内部数据定义 uchar i2c_ad_main; //器件从地址 uchar i2c_ad_sub; //器件子地址 uchar *i2c_buf; //发送|接收数据缓冲区 uchar i2c_num; //发送|接收数据个数 #define ack 1 //主应答 #define no_ack 0 //从应答
弗原創IT教育中心 C51程序<2 cbus. c>代码 #include <reg51.h> #ⅰ nclude< introns. h> #include <i2cbus. h> 大大大大大大大大大大★大 ∥送起始位sda=1->0 void i2c start(void) sC|=0 sda=1 nop 0: SC=1 tops sda=0 tops sc=0;
C51程序<i2cbus.c>代码: #i nclude <reg51.h> #i nclude <intrins.h> #i nclude <i2cbus.h> //********************************** ************ //送起始位 sda=1->0 void i2c_start(void){ scl=0; sda=1; _nop_(); scl=1; nops(); sda=0; nops(); scl=0; }