📄 main.c
字号:
#include "c8051f320.h"
#include "config.h"
#include "test.h"
#include"communicate.h"
#include<math.h>
//void readP1();
int In_buf;
//int Cmd_key=0;
int Out_buf[8];
//int result[5];
/*
struct pin_store
{
char pin_name[4]; //管脚名
int pin_mux_add[2];对应的多路开关地址;
int pin_state[1]; //该Pin的开路短路状态
float pin_voltage; //上电后的结点压
float Pin_resistance; //断电时的对敌阻抗
}
struct pin_store DDRII[80];
struct pin_store PCI_E[64];
struct pin_store PCI[32];
*/
void delay(unsigned int var)
{
unsigned int source = 6000;
while(var)
{
while(source)
{
source--;
}
var--;
}
}
void readP1() //interrupt 0//从P1端口读数据;
{
EA = 0;
// WDTCN = 0xad; //禁止看门狗
// P1 = 0xff;//端口写1;
while(Busy==0)
{
In_buf = P1;
// Cmd_key = 1;
W_R = 0;
delay(1);
W_R = 1;
// Cmd_key = 0;
}
EA = 1;
}
void writeP1(int length)//将Out_buf中的数据逐字节写给P1口;
{
int i=0;
EA = 0;
while(i < length)
{
W_R = 0;
if (Busy == 0)
{
i++;
while(!Busy){};
}
else
P1=Out_buf[i];
}
delay(1);
W_R = 1;
EA=1;
}
/*
void decode()//对输入指令进行解码
{
}
*/
/*
void encode_int(int var)//需要写往FPGA的数据进行编码,并生成Out_buf[];
{
int i;
for(i=0;i<sizeof(var);i++)
{
Out_buf[i]=var[i];
}
}
*/
/*
void encode_float(float num)
{
int i;
int remain;
int quo;
float tail;
quo = (int)num;
tail = fmod(num,1);
for(i=0;i<7;i++)
{
if(quo<1) //数据为0.xxx
quo=(int)(tail*1000);//将小数变为整数
Out_buf[2] = 0;
Out_buf[3] = 15;
else
{
quo = quo/100;
remain = quo%100;
if(quo==0)
{
quo = remain/10;
remain = remain%10;
if(quo == 0)
{
quo = remain;
if(quo == 0)
{
Out_buf[2]=0;
Out_buf[i]=num mod
}
*/
//-----------------------发送子函数----------------
void send_mux(int bank,int pin)//发送Mux地址
{
Out_buf[0] = 16;
Out_buf[1] = bank;
Out_buf[2] = pin;
writeP1(3);
}
void send_func(int func)//发送测试模式给FPGA
{
Out_buf[0] = 8;
Out_buf[1] = func;
writeP1(2);
}
void send_LED(int bank,int pin)//发送有问题管脚信息给LED,以便显示
{
int led;
led = bank*8+pin;
Out_buf[0] = 4;
Out_buf[1] = led;
writeP1(2);
}
void send_result(int result_unit,int result_num[])//发送管脚的具体结点压,对地阻抗等信息
{
int i;
Out_buf[0] = 2;
Out_buf[1] = result_unit;
if (result_unit<4) //判断当前传送的是否是浮点数
{
for(i=0;i<5;i++) //传送浮点数
{
Out_buf[i+2]=result_num[i];
}
writeP1(7);
}
else
{
Out_buf[2] = result_num[0]; //传送短路测试结果
writeP1(3);
}
}
//-------------------------Wait_mode-----------------
void Wait_mode()
{
delay(1);
}
//-------------------------IDLE_mode-----------------
void IDLE_mode()
{
Out_buf[0] = 0x20;
writeP1(1);
}
//-------------------------断电测试-------------------
void Power_off_PCI()//断电PCI
{
int result[5]={1,7,3,15,4};
send_mux(2,4);
delay(1);
send_func(3);
delay(1);
send_LED(2,4);
delay(1);
send_result(0,result);
delay(3);
IDLE_mode();
}
void Power_off_PCIE()//断电PCIE
{
int result[5]={3,15,3,6,7};
send_mux(1,5);
delay(1);
send_func(2);
delay(1);
send_LED(1,5);
delay(1);
send_result(3,result);
delay(3);
IDLE_mode();
}
void Power_off_DDRII()//断电DDRII
{
int result[5]={8,4,15,3,9};
send_mux(3,2);
delay(1);
send_func(4);
delay(1);
send_LED(3,2);
delay(1);
send_result(1,result);
delay(3);
IDLE_mode();
}
//------------------------上电测试-----------------------
void Power_on_PCI()//上电PCI
{
int result[1]={0};
send_mux(4,1);
delay(1);
send_func(0);
delay(1);
send_LED(4,1);
delay(1);
send_result(5,result);
delay(3);
IDLE_mode();
}
void Power_on_PCIE()//上电PCIE
{
int result[5]={1,15,0,2,5};
send_mux(0,0);
delay(1);
send_func(2);
delay(1);
send_LED(0,0);
delay(1);
send_result(3,result);
delay(3);
IDLE_mode();
}
void Power_on_DDRII()//上电DDRII
{
int result[1]={1};
send_mux(0,1);
delay(1);
send_func(1);
delay(1);
send_LED(0,1);
delay(1);
send_result(4,result);
delay(3);
IDLE_mode();
}
void main(void)
{
unsigned int cmd;
// unsigned int con,ustate;
config(); //MCU寄存器配置
// EA=0;
// readP1();
EA=1;
while(1)
{
readP1();
cmd = In_buf;
switch (cmd)
{
case 1: Power_off_PCI();break;
case 2: Power_off_PCIE();break;
case 4: Power_off_DDRII();break;
case 9: Power_on_PCI();break;
case 10: Power_on_PCIE();break;
case 12: Power_on_DDRII();break;
default: IDLE_mode();break;
}
}
/*con=judge();
ustate=judgeu();
if(ustate==0)
{ testr(con);}//断电侧电阻
else if(ustate==1)
{
testopen(con);
testshort(con);
testu(con);
}
while(1)
{}
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -