?? adc-adc7705.c
字號:
#include<pic.h>
#include<pic1687x.h>
#define AD7705_DIN RB6//TRISB6=0;
#define AD7705_DOUT RB5//TRISB5=1;
#define AD7705_DRDY RB4//TRISB4=1;
#define AD7705_SCLK RB1//TRISB1=0;
#define AD7705_CS RB2//TRISB2=0;
#define AD7705_RET RB3//TRISB3=0;
#define Y_LED RD1//TRISD1=0;
#define R_LED RD0//TRISD0=0;
unsigned int T_Voltage;
unsigned char MSB_Data,LSB_Data;
void AD7705_Start(); //AD7705初始化
void AD7705_Read(); //讀AD采集數據
void AD7705_Write_Reg(unsigned char Data_byte); //寫寄存器
unsigned char AD7705_Read_Reg(); //讀寄存器
unsigned int read_AD7705_word();
void Delay1Ms(unsigned char t);
/*********** Serial ************/
void send(unsigned char count)
{
//unsigned char a;
TXEN=1; //使能發送功能
TXREG=count;
while(1)
{
if(TRMT==1) break;
}
}
void AD7705_Start()
{
unsigned char i;
TRISB1=0;
TRISB3=0;
AD7705_RET=0; //復位AD7705
Delay1Ms(5);
//DelayMs(5);
AD7705_RET=1; //AD7705可以正常工作
AD7705_DIN=1;
for(i=1;i<=50;i++)
{
AD7705_SCLK = !AD7705_SCLK;
}
AD7705_Write_Reg(0x20); //選擇時鐘寄存器,寫寄存器,正常模式
AD7705_Write_Reg(0x04); //時鐘寄存器,二分頻,主頻2.4576MHz,所以CLK=0;
/*
AD7705_Write_Reg(0x28);
MSB_Data = AD7705_Read_Reg();
Delay1Ms(5);
send(MSB_Data);
Delay1Ms(5);
*/
AD7705_Write_Reg(0x10); //選擇設置寄存器,寫寄存器,正常模式
AD7705_Write_Reg(0x44); //自校準,增益為1,單極性
}
/******************************************************************
名稱:void AD7705_Read();
功能:讀區采樣值,并轉換成顯示數據
指令:無
調用:AD7705_Read_Reg();//讀AD7705寄存器
返回:無
/******************************************************************/
void AD7705_Read()
{
AD7705_Write_Reg(0x38);
MSB_Data = AD7705_Read_Reg();
LSB_Data = AD7705_Read_Reg();
T_Voltage =MSB_Data*256+LSB_Data;
}
/******************************************************************
名稱:void AD7705_Write_Reg(unsigned char Data_byte);
功能:寫AD7705寄存器
指令:無
調用:無
返回:無
/******************************************************************/
void AD7705_Write_Reg(unsigned char Data_byte)
{
unsigned char i;
TRISB2=0;
TRISB6=0;
TRISB1=0;
/*
AD7705_CS = 0;
AD7705_SCLK = 1;
asm("nop");
asm("nop");
for(i = 0; i < 8; i++)
{
AD7705_SCLK = 0;
asm("nop");
asm("nop");
AD7705_DIN = (bit)(Data_byte & 0x80);
AD7705_SCLK = 1;
asm("nop");
asm("nop");
Data_byte <<= 1;
}
AD7705_CS = 0;
*/
for(i=0; i<8; i++)
{
AD7705_SCLK=0;
if(Data_byte&0x80)
AD7705_DIN=1;
else
AD7705_DIN=0;
asm("nop");
asm("nop");
asm("nop");
AD7705_SCLK=1;
asm("nop");
asm("nop");
asm("nop");
Data_byte <<= 1;
}
AD7705_DIN=1;
}
/******************************************************************
名稱:unsigned char AD7705_Read_Reg();
功能:讀AD7705寄存器
指令:無
調用:無
返回:Data_read
/******************************************************************/
unsigned char AD7705_Read_Reg()
{
unsigned char i,read;
TRISB2=0;
TRISB1=0;
TRISB4=1;
TRISB5=1;
AD7705_CS = 0;
AD7705_SCLK = 1;
asm("nop");asm("nop");
/*
//AD7705_Write_Reg(0x38);
//while(AD7705_DRDY){}
for(i = 0; i < 8; i++)
{
AD7705_SCLK = 0;
asm("nop");
asm("nop");
Data_read |= (unsigned char)AD7705_DOUT;
asm("nop");
asm("nop");
AD7705_SCLK = 1;
asm("nop");asm("nop");
}
asm("nop");//asm("nop");
AD7705_CS = 0;
return(Data_read);
*/
for( i=0; i<8; i++ )
{
read <<= 1;
AD7705_SCLK=0;
asm("nop");
asm("nop");
asm("nop");
if(AD7705_DOUT)
{
read++;
}
AD7705_SCLK=1;
asm("nop");
asm("nop");
asm("nop");
}
return read;
}
unsigned int read_AD7705_word()
{
unsigned int ad_data = 0;
unsigned char i = 0;
TRISB2=0;
TRISB1=0;
TRISB4=1;
TRISB5=1;
AD7705_CS = 0;
AD7705_SCLK = 1;
asm("nop");
asm("nop");
while(AD7705_DRDY);
for( i=0; i<16; i++ )
{
ad_data <<= 1;
AD7705_SCLK=0;
asm("nop");
asm("nop");
asm("nop");
if(AD7705_DOUT)
{
ad_data++;
}
AD7705_SCLK=1;
asm("nop");
asm("nop");
asm("nop");
}
return ad_data;
}
void Delay1Ms(unsigned char t)
{
unsigned char i;
for(;t>0;t--)
{
for (i=0;i<10;i++)
{
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
//asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
}
}
}
/*******main************/
main()
{
while(1)
{
unsigned char i,j,a;
unsigned char a_1,b=46,point_1,point_2,point_3;
unsigned int c,d,e;
//unsigned long e;
float k;
RBIE=0;
//RBPU=0;
//GIE=0;
SPBRG=0x19;
TXSTA=0x24;
RCSTA=0x90;
TRISC=0xf0;
TRISB=0X30;
TRISD1=0;
TRISD0=0;
AD7705_Start();
if(a==0xff)
{
Y_LED=0;
a=0x00;
}
else
{
Y_LED=1;
a=0xff;
}
Delay1Ms(100);
Delay1Ms(100);
Delay1Ms(100);
Delay1Ms(100);
Delay1Ms(100);
Delay1Ms(100);
Delay1Ms(100);
Delay1Ms(100);
Delay1Ms(100);
Delay1Ms(100);
AD7705_Write_Reg(0x38);
T_Voltage=read_AD7705_word();
k=1.0*T_Voltage*4.96/65535;
//k=1.0*T_Voltage*2.5/65535;
//a_100=(unsigned char)k/100+48;
//a_10=(unsigned char)k%100/10+48;
a_1=(unsigned char)k%10+48;
c=k*10;
d=k*100;
e=k*1000;
point_1=(unsigned int)c%10+48;
point_2=(unsigned int)d%100%10+48;
point_3=(unsigned int)e%1000%100%10+48;
//send(a_100);
//send(a_10);
send(a_1);
send(b);
send(point_1);
send(point_2);
//send(point_3);
send(0x0a);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -