原创 AD7550,传感器处理程序

2009-10-28 23:42 1892 1 1 分类: MCU/ 嵌入式

#include <reg52.h>
#include <string.h>
#include <stdlib.h>
#include <absacc.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit DRDY="P3"^2;
uchar Exchange(uchar temp);
int READ_AD(uchar comd);
void delay1 (uint ms);
void AD_AIN1(void);
void AD_AIN2(void);


void main (  )
{
  int DATAIN1,DATAIN2;
  SP="0x5f";  // 设堆栈指针
  AD_AIN1();
  AD_AIN2();
  IE="0X81";// 开外部中断0,总中断开,
  while(1)
 {
     DATAIN1=READ_AD(0x38);   // (0011 1000)为读通道 (AIN1+、 AIN1-)
   //数据寄存器可在此加上显示、 按键、 打印等子程序
     delay1(200);
     DATAIN2=READ_AD(0x39);   //( 0011 1001)为读通道(AIN2+、AIN2-)数据寄存器
     delay1(200);
  }
}



uchar Exchange (uchar temp) 
/*八位高低位变换*******************************/
  {     uchar a,b,c,i;
     c="0";a=temp;b=1;
   b="b"&a;c=b|c;
       for (i=1;i<8;i++)
         {c=c<<1;
         a="a">>1;
         b="1";
         b="b"&a;
         c="b|c";
         }
 return (c);
  }
void delay1 (uint ms)
/*****************延时子程序******************/
{  uint i,j;
  for(i=0;i<ms;i++)
  for(j=0;j<1000;j++);
}
int READ_AD(uchar comd)
/*READ AD7705 读数据寄存器,comd为通讯寄存器命令*/
  {     int data1;
     uchar LSB,MSB;
     uchar temp,comm;
     temp="comd";         // 对命令做高低位变换,以写入用
     comm="Exchange" (temp);
     while (DRDY==1);
     SCON="0";                  // 不允许串行口接受数据,REN=0,先写通讯寄存器
     SBUF="comm";               // 送通讯寄存器命令
     while (TI==0);
     TI="0";
     SCON="0x10";             // 允许串行口接收,REN=1,RI=0
     while (RI==0);
     RI="0";
     MSB="SBUF";      // 读入串行口MSB 为AD 转换数据高8位,LSB为其低8位
     while (RI==0);
     RI="0";
     LSB="SBUF";
     temp="MSB";      // 高低位变换
     MSB="Exchange"(temp);
     temp="LSB";
     LSB="Exchange" (temp);
     data1=(int)MSB;  // 高低字节合并
     data1=data1<<8;
     data1=data1|(int)LSB;
     return (data1);
}
void AD_AIN1(void) 
 // 通道1的初始化***********************************
  {
   SCON="0";
   SBUF="Exchange" (0x20);    // 串行口控制寄存
//器,设置TI=0(D1) ,RI=0(D0) ,REN=0(D4),不允许接收(REN=1,
//RI=0接收), 写通讯寄存器  (0010 0000), 设置下一
//次操作为写时钟寄存器。设置为“工作模式”,选择通道为AIN1+、AIN1-?
   while(TI==0);
   TI="0";
   SBUF="Exchange" (0x01);   // 写时钟寄存器(
                          //0000 0001), 写时钟寄存器 ( 0000 0001)  
     //CLKDIS位无效 (不允
   //许MCLK OUT输出时钟),
   //CLKDIV=0(d4),CLK=0
   //(工作于2.4576MHZ),
   //设定25HZ输出更新率
   while(TI==0);
   TI="0";
   SBUF="Exchange" (0x10);     // 写通讯寄存器
    //(0001 0000)设置下
    //一次操作为写设置寄存器。
    //设置为“工作模
    //式”,选择通道为
    //AIN1+、AIN1-。
   while(TI==0);       // 等待发送完成
   TI="0";
   SBUF="Exchange" (0x62);   // 写设置寄存器
   //(0110 0010)自校准,
   //16倍增益,双极性工作,
   //高阻抗源,
   //缓冲模式,FSYNC=0
   while(TI==0);
   TI="0";
}
void AD_AIN2(void)      
 // 通道2 初始化*************************************
  {
SCON=0;                //串行口控制寄存器(0000
   //0000) ,设置TI=0 (D1) ,
   //RI=0 (D0) ,REN=0(D4),
   //不允许接收 (REN=1,RI=0接收)
 SBUF=Exchange (0x21);      // 写通讯寄存器
   //(0010 0001)设置下一次操作为
   //写时钟寄存器。设置为“工作模
   //式”,选择通道为AIN2+、AIN2-?
 while(TI==0);
 TI=0;
     SBUF="Exchange" (0x01);       // 写时钟寄
    //存器  (0000 0001) 
    //CLKDIS位无效 (不允许MCLK OUT输出时钟) ,
    //CLKDIV=0(d4),CLK=0 (工作于2.4576MHZ),
    // 设定25HZ输出更新率。
     while(TI==0);
     TI="0";
     SBUF="Exchange"(0x11);      // 写通讯寄存器
 while(TI==0);
 TI=0;
     SBUF="Exchange" (0x01);       // 写时钟寄
    //存器  (0000 0001) 
    //CLKDIS位无效 (不允许MCLK OUT输出时钟) ,
    //CLKDIV=0(d4),CLK=0 (工作于2.4576MHZ),
    // 设定25HZ输出更新率。
     while(TI==0);
     TI="0";
     SBUF="Exchange"(0x11);      // 写通讯寄存器
    //(0001 0001), 设置下一次操作为写设置寄存器。
    // 设置为 “工作模式”,
    //选择通道为AIN2+、AIN2-
     while(TI==0);         // 等待发送完成
     TI="0";
     SBUF="Exchange" (0x6a);     // 写设置寄存器
    //(0110 1010) 自校准,32增益,
    //双极性,缓冲模式,FSYNC=0
     while(TI==0);
     TI="0";
 }


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
1
关闭 站长推荐上一条 /3 下一条