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

📄 main.c

📁 基于单片机Aduc841的调试程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/*********************************************************************
* 版权所有 (C)2005, 深圳市中兴通讯股份有限公司。
* 
* 文件名称: main.c// 文件名
* 文件标识: // 见配置管理计划书
* 内容摘要: // 简要描述本文件的内容,包括主要模块、函数及其功能的说明
* 其它说明: // 其它内容的说明
* 当前版本: // 输入当前版本
* 作    者: // 输入作者名字及单位
* 完成日期: // 输入完成日期,例:2000年2月25日
* 
* 修改记录1:// 修改历史记录,包括修改日期、修改者及修改内容
* 修改日期:
* 版 本 号:
* 修 改 人:
* 修改内容:
* 修改记录2:…
**********************************************************************/
#include<aduc841.h>
#include "MacroDef.h"

//变量定义
static unsigned char xdata ucRec[4110];
static unsigned char xdata gucATT1;
static unsigned char xdata gucATT2;
static unsigned char xdata gucATT3;
static unsigned char xdata ucAckFlag;//上位机应答标志
static unsigned char xdata ucGrpNum;//保存采集数据组数
static unsigned int xdata guiPLLsfb;
static unsigned int xdata guiDeltaPLL;
static unsigned int xdata guiPLLddb;
static int xdata uiRecData;
static int xdata uiLen;
static bit b7Dcounts;
static bit bFlag;
static bit bStopFlag;

//**********************************************************************
void main(void)
{
    int i;
	   unsigned char ucData[2];
				
    InitUART();
    InitADC();
				InitPower();
				InitAD9510();
				

    bFlag = 0;
				bStopFlag = 0;
				b7Dcounts = 0;
	   ucData[0] = 0;
	   ucData[1] = 0;
    uiRecData = 0;
				ucGrpNum = 1;
    EA = 1;
    ES = 1;

    gucATT1 = 0x05;
    gucATT2 = 0x07;
				gucATT3 = 0x00;
				ucAckFlag = 0x00;
	//   guiPLLsfb = 20850;
	   guiDeltaPLL = 240;
	   guiPLLddb = 22510;

			InitCauCfu();	// 上电初始化CAU&CFU,先保留

//  internal XRAM test
//	 CFG841 = 0x11;
				
   	for (i = 0;i < MAX_REC_LEN;i++)
    {
        ucRec[i] = 0x00;
    }
				uiLen = 0;
//    SendToUART(ucRec,MAX_REC_LEN);
//    LED test
//	   SETPORT(0x1B,0x00,0x00);
//    PortTest();    
//    TestATT_PLL();
//	  	TestFPGA();
    while (1)
    {
        //接收到PC的数据,进行数据处理
	       //while (!bFlag);
								i=100;
								while (i>0)
								{
								    i--;
								}
       // AdcDacTest();
        if (1 == bFlag)
        {
            CmdProc();
        }
//        OutputPLL2326(guiPLLddb);
    }
    while (0)
	   {
	     //  OutputPLL2326(22410);
	       i = 1000;
		      while (i > 0)
		      {
		          i--;
		      }
    }
}

/**************************************************************************
* 函数名称: UART_Int()
* 功能描述: 串口接收中断
* 输入参数: 
* 输出参数: 
* 返 回 值: 
* 其它说明: 
* 修改日期    版本号     修改人	     修改内容
* -----------------------------------------------
* 02/08/01	     V1.0	    XXXX	      XXXX
**************************************************************************/
void UART_Int(void) interrupt 4
{
	   unsigned char ucTmpData;
    if ((1 == RI) && (0 == bFlag) && (uiRecData < 4110))
    {
    	   ucTmpData = SBUF;
    	   //判断接收到的帧头是否正确
    	   if (0 == uiRecData)
    	   {
        	   if (0x7E == ucTmpData)
        	   {
    	       	   ucRec[uiRecData] = ucTmpData;
    	       	   uiRecData++;
    	       }
    	   }
								else
								{
    	   //0x7D、0x7E的处理
    	       if (0x7D == ucTmpData)
    	       {
    	   	       b7Dcounts = 1;
    	       }
								    else
								    {
				    	       if (0 == b7Dcounts)
				    	       {
				                ucRec[uiRecData] = ucTmpData;
				            }
				            else if (1 == b7Dcounts)
				            {
				        	       ucRec[uiRecData] = ucTmpData ^ 0x20;
				        	       b7Dcounts = 0;
				            }
                uiRecData++;
                //判断是否已经接收到了帧尾
                if (0x7E == ucTmpData)
                {
        	           //置接收完成标志
            	       uiLen = uiRecData;
				    							    	bFlag = 1;
            	       uiRecData = 0;
                }
								    }
								}
        RI = 0;
    }
}

/**************************************************************************
* 函数名称: SendToUART(unsigned char *ucRec,unsigned int ucLen)
* 功能描述: 串口发送函数
* 输入参数: 
* 输出参数: 
* 返 回 值: 
* 其它说明: 
* 修改日期    版本号     修改人	     修改内容
* -----------------------------------------------
* 02/08/01	     V1.0	    XXXX	      XXXX
**************************************************************************/
void SendToUART(unsigned char *ucRecData,unsigned int uiLen)
{
    unsigned int i;

    i = 0;
    do
    {
        TI = 0;
        SBUF = ucRecData[i];
        while (0 == TI);
        i++;		
    } while (i < uiLen);
}

/**************************************************************************
* 函数名称: CmdProc()
* 功能描述: 命令数据处理函数
* 输入参数: 
* 输出参数: 
* 返 回 值: 
* 其它说明: 
* 修改日期    版本号     修改人	     修改内容
* -----------------------------------------------
* 02/08/01	     V1.0	    XXXX	      XXXX
**************************************************************************/
void CmdProc(void)
{
		  unsigned char ucData;
	   unsigned int i,uiMod,uiR,REFin,uiA,uiB;
			 unsigned char xdata ucNoiseSelect;
    unsigned char xdata ucRFDSelect;
    unsigned char xdata ucCurrentSelect;
				float PFD,RFout;
				unsigned long ulData;
				
	   bFlag = 0;
				uiLen = ucRec[5] * 256 + ucRec[4] + 9;
				uiLen = uiLen - 9;

	   switch (ucRec[3])
	   {
	   	   case 0x01:
								  //	低通滤波器系数表更新启动 地址:8F00h
										  SETPORT(0x8F,0x00,0x01); 
												Delay(1000);
												SETPORT(0x8F,0x00,0x00);
												printf("滤波器系数表更新完成\n"); 
            break;		
	   	   case 0x02:
            for (i=0;i<uiLen;i++)
            {
              ucRec[i] = ucRec[i + 6];
            }
            WriteTBtable();
							//-----------------------------------------------
												FlashErase(1);
											//	SectorErase(0x08,0x00,0x00);
												FlashWrByte(0x08,0x00,0x00,0x13);
												FlashWrByte(0x0F,0xFF,0xFF,0x18);
												ucData = FlashRdByte(0x80000);
								 	//			FlashErase(2);
												SectorErase(0x10,0xFF,0xFF);
												FlashWrByte(0x10,0xFF,0xFF,0x14);
												printf("ucData1= %2bx\n",ucData);
												ucData = FlashRdByte(0xFFFFF);
												printf("ucData2= %2bx\n",ucData);
										 	ucData = FlashRdByte(0x17FFFF);
												printf("ucData3= %2bx\n",ucData);
							//-----------------------------------------------
	   	       break;
	   	   case 0x03:
								    printf("************************\n");
								    printf("receive data3!\n");
								    printf("************************\n");
												for (i=0;i<uiLen;i++)
            {
              ucRec[i] = ucRec[i + 6];
            }
		          gucATT1 = 31 - ucRec[7];
			         SetATT(gucATT1,ATT_1);
			         gucATT2 =  31 - ucRec[9];
			         SetATT(gucATT2,ATT_2);
												gucATT3= 31 - ucRec[11];
												SetATT(gucATT3,ATT_3);
			         guiPLLsfb = ucRec[1] * 256 + ucRec[0];
					       guiDeltaPLL = ucRec[3] * 256 + ucRec[2];
												ucCurrentSelect = ucRec[4];	//电流设置
												ucRFDSelect = ucRec[5];     //参考倍频器设置
												ucNoiseSelect = ucRec[6];			//噪声和杂散设置
						   				
							  	//		SendToUART(&ucCurrentSelect,1);
						   	//			SendToUART(&ucRFDSelect,1);
				       	uiR = 1;
												if(0x00 == ucRec[13])
												{
												 REFin = 100;//单位:100kHz
												 
												}
												else if(0x01 == ucRec[13])
											     	 {
																   	REFin = 192;//单位:100kHz
											      	}
											 if(0x00 == ucRec[5])
												{
													PFD = REFin;
													uiMod = PFD/2;	 
												}
												else
												{
												 PFD = REFin * 2;//PFD = 10*(1+N)/uiR	其中10M 为参考频率 有倍频时 N = 1,无倍频时 N =0
													uiMod = PFD/2;	
										 	}
								 			RFout = guiPLLsfb;
												SetPLLFrequency( PFD,RFout, uiMod,uiR,SET_PLL2,ucRFDSelect,ucCurrentSelect,ucNoiseSelect);
							 				SetPLLFrequency( PFD,RFout - guiDeltaPLL, uiMod,uiR,SET_PLL1,ucRFDSelect,ucCurrentSelect,ucNoiseSelect);
												break;
	   	   case 0x04:
							   	//主通道参数
            for (i=0;i<uiLen;i++)
            {
              ucRec[i] = ucRec[i + 6];
            }
            WriteCHNtable();
	   	       break;
								case 0x05:
							     //开电源
								    SETPORT(0x1A,0x00,0xFF);
												printf("开电源\n");
												break;
								case 0x06:
						   	  //关电源
												SETPORT(0x1A,0x00,0xF0);	
												printf("关电源\n");
												break;
								case	0x07:
								    //加预失真,将F000H的Bit(6)置为1
										  ucData = READPORT(0xF0,0x00);
												ucData = READPORT(0xF0,0x00);
												ucData = READPORT(0xF0,0x00);
												ucData = ucData | 0x40;
									  	SETPORT(0xF0,0x00,ucData);
											 SETPORT(0xF0,0x00,ucData);
												printf("加上预失真\n");
										  break;
								case	0x08:
							    	//去掉预失真,将F000H的Bit(6)置为0
										  ucData = READPORT(0xF0,0x00);
												ucData = READPORT(0xF0,0x00);
												ucData = ucData & 0xBF;
										 	SETPORT(0xF0,0x00,ucData);
											 SETPORT(0xF0,0x00,ucData);
												printf("去掉预失真\n");
										  break;
								case	0x09:
								    //加削峰,将F000H的Bit(7)置为1
												ucData = READPORT(0xF0,0x00);
												ucData = READPORT(0xF0,0x00);
												ucData = READPORT(0xF0,0x00);
												ucData = ucData | 0x80;
										 	SETPORT(0xF0,0x00,ucData);
												SETPORT(0xF0,0x00,ucData);
												printf("加上削峰\n");
										  break;
								case	0x0A:
								   //去掉削峰,将F000H的Bit(7)置为0
										  ucData = READPORT(0xF0,0x00);
												ucData = READPORT(0xF0,0x00);	
											 ucData = READPORT(0xF0,0x00);
												ucData = ucData & 0x7F;
										 	SETPORT(0xF0,0x00,ucData);
												SETPORT(0xF0,0x00,ucData);
												printf("去掉削峰\n");
										  break;
				 			case 0x0B:	
								   //写上边带表 地址:5000-5FFF
							 	   for (i=0;i<uiLen;i++)
            {
               ucRec[i] = ucRec[i + 6];
            }
												WriteABTable(0x5000);
												printf("写上边带表成功\n");
											 break;
	   	   case 0x0C:
								  //写下边带表 地址:6000-6FFF
									   for (i=0;i<uiLen;i++)
            {
               ucRec[i] = ucRec[i + 6];
            }
												WriteABTable(0x6000);
												printf("写下边带表成功\n");
								    break;
								case	0x0D:
								    //写0表
											 ucData = READPORT(0xF0,0x00);
							     ucData = ucData & 0xF0;
            SETPORT(0xF0,0x00,ucData);
												Delay(1000);
											 for (i=0;i<uiLen;i++)
            {
              ucRec[i] = ucRec[i + 6];
            }
		          WriteABTable(0x4000);
												printf("写0表完成\n");
	   	       break;
								case	0x0E:
								    //写1表
									 	 ucData = READPORT(0xF0,0x00);
							     ucData = ucData & 0xF1;
												ucData = ucData | 0x01;
            SETPORT(0xF0,0x00,ucData);
										 	Delay(1000);
								  	 for (i=0;i<uiLen;i++)
            {
             ucRec[i] = ucRec[i + 6];
            }
		          WriteABTable(0x4000);
												printf("写1表完成\n");
	   	       break;
								case	0x0F:
								    //写2表
							   	 ucData = READPORT(0xF0,0x00);
							     ucData = ucData & 0xF2;
												ucData = ucData | 0x02;
            SETPORT(0xF0,0x00,ucData);
												Delay(1000);
						  			 for (i=0;i<uiLen;i++)
            {
              ucRec[i] = ucRec[i + 6];
            }
	           WriteABTable(0x4000);
												printf("写2表完成\n");
	   	       break;
								case	0x10:
								   //写3表
							   	 ucData = READPORT(0xF0,0x00);
												ucData = ucData & 0xF3;
							     ucData = ucData | 0x03;
            SETPORT(0xF0,0x00,ucData);
												Delay(1000);
										 	for (i=0;i<uiLen;i++)
            {
             ucRec[i] = ucRec[i + 6];
            }
          		WriteABTable(0x4000);
												printf("写3表完成\n");
	   	       break;
								case 0x11:
								    //写4表
											 ucData = READPORT(0xF0,0x00);
												ucData = ucData & 0xF4;
							     ucData = ucData | 0x04;
            SETPORT(0xF0,0x00,ucData);
												Delay(1000);
										 	for (i=0;i<uiLen;i++)
            {
             ucRec[i] = ucRec[i + 6];
            }
 									  WriteABTable(0x4000);
												printf("写4表完成\n");
	   	       break;
								case 0x12:
								    //写5表
												ucData = READPORT(0xF0,0x00);
												ucData = ucData & 0xF5;
							     ucData = ucData | 0x05;
            SETPORT(0xF0,0x00,ucData);
												Delay(1000);
										 	for (i=0;i<uiLen;i++)
            {
             ucRec[i] = ucRec[i + 6];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -