📄 cap.h
字号:
ioport unsigned int port16;
ioport unsigned char port7;
ioport unsigned int port11;
ioport unsigned int port12;
ioport unsigned int port13;
ioport unsigned int port14;
ioport unsigned int port15;
/*
ioport unsigned char port8;
ioport unsigned char port9;
ioport unsigned char porta;
ioport unsigned char portb;
ioport unsigned char portc;
ioport unsigned char portd;
ioport unsigned char porte;
ioport unsigned char portf;
*/
#define state_cs port16
#define start_cs port7
#define protect_cs port11
#define register_cs port12
#define led_cs port12
#define fifo12_cs port13
#define fifo16_cs port14
#define fifo08_cs port15
/*
#define A54counter0 port8
#define A54counter1 port9
#define A54counter2 porta
#define A54control portb
#define B54counter0 portc
#define B54counter1 portd
#define B54counter2 porte
#define B54control portf
*/
#define A54counter0 0x0008
#define A54counter1 0x0009
#define A54counter2 0x000a
#define A54control 0x000b
#define B54counter0 0x000c
#define B54counter1 0x000d
#define B54counter2 0x000e
#define B54control 0x000f
#define WriteLed led_cs =led.value
#define WriteStart start_cs =start.value
#define WriteProtect protect_cs =protect.value
/*Protect操作*/
#define IrPowerOn protect.protects.irpoweron=0; WriteProtect /*发射板电源控制*/
#define IrPowerOff protect.protects.irpoweron=1; WriteProtect
#define AllowProtect protect.protects.shootprotect=1;WriteProtect /*保护使能*/
#define Forbidprotect protect.protects.shootprotect=0;WriteProtect
#define SetProtect protect.protects.protectorclr=1;WriteProtect /*保护置位*/
#define ClrProtect protect.protects.protectorclr=1;WriteProtect
#define ForeverProtect protect.protects.longoronce=1; WriteProtect /*保护模式*/
#define RealtimeProtect protect.protects.longoronce=1; WriteProtect
#define StartShoot protect.protects.shootstart=0; WriteProtect /*启动发射控制*/
#define StopShoot protect.protects.shootstart=1; WriteProtect
/*Led 操作*/
#define ShowTimeLed led.leds.time_led=0;WriteLed
#define WinkTimeLed led.leds.time_led=1;WriteLed
#define ShowCurcLed led.leds.curc_led=0;WriteLed
#define WinkCurcLed led.leds.curc_led=1;WriteLed
#define ShowTemcLed led.leds.temc_led=0;WriteLed
#define WinkTemcLed led.leds.temc_led=1;WriteLed
#define ShowMar1Led led.leds.mar1_led=0;WriteLed
#define WinkMar1Led led.leds.mar1_led=1;WriteLed
#define ShowMar2Led led.leds.mar2_led=0;led.leds.match1=1;WriteLed
#define WinkMar2Led led.leds.mar2_led=1;led.leds.match1=0;WriteLed
#define ShowMar3Led led.leds.mar3_led=0;led.leds.match2=1;WriteLed
#define WinkMar3Led led.leds.mar3_led=1;led.leds.match2=0;WriteLed
#define ResetMarLed WinkMar1Led;WinkMar2Led;WinkMar3Led
/*Start控制*/
#define SetTimeoff start.starts.timeoffclr=0; WriteStart /*开始关断时间记录*/
#define ClrTimeoff start.starts.timeoffclr=1; WriteStart
#define SetCurAset start.starts.curfifoasreset=0; WriteStart /*电流辅助复位*/
#define ClrCurAset start.starts.curfifoasreset=1; WriteStart
#define SetCurReset start.starts.cfifors=1; WriteStart /*电流fifo复位*/
#define ClrCurReset start.starts.cfifors=0; WriteStart
#define SetCurCap start.starts.ltcstart=1; WriteStart /*启动电流采集*/
#define ClrCurCap start.starts.ltcstart=0; WriteStart
#define SetTemAset start.starts.temasreset=1; WriteStart /*tem辅助复位*/
#define ClrTemAset start.starts.temasreset=0; WriteStart
#define SetTemReset start.starts.capfiforeset=1; WriteStart /*Tem fifo复位*/
#define ClrTemReset start.starts.capfiforeset=0; WriteStart
#define SetTemCap start.starts.temcapstart=1; WriteStart /*启动Tem采集*/
#define ClrTemCap start.starts.temcapstart=0; WriteStart
#define SetCurMode start.starts.flatorfall=1; WriteStart /*发射电流采集模式*/
#define SetEdgeMode start.starts.flatorfall=0; WriteStart /*关断沿采集模式*/
#define Mode0 2
#define Mode1 7
#define Mode2 6
#define ModeStop 0
#define CapCurMode 0x0fff
#define CapEdgeMode 0xf000
#define LedReset 0x00ff
#define StartReset 0x0000
#define ProtectReset 0x0000
#define Fre25fre 0x0c35
#define Fre25t3cmp 0x030d
#define Fre25t4cmp 0x0927
#define Fre50fre 0x061a
#define Fre50t3cmp 0x0186
#define Fre50t4cmp 0x0492
#define Fre100fre 0x030d
#define Fre100t3cmp 0x00c3
#define Fre100t4cmp 0x0249
#define Fre200fre 0x0186
#define Fre200t3cmp 0x0061
#define Fre200t4cmp 0x0123
#define UsbTem 0x01
#define UsbCur 0x02
#define UsbNoData 0x00
typedef union _led_register
{
struct _register
{
uchar time_led:1;
uchar curc_led:1;
uchar temc_led:1;
uchar mar1_led:1;
uchar mar2_led:1;
uchar mar3_led:1;
uchar match1:1;
uchar match2:1;
} leds;
unsigned int value;
} LEDREGISTER;
typedef struct _TemData
{
unsigned int TemDatah;
unsigned int TemDatal;
}TEMDATA;
typedef union _start_register
{
struct _s_register
{
uchar timeoffclr:1;
uchar curfifoasreset:1;
uchar cfifors:1;
uchar ltcstart:1;
uchar temasreset:1;
uchar capfiforeset:1;
uchar temcapstart:1;
uchar flatorfall:1;
} starts;
unsigned int value;
} STARTREGISTER;
typedef union _protect_register
{
struct _p_register
{
uchar irpoweron:1;
uchar shootprotect:1;
uchar protectorclr:1;
uchar longorone:1;
uchar shootstart:1;
uchar shootmode:3;
// uchar shootmode2:1;
// uchar shootmode1:1;
} protects;
unsigned int value;
} PROTECTREGISTER;
typedef union _state_register
{
struct _st_register
{
uchar powerlack:1;
uchar curcapend:1;
uchar protected:1;
uchar offtimeend:1;
uchar over:1;
uchar temcapend:1;
uchar curfifoef:1;
uchar temfifoef:1;
} states;
unsigned int value;
} STATEREGISTER;
LEDREGISTER led;
STARTREGISTER start;
PROTECTREGISTER protect;
STATEREGISTER state;
const int g[16] = {1,2,4,8,10,20,40,80,100,100,100,100,100,100,100,100};
TEMDATA TemData[3000];
int curbuf[1000];
int dispcurbuf[30];
char capsymbol=0;
char timesymbol=0;
char capdispsymbol=0;
char ShootMode=0;
void delay()
{
int i;
for(i=0;i<100;i++)
;
return;
}
void readstate()
{
uint temp;
temp=state_cs;
state.value=temp;
}
void setcurcapdot(uint capdot)
{
int temph,templ;
capdot=capdot+10;
outport(B54control,0x30);
if(capdot>=0x100)
{
templ=capdot&0x00ff;
temph=capdot>>8;
}
else
{
templ=capdot;
temph=0x00;
}
outport(B54counter0,templ);
outport(B54counter0,temph);
}
void settimecap()
{
if(ShootMode==0x02)
{
SetCurMode;
}
else
{
if(timesymbol==0)
{SetCurMode;
timesymbol=1;
}
else
{
SetEdgeMode;
timesymbol=0;
}
}
ClrTimeoff;
outport(B54control,0x70);/*计数器1,工作方式0,计数*/
outport(B54counter1,0xff);
outport(B54counter1,0xff);
SetTimeoff;
ShowTimeLed;
}
uint readcaptime()
{
uint temph,templ;
inport(B54counter1,&templ);
inport(B54counter1,&temph);
temph=(temph<<8)|templ;
templ=0xffff-temph;
WinkTimeLed;
return(templ);
}
void setA54(uint fre,uint totaldot,uint predot)
/*采样率,点数,前段点数*/
{
int temph,templ;
/*计数器2,方式2 方波信号输出*/
outport(A54control,0x94);
/* temp=0x14;*/
outport(A54counter2,fre);
/*计数器1,方式0 采集点数计数*/
outport(A54control,0x70);
totaldot=totaldot+2;
if(totaldot>=0x100)
{
templ=totaldot&0x00ff;
temph=totaldot>>8;
}
else
{
templ=totaldot;
temph=0x00;
}
outport(A54counter1,templ);
outport(A54counter1,temph);
/*计数器0,方式0 前段放大采集计数*/
outport(A54control,0x30);
if(predot>=0x100)
{
templ=predot&0x00ff;
temph=predot>>8;
}
else
{
templ=predot;
temph=0x00;
}
outport(A54counter0,templ);
outport(A54counter0,temph);
}
void setshoot(uint mode,uint frequence,uint t3cmp,uint t4cmp)
{
*T3CNT=0X0000; /*赋予初始值 */
*T4CNT=0X0000;
*T3PER=frequence; /*周期数为*/
*T4PER=frequence;
*T3CMP=t3cmp;
*T4CMP=t4cmp;
*COMCONB=0X8200; /*启动使能比较操作*/
protect.protects.shootmode=mode; /*设置发射模式*/
WriteProtect;
}
void setmatch(int match)
{
ResetMarLed;
switch(match)
{
case 0: ShowMar1Led;
break;
case 1: ShowMar2Led;
break;
case 2: ShowMar3Led;
break;
default:
ShowMar1Led;
}
}
void setcurcap(uint capdot,uchar capmode)
{
if(ShootMode==0x02)
{
SetCurMode;
}
else
{
if(capsymbol==0)
{SetCurMode;
capsymbol=1;
}
else
{
SetEdgeMode;
capsymbol=0;
}
}
ClrCurCap;
SetCurReset;
SetCurAset;
ClrCurReset;
delay();
delay();
SetCurReset;
ClrCurAset;
setcurcapdot(capdot);
SetCurCap;
ShowCurcLed;
}
void setcurdisp(uint capdot,uchar capmode)
{
if(ShootMode==0x02)
{
SetCurMode;
}
else
{
if(capdispsymbol==0)
{SetCurMode;
capdispsymbol=1;
}
else
{
SetEdgeMode;
capdispsymbol=0;
}
}
ClrCurCap;
SetCurReset;
SetCurAset;
ClrCurReset;
delay();
delay();
SetCurReset;
ClrCurAset;
setcurcapdot(capdot);
SetCurCap;
ShowCurcLed;
}
void settemcap(uint fre,uint totaldot,uint predot)
{
// SetEdgeMode;
if(ShootMode==0x02)
{
SetCurMode;
}
else
{
if(capsymbol==0)
{SetCurMode;
capsymbol=1;
}
else
{
SetEdgeMode;
capsymbol=0;
}
}
ClrTemCap;
SetTemReset;
SetTemAset;
ClrTemReset;
delay();
delay();
SetTemReset;
ClrTemAset;
setA54(fre,totaldot,predot) ;
SetTemCap;
ShowTemcLed;
}
void readcurcapdata(uint capdot,int *bufadd)
{
uint i,temp;
temp=fifo12_cs;
for(i=0;i<capdot;i++)
{temp=fifo12_cs;
temp=temp&0x0fff;
// if(temp>=0x0800)
// temp=temp|0xf000;
*(bufadd+i)=(int)temp;
}
ClrCurCap;
}
void ReadTemCapData(uint capdot,TEMDATA *TemDataBuf)
{
uint temph,templ,i;
templ=fifo16_cs;
templ=fifo08_cs;
templ=fifo08_cs;
templ=fifo16_cs;
for(i=0;i<capdot;i++)
{
templ=fifo08_cs;
TemDataBuf[i].TemDatal=templ&0x000f;
temph=fifo16_cs;
TemDataBuf[i].TemDatah=temph;
}
ClrTemCap;
}
void TemDataSeparate(TEMDATA TemData,char *sendbuf)
{
int temp;
temp=TemData.TemDatah;
sendbuf[0]=(temp>>10)&0x003f;
sendbuf[1]=(temp>>4)&0x003f;
sendbuf[2]=temp&0x000f;
temp=TemData.TemDatal;
sendbuf[3]=temp&0x000f;
}
void CurDataSeparate(int CurCapData,char *sendbuf)
{
int temp;
temp=CurCapData;
sendbuf[0]=(temp>>6)&0x003f;
sendbuf[1]=temp&0x003f;
}
/*串口调试用*/
void senddatatopc(uint datadot,long *bufadd)
{
uint i;
for(i=0;i<datadot;i++)
{
// senddata(buf,*(bufadd+i));
}
}
void SendTemData(int DataNum,TEMDATA *TemData)
{
char temph,templ,senddata[4];
int i,j;
temph=DataNum>>6;
temph=temph&0x003f;
templ=DataNum&0x003f;
scisend(0x4a); //J //表示是Tem数据
// scisend(0xaa);
scisend(0x4b); //K
scisend(temph);
scisend(templ);
for(i=0;i<DataNum;i++)
{
TemDataSeparate(TemData[i],senddata);
for(j=0;j<4;j++)
scisend(senddata[j]);
}
scisend(0x4c); //L
}
void SendCurData(int DataNum,int *DataBuf)
{
char temph,templ,senddata[2];
int i,j;
temph=DataNum>>6;
temph=temph&0x003f;
templ=DataNum&0x003f;
scisend(0x4d); //M //表示是Cur数据
// scisend(0xaa);
scisend(0x4b); //K
scisend(temph);
scisend(templ);
for(i=0;i<DataNum;i++)
{
CurDataSeparate(DataBuf[i],senddata);
for(j=0;j<2;j++)
scisend(senddata[j]);
}
scisend(0x4c); //L
}
void SendCurDispData(int DataNum,int *DataBuf)
{
char temph,templ,senddata[2];
int i,j;
temph=DataNum>>6;
temph=temph&0x003f;
templ=DataNum&0x003f;
scisend('N'); //N //表示是Cur数据
// scisend(0xaa);
scisend(0x4b); //K
scisend(temph);
scisend(templ);
for(i=0;i<DataNum;i++)
{
CurDataSeparate(DataBuf[i],senddata);
for(j=0;j<2;j++)
scisend(senddata[j]);
}
scisend(0x4c); //L
}
void SendTimeDispData(int DataNum,int DataBuf)
{
char temph,templ,senddata[3];
int temp=DataBuf;
senddata[0]=(temp>>10)&0x003f;
senddata[1]=(temp>>4)&0x003f;
senddata[2]=temp&0x000f;
temph=DataNum>>6;
temph=temph&0x003f;
templ=DataNum&0x003f;
scisend('O'); //N //表示是Cur数据
// scisend(0xaa);
scisend(0x4b); //K
scisend(temph);
scisend(templ);
scisend(senddata[0]);
scisend(senddata[1]);
scisend(senddata[2]);
scisend(0x00);
scisend(0x4c); //L
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -