snifer

[原创]AD7450在地震监测中的应用

0
阅读(8735)

最近,很忙。。。。。。。

跟一个山西的公司合作开发了一个地震预测报警的传感器,其中涉及商业机密,我只写一下我负责的编码问题,欢迎大家讨论。

其中还有很多部件,核心呢就是ADI公司的AD7540,我本人非常推崇ADI的产品,在选型会上,我坚决强烈推荐这款产品,事实证明我的眼光还是不错的,呵呵。。。。。

在实际的开发过程中用到了转换控制器ADuC812,来控制AD7450,用 tmr2程序来触发1sps。

用中断0触发电源的打开和闭合。

具体程序如下:

#include
#include

sbit SS = P3^5;
sbit LED = P3^4;
unsigned char ADH,ADL; ADC的结果
void UART_Init()
{
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
SCON = 0x52;
TR1 = 1;
}
void UART_sendchar(unsigned char c)
{
while(!TI);
TI = 0;
SBUF = c;
}
void SPI_Init()
{
SPICON = 0x38;配置SPI的港口,Fosc / 4,CPHA = 0,CPOL = 1;
}
unsigned char SPI_read_byte()
{
unsigned char dat=0x11;
SPIDAT = dat; //spi 启动接收
while(!ISPI); //等待spi
ISPI = 0;
return SPIDAT;
}
void ADC_NormalRead() //ADC普通模式
{
SS = 0;
ADH = SPI_read_byte();
ADL = SPI_read_byte();
SS = 1;
}
void ADC_PowerDown() //ADC关模式
{
SS = 0;
ADH = SPI_read_byte();
SS = 1;
}
void ADC_PowerUp() //ADC 开模式
{
ADC_NormalRead(); //虚拟读
}
void tmr2_interrupt () interrupt 5 //tmr2
{
static unsigned int cc = 1000;
TF2 = 0;
cc--;
if(!cc) //ADC in 1 SPS
{
cc = 1000;
LED ^= 1;
ADC_NormalRead();
UART_sendchar(ADH); //转换结果
UART_sendchar(ADL);
}

}
void int0_interrupt () interrupt 0 //int0
{
unsigned char i,j;
static flag = 0;
ET2 = 0;
for(i=0;i<200;i++)
for(j=0;j<200;j++)
;
if(!flag) //关模式
{
flag = 1;
LED = 1;
ADC_PowerDown();
UART_sendchar(0xDD);
}
else //Power-Up Mode
{
flag = 0;
LED = 0;
ADC_PowerUp();
UART_sendchar(0xAA);
ET2 = 1;
}
}
void main()
{
SPI_Init();
UART_Init();
ET2 = 1;

RCAP2H = 0xFC;
RCAP2L = 0x66;
TH2 = 0xFC;
TL2 = 0x66;
EX0 = 1;
IT0 = 1; //enable int0
EA = 1;
T2CON = 0x04; //1KHZ,自动读
while(1);
}
程序中参考了AD7450的硬件接口,研究了很久,查了很多资料,我负责的这部分已经交工,等待其他各工种跟进了,欢迎大家探讨!!!
Baidu
map