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

📄 main.c

📁 这是基于dsp编写的利用各种方法产生来启动AD,包含书上介绍的所有方法
💻 C
字号:
/*Main.c*/ 
#include "global.c"

void KickDog();
void SystemInit();
void ADINIT();
void Que();

unsigned int t0=0,i=0,j=0,k=0,numled0=1500;   
unsigned int RESULT_0=0,RESULT_8=0;  
unsigned int AD0[20],AD_0,AD8[20],AD_8;
float AD_SIG0=0.0,AD_SIG8=0.0;  

main()
{  
   SystemInit();         	         //系统初始化
   MCRA=MCRA & 0xC0FF; 	          //IOPB0-6设为IO口模式
   PBDATDIR=0xFFC2;   	         //所有LED=0 
   PBDATDIR=PBDATDIR |0x003D;   //所有LED=1           
   ADINIT();
   asm(" CLRC INTM ");      //中断使能
   T4CON=T4CON|0x0040;
   while(1);
   
} 

void SystemInit() 
{  
    asm(" SETC	INTM ");	        // 关闭总中断
    asm(" CLRC  SXM  ");	        // 禁止符号位扩展 
    asm(" CLRC  CNF  ");           // B0块映射为 on-chip DARAM
    asm(" CLRC  OVM  ");          //累加器结果正常溢出
    SCSR1=0x83FE;         	     // 系统时钟CLKOUT=20*2=40M
                                //打开ADC,EVA,EVB,CAN和SCI的时钟,系统时钟CLKOUT=40M 
    WDCR=0x006F;			    // 禁止看门狗,看门狗时钟64分频 
    KickDog();    			    // 初始化看门狗 
    IMR=0x0001;				    // 打开中断2 
    IFR=0x0FFFF;				    // 清除中断标志 
}  

void ADINIT()
{	GPTCONB=0x0400;
	T4CNT=0x0000;
	T4PR=0x4000;
	T4CON=0x100C;
	EVBIFRB=0x0FFFF;
	ADCTRL1=0x4000;			/* ADC模块复位 */
    asm(" NOP	");
    ADCTRL1=0x2010;         /* 当前转换完成,启动/停止模式,级连工作模式 */ 
    MAXCONV=0x0001; 
    CHSELSEQ1=0x80;       //第0通道
    ADCTRL2=0xC400;
}
                      
void Que()
{
   unsigned int MaxAD0=0;
   unsigned int MinAD0=AD0[0];
   unsigned int MaxAD8=0;
   unsigned int MinAD8=AD8[0];
   unsigned int tempAD0=0;
   unsigned int tempAD8=0;
   for(j=0;j<20;j++)
   {
      if(AD0[j]>MaxAD0)   MaxAD0=AD0[j];
      else if(AD0[j]<MinAD0)   MinAD0=AD0[j]; 
      if(AD8[j]>MaxAD8)   MaxAD8=AD8[j];
      else if(AD8[j]<MinAD8)   MinAD8=AD8[j];  
     
   }  
   for(j=0;j<20;j++)
   {
      tempAD0=tempAD0+AD0[j];
      tempAD8=tempAD8+AD8[j];
    } 
    AD_0=(tempAD0-MaxAD0-MinAD0)/18; 
    AD_8=(tempAD8-MaxAD8-MinAD8)/18; 
}

/*定时器1中断服务程序*/
void c_int1()              
{	if(i>=20)
        {	i=0;
        	k=0;
        }           
    if(PIVR!=0x0004)
		{  	asm(" CLRC INTM ");
        	return;
		}  
   	RESULT_0=RESULT0>>6; 
    RESULT_8=RESULT1>>6;
    AD0[i++]=RESULT_0;
    AD8[k++]=RESULT_8; 
    if(i>=20)
    	{
    		Que();
    	}
    numled0--;  
    if(numled0==0)
    {   numled0=500;
		if((PBDATDIR & 0x0001)==0x0001) 
			PBDATDIR=PBDATDIR & 0xFFFE;    	//IOPB0=0;LED灭  
		else
			PBDATDIR=PBDATDIR |0x0101;     //IOPB0=1;LED亮 
    } 
   	ADCTRL1=0x4000;			/* ADC模块复位 */
    asm(" NOP	");
    ADCTRL1=0x2010;         /* 当前转换完成,启动/停止模式,级连工作模式 */ 
    MAXCONV=0x0001; 
    CHSELSEQ1=0x80;       //第0通道
    ADCTRL2=0xC400;
    asm(" CLRC	INTM ");
}  

/*踢除看门狗 */
void KickDog()				
{
    WDKEY=0x5555;
    WDKEY=0xAAAA;
}

⌨️ 快捷键说明

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