原创 TCL1542,TCL1543 使用子程序

2008-2-1 08:10 4727 6 6 分类: MCU/ 嵌入式

/*       TCL1542,TCL1543  使用子程序


      TCL1542,1543 是10位开关电容逐次逼近型AD控制器
      11个输入通道
      3种内嵌自测模式
      总的误差  +-1 LSB MAX
      有内部系统时钟
      转换成功后有提示。
      兼容TCL542
      完全CMOS 技术


    描述:
        有3个输入(片选/CS,时钟I/O CLOCK,地址输入ADDRESS)和一个三态 输出。 一共有4个接口与mcu串行相连,
    可高速传输。  采样保持是自动的,当AD转换成功后,转换成功输出(EOC)马上变高,指示转换完成。高阻的输入
    有利于AD转换时隔离模拟电路和电源的噪声。


   Terminal Functions
       ADDRESS  -----串行地址输入。
       /CS---- 片选。
       DATA OUT----
       EOC----  转换完成信号。在第十个i/o CLOCK后由高变低,一直到转换完成并数据准备好要输出。
       I/O CLOCK ----输入/输出 时钟。


       REF+ ---
       REF- ---


       A0~A10 ---


   多路选择器是先断开后连接类型,以减少输入噪声注入通道内。在第四个I/O 时钟的下降沿模拟量开始取样。
   在6个时钟内继续取样。保持到第十个I/O CLOCk  的下降沿。*/


 #define AD_CS     P15
 #define ADDRESS   P17
 #define DATA_OUT  P34
 #define EOC       P33
 #define IO_CLOCK  P16
 #define led1 XBYTE[0x0100]



/**************Tcl1542 initalization *****/
void ad_ini(void)
       {AD_CS=1;
        IO_CLOCK=0;
        ADDRESS="1";
       }
/****************************************
  input : The next channel address
  output: analog conversion value
  ***************************************/
 uint ad_convertion(uchar i)
       {uchar count;
        uint j;
        AD_CS=False;
        j="0";
        i=_cror_(i,4);  // 循环右移4位
        count="10";
        do      {
                 ADDRESS=(bit)(i&0x80);    // shift in new multiplexer address
          i="i"<<1;
                 IO_CLOCK=True;
                 if (DATA_OUT)             //  shift out previous conversion value.
                         {j=j<<1;
                          j++;
                         }
                 else
                         {j=j<<1;
                         }
                 IO_CLOCK=False;
                 count--;
                 }while(count!=0);         // ten plus
        AD_CS=True;
        while(EOC==1);     // wait next channel conversion value.
        return(j);
       }


/************************ main program ************************/
main()
    {  uchar ad_reg;      // 下一次要转换的通道。
       uint  data_reg;    // 上一次转换的AD值。


      ad_ini();


       do  {
            data_reg=ad_convertion(0);


            data_reg=ad_convertion(1);
            data_reg=ad_convertion(2);
            data_reg=ad_convertion(3);
            data_reg=ad_convertion(4);
            data_reg=ad_convertion(5);
            data_reg=ad_convertion(6);
            data_reg=ad_convertion(7);
            data_reg=ad_convertion(8);
            data_reg=ad_convertion(9);
            data_reg=ad_convertion(0x0a);
            data_reg=ad_convertion(0x0b);     // Test mode select address   (Vref+ - Vref-)/2
            data_reg=ad_convertion(0x0c);     // Vref-
            data_reg=ad_convertion(0x0d);     // Vref+



            // collect.volitage=data_reg * 260)/1024
            // collect.current=data_reg*300/1024


           }while(1);


    }


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /3 下一条