⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iic.c

📁 keil c open
💻 C
字号:
/*
*********************************************************************************************************
*                                               iic.c
*                                               实时内核
*
*                        (c) Copyright 2003-9-10:  pearmani
*                                               版权所有
*
*                                            MCU-51 专用代码
*                                           KEIL C51大模式编译
*
* 文件名:ii.c
* 作者   :caochengfu
* 改编   :
*********************************************************************************************************
*/

/*0755-83241559孙九安*/
#include "extern.h"
/*
简单的延时
*/
/*
*********************************************************************************************************
*名称:延时8微秒
* 输入参数:无
*输出参数:无
*处理的数据:无
*调用的函数:无
*创建人:	DaiWei
*创建时间:2003-8-16 10:51
*修改时间:
*********************************************************************************************************
*/
void	dly8u(void)
 {

	_Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	return;
  }
  /*
*********************************************************************************************************
*名称:void	f_iic_start(void)
*功能:启动通信
* 输入参数:无
*输出参数:无
*处理的数据:无
*调用的函数:dly8u()
*创建人:	DaiWei
*创建时间:2003-8-16 10:51
*修改时间:
*********************************************************************************************************
*/

void	f_iic_start(void)
{
/*启动I2C总线的函数,当SCL为高电平时使SDA产生一个负跳变 */
	SCL=0;
	dly8u();
	SDA=1;
	dly8u();
	SCL=1;
	dly8u();
	SDA=0;
	dly8u();
	SCL=0;
	dly8u();
}
/*
*********************************************************************************************************
*名称:void	f_iic_stop(void)
*功能:停止iic通信
* 输入参数:无
*输出参数:无
*处理的数据:无
*调用的函数:dly8u();
*创建人:	DaiWei
*创建时间:2003-8-16 10:51
*修改时间:
*********************************************************************************************************
*/

void	f_iic_stop(void)
{
/*终止I2C总线,当SCL为高电平时使SDA产生一个正跳变*/
    SCL=0;
    dly8u();
	SDA=0;
    dly8u();
	SCL=1;
    dly8u();
	SDA=1;
    dly8u();
}
/*
*********************************************************************************************************
*名称:void	f_check_ack_iic(void)
*功能:校验本次通信
* 输入参数:无
*输出参数:无
*处理的数据:无
*调用的函数:dly8u()
*创建人:	DaiWei
*创建时间:2003-8-16 10:51
*修改时间:
*********************************************************************************************************
*/

void	f_check_ack_iic(void)
{
/*发送完一个字节后检验设备的应答信号*/
	SCL=0;
    dly8u();
	SDA=1;
    dly8u();
	SCL=1;
    dly8u();
	F0=SDA;
    SCL=0;
}
/*
*********************************************************************************************************
*名称:void	f_sendone_byte(uchar	b)
*功能:发送一个字节
* 输入参数:需要发送的数据,一个字节
*输出参数:无
*处理的数据:无
*调用的函数:dly8u()
*创建人:	DaiWei
*创建时间:2003-8-16 10:51
*修改时间:
*********************************************************************************************************
*/
void	f_sendone_byte(uchar	b)
{
	uchar i;
    dly8u();
	for(i=0;i<8;i++)
	if((b<<i)&0x80)
	{
        SDA=1;
        dly8u();
        dly8u();
        SCL=1;
        dly8u();
        SCL=0;
	}
	else
	{
        SDA=0;
        dly8u();
        dly8u();
        SCL=1;
        dly8u();
        SCL=0;
	}
}
/*
*********************************************************************************************************
*名称:void	f_sendbytes(void)
*功能:发送一个数据包
* 输入参数:无
*输出参数:无
*处理的数据:sendone,sendtwo,sendthree
*调用的函数:	f_iic_start();
		f_sendone_byte(0xf0);
		f_check_ack_iic();
		f_iic_stop();
*创建人:	DaiWei
*创建时间:2003-8-16 10:51
*修改时间:
*********************************************************************************************************
*/
void	f_sendbytes(void)
{
	uchar	data	i;
	uchar	data	sendbuff[4];
	sending_flag=1;
	sendbuff[0]=0xf8;
	sendbuff[1]=sendtwo;
	sendbuff[2]=sendthree;
	sendbuff[3]=sendfour;
	  EA=0;
	for(i=0;i<4;i++)
	{
		f_iic_start();
		f_sendone_byte(0xf0);
		f_check_ack_iic();
		f_sendone_byte(sendbuff[i]);
		f_check_ack_iic();
		f_iic_stop();
    }

		EA=1;
		return;
}
void	f_sendbytes1234(void)
{
	uchar	data	i;
	uchar	data	sendbuff[4];
	sendbuff[0]=0xf8;
	sendbuff[1]=sendtwo;
	sendbuff[2]=sendthree;
	sendbuff[3]=sendfour;
	  EA=0;
	for(i=0;i<4;i++)
	{
		f_iic_start();
		f_sendone_byte(0xf0);
		f_check_ack_iic();
		f_sendone_byte(sendbuff[i]);
		f_check_ack_iic();
		f_iic_stop();
    }
		EA=1;
		return;
}

os_INT0_isp()	interrupt	0
{
//	SI=0;
	IE0=0;
	EA=1;
	ET0=1;
	TR0=1;
	TR1=1;

}
os_INT1_isp()	interrupt	2
{
//	SI=0;
	IE1=0;
	EA=1;
	ET0=1;
	TR0=1;
	TR1=1;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -