📄 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 + -