pt2257.c

来自「pt2257的驱动」· C语言 代码 · 共 97 行

C
97
字号
#include "AT89X51.h"
#include "PT2257.h"
#include "System.h"
#include <intrins.h>  
/*****************以下是对IIC总线的操作子程序***/
/*****************启动总线**********************/
void IICStart(void)
{
	PT_SCL=0;                  
	PT_SDA=1;
	PT_SCL=1;
	_nop_();
	_nop_();
	_nop_();
	PT_SDA=0;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	PT_SCL=0;                
}

/*****************停止IIC总线****************/
void IICStop(void)
{
	PT_SCL=0;
	PT_SDA=0;
	PT_SCL=1;
	_nop_();
	_nop_();
	_nop_();
	PT_SDA=1;
	_nop_();
	_nop_();
	_nop_();
	PT_SCL=0;
}

/**************检查应答位*******************/
bit IICRecAck(void)
{
	PT_SCL=0;
	PT_SDA=1;
	PT_SCL=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	CY=PT_SDA;                 //因为返回值总是放在CY中的
	PT_SCL=0;
	return(CY);
}

/***************对IIC总线产生应答*******************/
void IICACK(void)
{
	PT_SDA=0;
	PT_SCL=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	PT_SCL=0;
	_nop_();
	PT_SDA=1;
}

/*******************向IIC总线写数据*********************/
void IICSendByte(char sendbyte)
{
	unsigned char data j;
	
	for(j=0;j<8;j++)
	{
		PT_SCL=0;
		sendbyte<<=1; 
		PT_SDA=CY;	
		PT_SCL=1;	      //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
	}
	PT_SCL=0;
}
void PT2257Write(char  Data1, char Data2)
{
	IICStart();
	IICSendByte(0x88);
	if(!IICRecAck())
    {
       	IICSendByte(Data1);
		IICACK();
		IICSendByte(Data2);
		IICACK();
    }
	IICStop();
}


⌨️ 快捷键说明

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