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

📄 7161839ok1.c

📁 TI TMS320F206
💻 C
字号:
/****************************************************************/
/*                                                              */
/*  Copyright (c) 2000, TI Technology Inc                       */
/*  Proprietary and Confidential                                */
/*								*/
/*  SCCSID @(#)TMS320F206.c  2.0				*/
/*								*/
/*  Author :             jacky-cheung	                        */
/*  Author email:        jacky-cheung@sohu.com		        */
/*  Filename :           bpxz.C  				*/
/*  osc      :           16MHz					*/
/*  Release :                            			*/           																
/*  Revision History :   2004-07-14  10:00			*/
/*    								*/
/****************************************************************/
#include <c:\TDS-EMU2XX\c2000\cgtools\include\stdio.h>
#include <c:\TDS-EMU2XX\c2000\cgtools\include\math.h> 
#include <c:\TDS-EMU2XX\c2000\cgtools\include\stdlib.h>
#include "page.h" 
#include "f206.h" 
#include "tyclh.h"

#define uint unsigned int 
#define uchar unsigned char
#define	   N	64  

/*-------------------------------------------------------------------*/
interrupt void  sx_protect();        //失谐保护中断
//interrupt void  G_earth();           //接地保护中断
interrupt void 	time_int();          //定时器中断
/*-------------------------------------------------------------------*/

unsigned int keynSerial;  
extern int	nTbSysTime,adt,nNewSysDataRdPreAdr; 
extern struct 	StructKeyNode KeyNode  ;  
extern 	Boolean bRefurbish,bNewData,bNewSysRdData,bNewKey;
extern	double	uktest[10];
extern	double	avg(double *ap,int n);


long int   fall=0x17a0,autoflag=0x0055,autovok=0x0055; //自动调频频率缓存,自动调频结束标志,自动调压结束标志
float  autovsav=0.0;                                   //自动调压电压缓存

uint    sa0=0,sa1=0,sa2=0;   
double	pi[N],pu[N];                     
int	U11[N+5],U12[N+5];                             
int	nTbSysTime;

          /*上传信息*/
double      uup=0.0,fup=0.0,cx=0.0,voup=0.0;     //实验电压显示,实验频率显示,试品电容显示,实验结果电压显示
long  int   iup=0,syzt=0,bhflag=0;               //试验电流显示,实验状态显示,保护标志显示 
long  int   timeff=0,timemm=0;                   //试验时间显示分,实验时间显示秒
long  int   time  =0;                            //定时变量
double	    sine[200];                           //波形数组

         /*下传信息*/
long int    vop,iop,fstart,conduter;             //过压整定,过流整定,起始频率,电感设置
long int    timef,timem;                         //试验时间设置分,实验时间设置秒
double      vo;                                  //实验设置电压


typedef  
volatile unsigned int pointer;
volatile unsigned int *reg_pointer;
void zero_sa4828();	
void chuansong();  
 
//const int aa[3]={1,2,3 };
                    
/******************************************************************/

/*===========================Initialization DSP============================*/
void InitSystem(void)
{
	asm(" setc intm ");
	asm(" clrc CNF");
	asm(" ldp  #0h");
	reg_wsgr=0xffff;       
        reg_pointer=(pointer *)reg_ifr;
	*reg_pointer=0xffff;  
	reg_pointer=(pointer *)reg_greg;
	*reg_pointer=0x0000;
	
	TbTxInit();
	reg_tcr=0x0c29; 
    	reg_prd=1999;
	nTbSysTime=0x5555;
	
        reg_pointer=(pointer *)reg_imr;
	*reg_pointer=0x001c;  
        reg_icr=0x001c;    
        
        reg_aspcr=0x0002;  
        reg_iosr =0xffff;   
       
      	
      	asm(" clrc intm ");
        
}

/*interrupt void  sx_protect()
{
	asm(" setc intm ");
	Re_sa4828();
	Init_sa4828();
	bhflag=0x0003;
	asm(" clrc intm ");
}*/

/*interrupt void  G_earth()
{
	asm(" setc intm ");
	       
	earth=0xaa;                    /*EARTH error*  
	reg_icr=0x001d; 
        asm(" clrc intm ");
}*/

interrupt void time_int()
{
	asm(" setc intm ");
	nTbSysTime++;
	if(autovok==0x00aa)
	{
	time=time+1;
	}
	asm(" clrc intm ");
}                     

void Cont_sa4828(uint a,uint b,uint c)
{
	sa_addr=0x00;
  	sa_data=a; 
  	sa_addr=0x01;
  	sa_data=b; 
  	
  	sa_addr=0x03;
  	sa_data=c; 
  	sa_addr=0x04;
  	sa_data=0x00; 
  	sa_addr=0x05;
  	sa_data=0x00; 
  	
  	sa_addr=0x02;  
  	sa_data=0x06;  
  	sa_addr=0x0f;
  	sa_data=0x00; 
}


/*=================================================================*/
void sample()
{  	
	uint i;
	long int t=200000;
	max125=0x01;
	for(i=0; i<N+5; i++)
        {   
       		while((((reg_iosr)&0x0004)==0x0004)&&(t!=0))
       	        {
       	        t=t-1;
       	        }
       	        if(t==0)
       	        {
       	        for(i=0;i<=N+5;i++)
       	        {
       	        U11[i]=0;
       	        U12[i]=0;
       	        }
       	        }
       	        else
       	        {
                U11[i]=(max125&0x3fff);    
                U12[i]=(max125&0x3fff);
                }
        }
         

                 
   	for(i=0; i<N+5; i++)                  
	{
		U11[i]=(U11[i]<<2);
		U12[i]=(U12[i]<<2);
	}
        for(i=0; i<N; i++)
        {
        	pu[i]=(double)U11[i+2]*5.00/32768.0; 
        	pi[i]=(double)U12[i+2]*5.00/32768.0;
        	 
        }                  
}
 
/*========================================================================*/
float rms2() 
{ 
	int i,j=0;
  	double c12=0.0;
  	for(i=0;i<N;i++)
	{
	c12=c12+pu[i]*pu[i];
        }
    	c12=8.67*sqrt(c12/N);
    	/*c12=sqrt(c12/N)*9.334335655;/*2.832861*3.010526;*/
    	return(c12);  
}

uint  rms1() 
{ 
	uint i,j;
  	double c11=0.0;
  	for(i=0;i<N;i++)
	{
	c11=c11+pi[i]*pi[i];
        }
    	c11=sqrt(c11/N)*10;
    	j=(uint)(c11);
    	return(j);  
}



void delay(uint tm)

  { 
    uint a;
    for(a=0;a<=tm;a++)
    {;}
  } 



void vauto()                              /*自动调压*/
{  
  if(autoflag==0x00aa)
   {
	 if((uup<vo*0.99)&&(sa2<=254))
         {
   
    	sa2=sa2+1; 
         }
  
   
        if((uup>vo*1.01)&&(sa2>=1))
        {
   
     	sa2=sa2-1;
        }
 
   
        if((vo*0.99<=uup)&&(uup<=vo*1.01))
        {
        autovok=0x00aa;
        }
        
   }

  
   Cont_sa4828(sa0,sa1,sa2);
   delay(60000);
}


void autof()                                      /*自动调频*/
{
     if(autoflag==0x0055)
   {
  	if(autovsav<=(uup+0.35))
  	{
  		autovsav=((autovsav>uup)?autovsav:uup);
  		if(fall<=60400)
  		{
    		fall=fall+20;
  		sa0=fall&0x00ff;
  		sa1=(fall>>8)&0x00ff;
  		sa2=0x20;                      /*初始电压*/  
  		Cont_sa4828(sa0,sa1,sa2);         
  	        }
  	       
  		
  	}
  	else
  	{
  		autoflag=0xaa;
  		cx      =25336.2/(fup*fup*((double)conduter));
  	}  	
  	
  	
  }
       else
       {;}
}


void timedisp(void)        /*自动调频计时*/
{
       long int i;
       if((syzt==0)&&(autovok==0x00aa)&&(bhflag==0))	
       {
       	i     =time/1000;
       	timeff=i/60;
        timemm=i%60;
       }
       else
       {
       	i=0;
       	timeff=0;
       	timemm=0;
       	}
       if((timef==timeff)&&(timem<=timemm))
       {
	     syzt=1;
	     chuansong();
	      
    	     zero_sa4828();
    	     
       }
       else
       {;}
       
}


void  sdtf()      /*---------------手动调频-----------------*/
{
	
		if(((reg_iosr)&0x0001)==0x0000)           /*IO0---+;BIO----_*/
		{
			if(fall<=60400)
			{
			fall=fall+20; 
			sa0=fall&0x00ff;
  		        sa1=(fall>>8)&0x00ff;
  		        if(sa2==0)
  		        {
  		        sa2=0x20; 
		        }
                        else
		        {;}
		        }
		
		}
		asm(" BCND execution,BIO  ");
		asm(" nop ");
		asm(" b inexecution ");
                asm("execution: ");
                if(fall>=6040)
                {		
		fall=fall-20;
		sa0=fall&0x00ff;
  		sa1=(fall>>8)&0x00ff;
  		 if(sa2==0)
  		  {
  		    sa2=0x20; 
		  }
                  else
		  {;}
	        }
	        else
	        {;}
                asm("inexecution: ");
		asm(" nop ");		
	
}

void  sdty()                  /*----------------手动调压-----------------*/
{
	     
	        if(((reg_iosr)&0x1)==0x0)
		{
			if(sa2<=254)
			{
				sa2=sa2+1;
			}
			else
			{;}
		}
		asm(" BCND bbc,BIO  ");
		asm(" nop ");
		asm(" b aac ");			
                asm("bbc: ");
		if(sa2>=1)
		{
		sa2=sa2-1;
		}
               asm("aac: ");	
               asm(" nop ");
} 

/*自动----输出电压,保护电压,保护电流,实验时间*/

void zdong()    
{
  if((syzt==0)&&(bhflag==0))
  {
   autof();
   vauto();
  
  }
 if((bhflag!=0)&&(bhflag!=0x0003)&&(sa2!=0))
 {
       
        zero_sa4828();
    	
 }

}


/*手动----起始频率,输出电压,保护电压,保护电流,实验时间*/

void sdong()     
{
     if(bhflag==0)
     {	
     if((KeyNode.nkey==13)&&(KeyNode.nPageNo==6))
     {
     	sdtf();
     }
     if((KeyNode.nkey==13)&&(KeyNode.nPageNo==18))
     {
     	sdty();
     	}
     Cont_sa4828(sa0,sa1,sa2);
     delay(30000);
     }
     if((bhflag!=0)&&(bhflag!=0x0003)&&(sa2!=0))
     {
         
    	zero_sa4828();
    	  
     }
}



void ztest()
{       
	double i;
	sample();
        i  =rms2();
        iup=rms1();
      
        if(KeyNode.nPageNo!=16)
        {
        uup=rms2();
        }
        voup=vo;
	fup=0.004967*(double)fall+0.1;
	if((bhflag!=0)&&(bhflag!=0x0003))
	{
	
    	zero_sa4828();
    	
	}
	if((reg_iosr&0x0008)==0x0000)
	{
	bhflag=0x0001;
	}
	if(iup>iop)
	{
	bhflag=0x0001;
        }
        if(uup>(double)vop)
	{
	bhflag=0x0002;
        }
	if(vo>(double)vop)
	{
	bhflag=0x0005;
	}
	if(vo<5.0)
	{
	bhflag=0x0005;
	}
	if(vo>20.0)
	{
	bhflag=0x0005;
        }
        if(vop>20)
	{
	bhflag=0x0005;
        }
        if(iop<5)
	{
	bhflag=0x0005;
        }
        if(iop>15)
	{
	bhflag=0x0005;
        }
        if((30>fstart)||(fstart>300))
	{
	bhflag=0x0005;
        }
        if(timem>=60)
        {
        bhflag=0x0005;
        }	
}
	

void parainit()                /*参数初始化*/
{


fall=201*fstart;
autoflag=0x0055;        //aa为结束,55为非
autovok =0x0055;        //aa为结束,55为非
autovsav=0.0000;        //自动调压电压缓存
bhflag  =0x0000;        //保护标志
cx      =0.0;
voup    =0.0;
uup     =0.0;
iup     =0;
syzt    =0;
sa0   =0x00a0;
sa1   =0x0017;
sa2   =0x0000;
timeff  =0;
timemm  =0; 
time    =0;  
}



void zero_sa4828()      //关机回零
{
	while(sa2)
	{
		sa2=sa2-1;
		Cont_sa4828(sa0,sa1,sa2);
		delay(30000);
		delay(30000);
		
	}
}
		

void sinedisp(void)
{
	uint i;
	for(i=0;i<=199;i++)
	{
		sine[i]=i/20.0 ;
		//sine[i]=pu[i];
	}
}	  			


/*-------------------------------数据传输----------------------------*/
void	chuansong(void)
{ 
		int	i;
		reg_prd=1999;
 	    reg_tcr=0x0c27;
   		asm("	clrc	intm");
		TbTranRdKey();
    	for(i=0;i<0x2fff;i++)
    	{
    		SysTb(&nTbSysTime,1000);
    		if(bNewKey==True)	break;
    	}
    	 
    	bNewSysRdData=True;
    	nNewSysDataRdPreAdr=0;
    	nTbSysTime=500;
    	for(i=0;i<0x3fff;i++)
    	{
    		SysTb(&nTbSysTime,1000);
    		if(i>0x7ff && (bNewSysRdData==False))
    		break;
    	}                       
	    
	    bRefurbish=True;	
    	nTbSysTime=1000;
    	while (bRefurbish==True)
    	{     	
    	 	SysTb(&nTbSysTime,1500);
    	}
    	
    	/*if (keynSerial==KeyNode.nSerial)
    	{
			KeyNode.nkey=20;
			KeyNode.nCursorPreLine=3;
		}*/
    	keynSerial=KeyNode.nSerial;
}


/*----------------------------page information------------------------------*/             
void page()
{ 
					            
                           
            
  		switch(KeyNode.nPageNo)               
    		{
      		case Page2:                           //主菜单
    		
    			{
    			if((bhflag!=0)&&(bhflag!=0x0003))
    			{
    			 
    			zero_sa4828();
    			
	                } 
    			Re_sa4828();
	                Init_sa4828();
    			parainit();  
    			chuansong();	
										    
    			}
    			break;    
    		
    		case Page3:                          //参数设置                                       
    			
    			{
        		
        		chuansong();
		         	
    			}
    			break;		
    		
    		case  Page4:                         //试验方式选择
   				
    			{
    			chuansong();
    			parainit();	
    			}
   			break;
			
		case	Page5:                     //自动测量
  				
  			{
  			
    			zdong(); 
    			}
   			break;  
			
		case	Page6:                     //手动测量调频
  				
    			{
    			
       			sdong();      
    			}
   			break;		    		
		    		
		case	Page7:                     //结果浏览
			{
			Wait;
			}
			break;
			
		case	Page16:                     //波形显示
			{
			uup=vo;
			sinedisp();
			}
			break;	
			
		case	Page18:                    //手动测量调压
			{    
			
    			sdong(); 
			}
			break;
					
   		default:	
    			break;
    		}      		  
		     
       			
}    	
	
/**************************MAIN PROGRAM***************************/
  main()
 {   
       	
       	
	InitSystem();
	delay(30000);
	Re_sa4828();
	Init_sa4828();
	ztest();                                          /*下位状态检测*/
	chuansong();
     	
        while(1)
	{      
		
                timedisp();
                ztest();                                  /*下位状态检测*/
                chuansong();
            
                	
     	        page();
     	        
     	        		
	           	
        }      	

 }



⌨️ 快捷键说明

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