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

📄 ad7416.c

📁 对AD7416用i2c操作,ad7416是一款用来测温的常用芯片。
💻 C
字号:
 
#include <iom16v.h>
#include <macros.h>
#include <stdlib.h>
 
#define SLD_R_AK  0xC4
#define SLD_R_NK  0x83

//TWI status
#define START_OK 0x08
#define R_STAR_OK 0x10 
#define SLA_W_OK 0x18
#define SLD_W_OK 0x28
#define SLA_R_OK 0x40
#define SLD_R_AK_OK 0x50
#define SLD_R_NK_OK 0x58 

#define uchar unsigned char
#define uint unsigned int

#define start() (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
#define stop()  (TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWSTO))
#define  wait() {while(!(TWCR&(1<<TWINT) ));} 
 #define writebyte(twi_d) {TWDR=(twi_d);TWCR=(1<<TWINT)|(1<<TWEN);}
 #define testack() (TWSR&0Xf8)
 #define twi()    (TWCR=(1<<TWINT)|(1<<TWEN))
 
uchar Tmp_data_high, Tmp_data_low;
  
void twi_init()
{
   TWBR=0X0C;
  // TWCR=0X44;
   TWSR=0X00;
}
//~~~~~~~~~~~~~~~~~~~~~~
 
uchar AD7416_read(void)
{
 
 start();	   		  //Generate START condition
 wait();					  //START_OK (0x08) valified
  
 
 writebyte(0X90);  			  
 wait();						  //SLA_R_OK (0x40) verified
   
 writebyte(0);  			  
 wait();					  //ALD_W_OK (0x28) verified
  
 start();	   		  //Generate RESTART condition
 wait();						  //RESTART_OK (0x10) valified
 
 writebyte(0X91);     			  
 wait();
   
   twi();
 //writebyte(SLD_R_AK );    
 wait();	
 
 Tmp_data_high=TWDR;
  wait();
 //TWCR=SLD_R_AK;     			  //Read the pointed reg: low byte
 wait();	 			  //DLD_R_AK_OK (0x50) verified
 Tmp_data_low = TWDR; 
 
 stop();	  		 	   	  //Generate STOP condition
} 
 
void delay(uchar z)
{
   uint x;
   for(;z>0;z--)
      for(x=20000;x>0;x--);
}	  
 
void main(void)
{ 		
 DDRD=0xff; 		 
 twi_init();	
 while(1)
 {
   
  AD7416_read(); 
  PORTD=Tmp_data_high;
   delay(10);
 }
}

⌨️ 快捷键说明

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