📄 7161839ok1.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 + -