sbit SCL=P1^6;

sbie SDA=P1^7;

1)函数原型:void delay(uchar nu m)

功能:用for()循环提供延时。在实际应用中可依具体情况改变传入参数,但必须满足I2C总线时序中对SCL高、低电平周期的要求,本应用中取1,调用形式为delay(time)。

2)函数原型:void start(void)

功能:提供I2C总线工作时序中的起始位,在SCL=HIGH期间,SDA出现由高到底的转变,返回前将SCL拉低,允许数据变化,准备传输。其中调用函数1。

3)函数原型:void stop(void)

功能:函数提供I2C总线工作时序中的起始位,在SCL=HIGH期间,SDA出现由低到高的转变。其中调用函数1。

4)函数原型:void sendbyte(uchar b,uchar*error)

功能:在时钟作用下,将入口参数b中8位数据由高至低通过SDA线发送,并读回应答信号,存于指针变量*error中。其中调用函数1、2、3。

5)函数原型:void readbyte(uchar*b,bit Ack)

功能:函数在时钟作用下接收8位数据,存于*b中,先接收的为高位,并发送应答信号(Ack=0),当接收到最后一字节时发送非应答(Ack=1)。其中调用函数1、2、3。

6)函数原型:void send-n-byte(uchar*info,uint n,uchar address,uchar*fault) 功能:向I2C器件连续发送n个数据字节,数据存于数组info[]中,address为器件受控地址,末位为0(写),n个数据的地址可作为数据字节发送,或设置地址自动加减功能。*fault存收到的应答位。其中调用函数1-4。

7)函数原型:void receive_n_byte(uchar*info,uint n,uchar address,uchar*fault)

功能:从I2 C器件连续接收n个字节的数据,存于数组info[]中,address为器件地址,本函数保证器件地址末位是1(读),n个数据的器件内地址可作为数据字节发送,或设置地址自动加减功能。收最后一字节时发非应答信号1。*fault存收到的应答位。其中调用函数1-5。

以下仅以sendbyte()函数原型为例说明C51如何具体实现I2C总线的发送:

void sendbyte(uchar b,uchar*error)

{int count;

bit data_bit;

*error=0;

for(count=7;count>=0;count--)

{data_bit=(bit)(b&0x80);

b=b<<1;

/*送数据位,产生时钟脉冲*/

SDA=data_bit;

SCL=LOW;delay(time);

SCL=HIGH;delay(time);

SCL=LOW;delay(time);

/*释放数据线,产生时钟脉冲,读回应答*/

SDA=HIGH;

SCL=LOW;delay(time);

SCL=HIGH;delay(time);

*error=(uchar)SDA;

/*释放数据线,时钟置低*/

SDA=HIGH;

SCL=LOW;delay(time);}

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查