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

📄 main.c

📁 AD7843控制
💻 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 + -