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

📄 275.c

📁 实现德州仪器半导体公司的温度传感器芯片 tps275的操作
💻 C
字号:
/*****************************************************************   
*文件名: IIC_Test.C   
*版权: 周立功单片机研究所   
*功能: LPC900 IIC总线互为主从演示程序   
*日期: 2004/5/20   
******************************************************************/    
#include "reg932.h"      
   
#define uchar unsigned char     
#define uint unsigned int     
   
   
//uchar buff[2];     
union   
   {   
     uchar buff[2];   
     uint  ttt;   
   }kkk;   
   
unsigned long temp;    
uint temp1;   
uchar len;   
   
uchar wendu[9];   
   
void UART_Init();    
void IIC_Init();    
void SetSlave();    
void SendAddr(uchar c);    
void SendData(uchar c);    
bit ReadData(uchar *c);    
void Delayms(unsigned int iii);    
//--------------------------------      
   
void delay()   
{   
	uchar k;   
	for(k=0;k<10;k++)    
	{   
		_nop_();   
	}   
}   
   
void Start()   
{   
	EA=0;   
	SDA=1;   
	delay();   
	SCL=1;   
	delay();//INI     
	SDA=0;   
	delay();//START     
	SCL=0;   
	delay();   
}   
   
void Stop()   
{   
	SDA=0;   
	delay();   
	SCL=1;   
	delay();   
	SDA=1;   
	delay();   
	EA=1;   
}   
   
void WaitAck(void)   
{   
	unsigned char time=0;//因故障接收方无ACK,超时值为255。     
	SDA=1;   
	delay();   
	SCL=1;   
	delay();    
	SCL=0;   
	/*while((SDA)&&(time<254))  
	{   
		time++;  
	}*/   
	while(SDA);   
	SCL=0;    
}   
   
void Ack()   
{   
	SCL=0;   
	delay();   
	SDA=0;   
	delay();   
	SCL=1;   
	delay();   
	SCL=0;   
}   
   
void SendByte(unsigned char WriteData)   
{   
	unsigned char i;   
	for (i=0; i<8; i++)   
	{   
		SCL=0;   
		delay();   
		if (((WriteData >> 7) & 0x01) == 0x01)   
		{   
			SDA=1;   
		}   
		else   
		{   
			SDA=0;   
		}   
		delay();   
		SCL=1;   
		WriteData = WriteData << 1;   
		delay();   
	}   
	SCL=0;   
	SDA=1;   
	delay();   
}   
   
unsigned char ReceiveByte(void)   
{   
	unsigned char i;   
	unsigned char TempBit  = 0;   
	unsigned char TempData = 0;   
	SCL=0;   
	delay();   
	SDA=1;   
	for (i=0; i<8; i++)   
	{   
		delay();   
		SCL=1;   
		delay();   
		if (SDA)   
		{   
			TempBit = 1;   
		}   
		else   
		{   
			TempBit = 0;   
		}   
		TempData = (TempData << 1) | TempBit;   
		SCL=0;   
	}   
	delay();   
	return(TempData);   
}   
   
void Read275(unsigned char address)   
{   
	Start();   
	SendByte(0x91); //读     
	WaitAck();   
	kkk.buff[0]=ReceiveByte(); //读高8位    
	Ack(); //CUP送低     
	kkk.buff[1]=ReceiveByte(); //读低8位    
	Ack();   
	Stop();    
	temp1=kkk.ttt;   
	if(temp1&0x8000)         //等于1则温度为零下,原因参见TMP275手册
	{   
		kkk.ttt = kkk.ttt>>4;   
		kkk.ttt = kkk.ttt-0x01;   
		kkk.ttt = ~kkk.ttt;   
		kkk.ttt = kkk.ttt & 0x0fff;   
		wendu[0]='-';   
	}   
	else   
	{   
		kkk.ttt= kkk.ttt>>4;   
		wendu[0]='+';   
	}   
	temp = (unsigned long)kkk.ttt*625;   
	temp1 = temp/100;   
	wendu[1]=temp1/10000+0x30;   
	temp1 = temp1%10000;   
	wendu[2]=temp1/1000+0x30;   
	temp1 = temp1%1000;   
	wendu[3]=temp1/100+0x30;   
	temp1 = temp1%100;   
	wendu[4]=0x2e;   
	wendu[5]=temp1/10+0x30;   
	wendu[6]=0x0d;   
	wendu[7]=0x0a;   
}   
   
void main()    
{    
	Delayms(1); //延时1ms,等待从机完成IIC初始化     
	Start();   
	SendByte(0x90); //写     
	WaitAck();   
	SendByte(0x01); //指向温度寄存器    
	WaitAck();   
	SendByte(0x60); //指向温度寄存器    
	WaitAck();   
	Stop();   
	Start();   
	SendByte(0x90); //写     
	WaitAck();   
	SendByte(0x00); //指向温度寄存器    
	WaitAck();   
	Stop();   
	while(1)    
	{    
		Read275(0x90);   
		for(len=0;len<9;len++)   
		{   
			TI=0;   
			SBUF=wendu[len];    
			while(!TI);    
		}   
		Delayms(1000);   
	}    
}    
   
void Delayms(unsigned int iii)    
{   
	unsigned int j;    
	while(iii>0)    
	{    
		for(j=0;j<=669;j++); iii--;    
	}    
}  

⌨️ 快捷键说明

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