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

📄 tmp100.txt

📁 TI tmp100温度芯片驱动代码。是基于STC89C52的代码。
💻 TXT
字号:
#include <stdio.h>
#include <REG52.H>
#include <intrins.h>

#define nop() _nop_()

//-------------------------
sbit  led2=P1^6;

sbit scl=P3^7;  // SCL
sbit sda=P3^6;  // SDA
//-----------------


static unsigned char tmp[2];//温度寄存器:tmp[0]为高八位,tmp[1]低八位。
void IIC_read(unsigned char address);  //从IIC设备的地址address中读取一个字节数据
void IIC_write(unsigned char address,unsigned char info);
  //向IIC设备的address地址中写入一字节数据info
void IIC_init();   //初始化子程序

void delay(unsigned char x);
void delay_ms(unsigned int n);

void IIC_init();
void start();
void stop();
void writex(unsigned char j);
//unsigned char readx();
void T_Ack();
void S_Ack();



void delay(unsigned char x)
{
   unsigned int i;
   for(i=0;i<x;i++);
   _nop_();
  
}

void IIC_init()
{
   scl=1; nop(); sda=1; nop();
}
void start()
{
   sda=1; nop(); scl=1; nop(); sda=0; nop(); scl=0; nop();
}
void stop()
{
   sda=0; nop(); scl=1; nop(); sda=1; nop();
}
void writex(unsigned char j)
{
   unsigned char i,temp;
   temp=j;
   for (i=0;i<8;i++){
      temp=temp<<1; scl=0; nop(); sda=CY; nop(); scl=1; nop();
   }
   scl=0; nop(); sda=1; nop();
}
/*
unsigned char readx()
{
   unsigned char i,j,k=0;
   scl=0; nop(); sda=1;
   for (i=0;i<8;i++){
      nop(); scl=1; nop();
      if (sda==1) j=1;
      else j=0;
      k=(k<<1)|j; scl=0;
   }
   nop(); return(k);
}
*/
void T_Ack()
{
   unsigned char i=0;
   scl=1; nop();
   while ((sda==1)&&(i<255))i++;
   scl=0; nop();
}

void S_Ack()
{ 
 sda=0;
 scl=1;
 scl=0;
 sda=1;
}

void IIC_read(unsigned char address)
{
   unsigned char i,j,k;
   start();
   writex(0x90);          //器件地址,写入
   T_Ack(); 
	writex(address);        //寄存器地址
   T_Ack(); 
	start();
   writex(0x91); T_Ack(); //器件地址,读出


//------------------------char readx()--------------------

	for(j=0;j<2;j++)
	{
   scl=0; nop(); sda=1;
   for (i=0;i<8;i++)
	  {
      nop(); scl=1; nop();
      if (sda==1) k=1;
      else k=0;
      tmp[j]=(tmp[j]<<1)|k; scl=0;
     }
   S_Ack();
   }


//-----------------------------------------------------   
	stop();
   delay(10);  
}


void IIC_write(unsigned char address,unsigned char info)
{
   EA=0;
   start(); 
	writex(0x90);               //器件地址
   T_Ack(); 
	writex(address);          //寄存器地址
   T_Ack();
   writex(info);
   T_Ack(); 
	stop();
   EA=1;
   delay(50);
}

/********************延时函数***********************************/
  

void delay_ms(unsigned int n)
{
 unsigned int i,j;
 for(i=n;i>0;i--)
    for(j=0;j<1140;j++)
    ;
}

/*******************************************************************/
//================主函数=================================//
 main  (){
   unsigned char c=0;
						  
   IIC_init();
   IIC_write(0x01,0x60);//配置tmp100,精度为0.0625,温度连续转换,

   SCON=0x50; //串口模式1,允许接收 
   TMOD=0x20; //定时器1为模式2,8-bit 自动装载方式 
   PCON=0x00; //波特率不倍增 
   TL1=0xfd; 
   TH1=0xfd; //波特率9600 
   TI=1; //TI 置1,以发送第一个字节 
   TR1=1; //启动定时器 T1 
   EA=1;               // CPU所有中断开(IE最高位MSB)

  for(;;){
   
   IIC_read(0X00);

   printf("%c",tmp[0]);
   printf("%c",tmp[1]);
   led2=0;
	
   delay_ms(100);
	
   c=0xaa;
   printf("%c",c);
   led2=1;
   }
							
                             
}
//===================================================================//


⌨️ 快捷键说明

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