📄 a test.c
字号:
delay(30000);
// delay(30000);
}
else if(WFlag==handtest5)
{
relay1=1;
// relay2=0;
// relay3=0;
relay4=1;
// relay5=0;
TESTC=1;
delay(30000);
// delay(30000);
}
else if(WFlag==handtest6)
{
// relay1=0;
// relay2=0;
relay3=1;
relay4=1;
// relay5=0;
TESTC=1;
delay(30000);
// delay(30000);
}
else if(WFlag==handtest7)
{
relay1=1;
// relay2=0;
relay3=1;
relay4=1;
// relay5=0;
TESTC=1;
delay(30000);
//delay(30000);
}
else if(WFlag==handtest8)
{
// relay1=0;
// relay2=0;
// relay3=0;
//relay4=0;
relay5=1;
TESTC=1;
delay(30000);
// delay(30000);
}
else if(WFlag==handtest9)
{
// relay1=0;
relay2=1;
// relay3=0;
// relay4=0;
relay5=1;
TESTC=1;
delay(30000);
//delay(30000);
}
delay(12000);
temp=ctestv();
Ctrlu=0;
TESTC=0;
relay1=0;
relay2=0;
relay3=0;
relay4=0;
relay5=0;
delay(3000);
buffer2[4] = (uchar) (temp&0x00ff);
temp >>= 8;
buffer2[5] = (uchar) (temp&0x00ff);
buffer2[6] = buffer2[0]+ buffer2[1]+ buffer2[2]+ buffer2[3]+ buffer2[4]+ buffer2[5]; //和校验
}
//--------------------------------------------------------------------------------------------------
// 函数名称: AutoTestV()自动测量操作函数
// 函数功能: 在系统时钟为11.0592MHZ时
//--------------------------------------------------------------------------------------------------
void AutoTestV()
{
unsigned int num;
uint max;
unsigned int i;
uint Ad_Buffer[7];
uint HighValue;
uint Lowvalue;
uint temp;
HighValue=0x0;
Lowvalue=0x7fff;
// Ctrlu=0; //初始化控制测试端口
// Ctrl2=0;
// relay1=0;
// relay2=0;
// relay3=0;
// relay4=0;
// relay5=0;
// TESTB=0;
// TESTA=0;
// TESTC=0;
// delay(2000);
Ctrl2=1; //接通1mA电流源
delay(3000);
TESTB=1; //接通B点
delay(3000); //延时等待电压建立
for(i=0; i<7; i++)
{
Ad_Buffer[i] = read_ad(); //读AD
delay(30); //延时
}
i = LvBo(&Ad_Buffer[0]);
buffer2[0]=(uchar) (i&0x00ff); //存AD数据低8位
buffer2[1]=(uchar) ((i>>8) & 0x00ff); //存AD数据高8位
TESTB=0;
delay(2000);
TESTA=1; //接通A点
delay(3000); //延时等待电压建立
for(i=0; i<7; i++)
{
Ad_Buffer[i] = read_ad(); //读AD
delay(30);
}
i = LvBo(&Ad_Buffer[0]);
buffer2[2]=(uchar) (i&0x00ff); //存AD数据低8位
buffer2[3]=(uchar) ((i>>8) & 0x00ff); //存AD数据高8位
Ctrl2=0; //断开电流源
TESTA=0; //断开A点
// TESTB=0; //断开B点
delay(2000);
Ctrlu=1; //接通电压源
delay(2000);
relay1=1;
// relay2=0;
// relay3=0;
// relay4=0;
//relay5=0;
TESTC=1;
delay(30000);
delay(6000);//依次打开各干扰源并测试C点电压,如果该次电压值大于上次则将该值放入MAX,并将线号放入NUM
temp=ctestv();
max=temp;
num=0x01;
relay1=0;
// relay2=0;
relay3=1;
// relay4=0;
// relay5=0;
delay(30000);
delay(6000);
temp=ctestv();
if(temp>max)
{
max=temp;
num=0x02;
}
relay1=1;
//relay2=0;
// relay3=1;
// relay4=0;
// relay5=0;
delay(30000);
delay(6000);
temp=ctestv();
if(temp>max)
{
max=temp;
num=0x03;
}
relay1=0;
// relay2=0;
relay3=0;
relay4=1;
//relay5=0;
delay(30000);
delay(6000);
temp=ctestv();
if(temp>max)
{
max=temp;
num=0x04;
}
relay1=1;
// relay2=0;
// relay3=0;
// relay4=1;
//relay5=0;
delay(30000);
delay(6000);
temp=ctestv();
if(temp>max)
{
max=temp;
num=0x05;
}
relay1=0;
// relay2=0;
relay3=1;
//relay4=1;
// relay5=0;
delay(30000);
delay(6000);
temp=ctestv();
if(temp>max)
{
max=temp;
num=0x06;
}
relay1=1;
// relay2=0;
// relay3=1;
// relay4=1;
// relay5=0;
delay(30000);
delay(6000);
temp=ctestv();
if(temp>max)
{
max=temp;
num=0x07;
}
relay1=0;
// relay2=0;
relay3=0;
relay4=0;
relay5=1;
delay(30000);
delay(6000);
temp=ctestv();
if(temp>max)
{
max=temp;
num=0x08;
}
// relay1=0;
relay2=1;
// relay3=0;
// relay4=0;
// relay5=1;
delay(30000);
delay(6000);
temp=ctestv();
if(temp>max)
{
max=temp;
num=0x09;
}
Ctrlu=0;
// relay1=0;
relay2=0;
// relay3=0;
// relay4=0;
relay5=0;
TESTC =0;
delay(3000);
buffer2[4] = (uchar) (max&0x00ff);
max >>= 8;
buffer2[5] = (uchar) (max&0x00ff);
buffer2[6] = num;
buffer2[7] = buffer2[0]+ buffer2[1]+ buffer2[2]+ buffer2[3]+ buffer2[4]+ buffer2[5]+ buffer2[6]; //和校验
}
//--------------------------------------------------------------------------------------------------
// 函数名称: read_ad
// 函数功能: 完成读取AD数据
//--------------------------------------------------------------------------------------------------
uint read_ad(void)
{
uint temp;
RC=0; //RC下降沿到来,启动转换
delay(10);
RC = 1; //RC重新置高电平,等待下次启动
while(BusyBit){;} //等待数据转换完毕,启动INT1中断
ad_dataL=AD_L; //保存AD低8位数据
ad_dataH=AD_H; //保存AD高8位数据
temp = ad_dataH;
temp <<= 8;
temp |= ad_dataL;
delay(10);
return temp;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: delay
// 入口参数: N
// 函数功能:延时子程序,实现(16*N+24)us的延时
// 系统采用11.0592MHz的时钟时,延时满足要求,其它情况需要改动
//--------------------------------------------------------------------------------------------------
void delay(unsigned int N)
{
int i;
for(i=0;i<N;i++);
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: 主函数
// 函数功能: 调度各子函数,完成通信过程
//--------------------------------------------------------------------------------------------------
void main(void)
{
UART_init(); //初始化串口
Ctrlu=0; //初始化控制测试端口
Ctrl2=0;
relay1 =0;
relay2 =0;
relay3 =0;
relay4 =0;
relay5 =0;
TESTB =0;
TESTA =0;
TESTC =0;
delay(500);
CS=0; //AD976使能(低电平有效)
BusyBit = 1; //关闭INT1中断
do
{
if(WFlag==handtest1|WFlag==handtest2|WFlag==handtest3|WFlag==handtest4|WFlag==handtest5|WFlag==handtest6|WFlag==handtest7|WFlag==handtest8|WFlag==handtest9)//选择并接通干扰源
{
HandTestV(); //测量操作;
COM_send(7); //发送测量数据
ES=1; //重开中断
WFlag=0; //清除标志位
}
else if(WFlag==autotest) //选择并接通干扰源
{
AutoTestV(); //测量操作;
COM_send(8); //发送测量数据
ES=1; //重开中断
WFlag=0; //清除标志位
}
else if(WFlag==resent) //判断是否重发标志
{
if(MFlag==0x55)
{
COM_send(8); //发送测量数据
ES=1; //重开中断
WFlag=0; //清除标志位
}
else if(MFlag==0xaa)
{
COM_send(7); //发送测量数据
ES=1; //重开中断
WFlag=0; //清除标志位
}
}
PCON = PCON | 0x01; /* CPU进入休眠状态 */
}
while(1); //循环
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -