ad7416.c
来自「对AD7416用i2c操作,ad7416是一款用来测温的常用芯片。」· C语言 代码 · 共 90 行
C
90 行
#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 + =
减小字号Ctrl + -
显示快捷键?