⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc22p.c

📁 为苏州一家公司所做的的恒温恒湿车间控制 系统
💻 C
字号:
/*-----------------------------------------------------*
*文件描述:本文件包含了AD采集的2子程序,分别为:          * 
*(1)ADC22P:2片2543-22路AD采集                         *
*(2)TLC2543:TLC2543芯片A/D转换子程序                   *
*-------------《嵌入式应用技术基础教程》--------------*/
#include "Includes.h"
/*SPIInit:SPI初始化子程序-------------------------------*
*功 能:对SPI进行初始化,默认为允许SPI,主机工作方式,时钟  *
*      空闲低电平,比特率8分频,                         *
*      波特率为CGMOUT/2*BD(设CGMOUT=2*fBUS=2*2.4576MHz)*
*参 数:无                                               *
*返 回:无                                               *
*------------------------------------------------------*/
#include "Includes.h"
void AD_SPIInit(void)
 {  
	SPCR=0b00100010;   //不产生中断、主机方式、时钟空闲低电平
	SPSCR=0b00000001;  //8分频
 }
//------------------------------------------------------------------*
/*A/D转换并求平均值(22路)子程序(AD22P.ASM)-----------------------*
*功能:采集TLC2543(0)-(1)片,共22通道,取16次平均值放入内存ADValue *
*入口:无                                                          *
*出口:ADValue--22路通道的16次平均采样值                           *
*调用:TLC2543Z                                                    *
*-----------------------------------------------------------------*/
void ADC22P(INT16U *ADValue)
{   
	INT8U i,j,flag,buff[2]; 
	INT8U cs,channel;
    INT16U temp; 
    //A/D数据区清0   
    for(flag=0;flag<=21;flag++)      
      ADValue[flag]=0; 
    //启动第0片TLC2543的0通道转换,得到"空数据"--不要   
    //对22个通道采集数据,每一路采集16次,16次的数据总和-->ADValue       
    for(j=0;j<16;j++)
    {
      flag=0;
      for(i=0;i<22;i++)
      { 
        cs=i/11;
        channel=i%11;      
        TLC2543(cs,channel,buff);
        TLC2543(cs,channel,buff);
        //从内存buff取出数据-->ADValue[flag]中         
        temp=*((unsigned int *)buff);         
        ADValue[flag]=ADValue[flag]+temp;
        flag++;       
      }
    }
    //求22路A/D数据的16次平均值   
    for(flag=0;flag<=21;flag++)     
      ADValue[flag]=ADValue[flag]/16;    
}
/*TLC2543芯片A/D转换子程序(TLC2543.c)--------------------------*
*TLC2543的接线:                                                 *
*             ① I/O LOCK(18)接MC08HC908GP32的SPSCK(18)         *
*             ② DATA INPUT(17)接MC08HC908GP32的MOSI(17)        *
*             ③ DATA OUT (16)接MC08HC908GP32的MISO(16)         *
*             ④ 0-1片的片选CS(15)接分别接MC08HC908GP32的PTC0~1 *
*入口:cs-片号,channel-通道号0,1,2 ...10  buf-存放数据的首址   *
*出口:内存buf开始连续两个地址为取出的数(高4位、低8位)        *
*--------------------------------------------------------------*/
void TLC2543(INT16U cs,INT16U channel,INT8U *buf)
{
  INT8U temp;
  CS_D=0xff;     //定义PTC为输出
  CS_P = 0xff;	 //C口全为高电平	
  //TLC2543片选CS=1    
  CS_P &= ~(1<<cs);  //相应片TLC2543的选CS=0,产生高到低的变化    
     
  SPIDR = (channel<<4) | 0x0C;//入口通道、16位格式、MSB先送出、二进制
  while ((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1 
                                          //发送完毕   
  while ((SPISCR & (1<<ReFullBit)) == 0);    //为0等待,也就是等待SPRF为1
  //发送控制字,取出上次转换结果高字节 
  *buf = SPIDR; //*buf中存放的是D11~D4位   
  SPIDR = *buf;	//上次转换结果低字节(后四位为0),握手信号  
  while ((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1 
                                          //发送完毕   
  while ((SPISCR & (1<<ReFullBit)) == 0);    //为0等待,也就是等待SPRF为1 
   					  //接收到数据
  *(buf+1) = SPIDR;// *(buf+1)中存放D3~D0位   
  CS_P= 0xff;	//TLC2543片选CS=1    
  //整合后*buf存放高四位(D11~D8),*(buf+1)中存放低八位(D7~D0) 
  *(buf+1) = (*(buf+1)>>4) | (*buf<<4);    
  *buf = *buf>>4;      
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -