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

📄 485.c

📁 飞利浦2114处理器
💻 C
📖 第 1 页 / 共 2 页
字号:
            cRcv_Data1[0]=0x00;
             
            iRcv_Nmb1=6;
            cRcv_Stat1=1;       //是帧头
            //UART0_SendStr((uint8 *)"接收帧头正确!");          
            //g_iTimer1=0;		//启动接收定时器
          } 
          else              //
          {
			last_last_data=last_data;          
          	last_data=new_data;
            cRcv_Stat1=0;
          } 

         
        break;
        
     case 1:
      	if( 0x04==(U1IIR&0x0F) );
        cRcv_Data1[iRcv_Nmb1]=U1RBR;   //帧数据
        if(iRcv_Nmb1==6)
        	exchange_data2.ii[1]=cRcv_Data1[iRcv_Nmb1];
        if(iRcv_Nmb1==7)
        	exchange_data2.ii[0]=cRcv_Data1[iRcv_Nmb1];//计算有效数据长度,以此作为帧判断的第一步
        //UART0_SendStr((uint8 *)"接收帧头正确!");
        if(iRcv_Nmb1==exchange_data2.i+11) //判长度---1
        {
          	iRcv_Nmb_Max=iRcv_Nmb1;        //接收完一帧
          	cRcv_Stat1=0;                   //准备下一帧的接收
          	iRcv_Nmb1=0;  
 
			if((cRcv_Data1[iRcv_Nmb_Max]==0x0a)&&(cRcv_Data1[iRcv_Nmb_Max-1]==0x0d))//判结束字---2
			{

                for(i=0;i<=iRcv_Nmb_Max;i++)   //接收数据回送,以便调试
          		{
					//URRcvData.cData[i]=cRcv_Data1[i];		//将接收到得数据赋值给接收缓冲区结构体 URRcvData.cData[i] 便于解析
					//UART0_SendByte(cRcv_Data1[i]);
				}	
                 //UART0_SendStr((uint8 *)"接收数据帧正确!"); 
                 cData485_Valid1=0x55;        //建立已接收485标志
                 cTData[0]=cRcv_Data1[iRcv_Nmb_Max-6];   //温度数据
                 cTData[1]=cRcv_Data1[iRcv_Nmb_Max-5];   
                 cHData=cRcv_Data1[iRcv_Nmb_Max-4];      //湿度数据        
		
			}
			else
			{
				cRcv_Stat1=0;
				//UART0_SendStr((uint8 *)"数据帧不对"); 
			}
			
          	
    
        }
        else 
        {
          if(iRcv_Nmb1>500)
          {
            cRcv_Stat1=0;
			//UART0_SendStr((uint8 *)"缓冲区溢出,是乱帧\r\n");         
		  }  
          iRcv_Nmb1++;   //帧数据
        }
        break;
        
    default:
        cRcv_Stat1=0;
        break;
                                
    }   
   VICVectAddr = 0x00;              	// 中断处理结束
} 
/****************************************************************************
* 名称:UART1_Ini()
* 功能:初始化串口1。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  UART1_Ini(void)
{  uint16 Fdiv;

   U1LCR = 0x83;		            // DLAB = 1,可设置波特率
   Fdiv = (Fpclk / 16) / UART_BPS;  // 设置波特率
   U1DLM = Fdiv / 256;							
   U1DLL = Fdiv % 256;						
   U1LCR = 0x03;
   
   
   U1FCR = 0x01;                        // 使能FIFO,并设置触发点为1字节 0000 0001   
   U1IER = 0x01;                        // 允许RBR中断,即接收中断
   /* 设置中断允许 */
   VICIntSelect = 0x00000000;           // 设置所有通道为IRQ中断
   VICVectCntl7 = VICVectCntl7|0x27;                 // UART1中断通道分配到IRQ slot 0,即优先级最高 0010 0111
   VICVectAddr7 = (int)IRQ_UART1;       // 设置UART1向量地址
   VICIntEnable = VICIntEnable|0x00000080;           // 使能UART1中断 1000 0000  参考P63页中断源表
}
/****************************************************************************
* 名称:UART1_SendByte()
* 功能:向串口发送字节数据,并等待发送完毕。
* 入口参数:data		要发送的数据
* 出口参数:无
****************************************************************************/
void  UART1_SendByte(uint8 data)
{  U1THR = data;				    // 发送数据
   IO0SET = DIRECT1;				// P0.10 = 1
   while( (U1LSR&0x40)==0 );	    // 等待数据发送完毕
   IO0CLR = DIRECT1;				// P0.10 = 0
}
/****************************************************************************
* 名称:UART1_SendStr()
* 功能:向串口发送一字符串
* 入口参数:srt		要发送的字符串的指针
* 出口参数:无
****************************************************************************/
void  UART1_SendStr(uint8 const *str)
{  while(1)
   {  if( *str == '\0' ) break;
      UART1_SendByte(*str++);	    // 发送数据
   }
}
/****************************************************************************
* 名称:ISendBuf()
* 功能:将缓冲区的数据发送回主机(使用FIFO),并等待发送完毕。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  ISendBuf1(void)
{  uint8  i;
  
   for(i=0; i<1; i++) UART1_SendByte(rcv_buf[i]);
   while( (U1LSR&0x20)==0 );         	// 等待数据发送
   rcv_byte_num=0;
}  

 /****************************************************************************
* 名称:void UART1_SendData(uint32 xxx)
* 功能:串口发送数据
* 入口参数: xxx:需要在计算机串口上显示的数据
* 出口参数:无
****************************************************************************/
void UART1_SendData(uint32 xxx)
{
   uint8 a,b,c,d,e;
   if(xxx>=100000)
   {
   UART1_SendByte(0x20);
   UART1_SendStr((uint8 *)"NC");
//   UART1_SendByte(0x20);
   }
   else if(xxx>=10000&xxx<100000)
   {
   a=xxx/10000;
   b=(xxx-a*10000)/1000;
   c=(xxx-a*10000-b*1000)/100;
   d=(xxx-a*10000-b*1000-c*100)/10;
   e=(xxx-a*10000-b*1000-c*100-d*10);
   UART1_SendByte(a+0x30);
   UART1_SendByte(b+0x30);
   UART1_SendByte(c+0x30);
   UART1_SendByte(d+0x30);
   UART1_SendByte(e+0x30);
//   UART1_SendByte(0x20);   
   }
   else if(xxx>=1000&xxx<10000)
   {
   a=xxx/1000;
   b=(xxx-a*1000)/100;
   c=(xxx-a*1000-b*100)/10;
   d=(xxx-a*1000-b*100-c*10);
   UART1_SendByte(a+0x30);
   UART1_SendByte(b+0x30);
   UART1_SendByte(c+0x30);
   UART1_SendByte(d+0x30);
//   UART1_SendByte(0x20);   
   }   
   else if(xxx>=100&xxx<1000)
   {
   a=xxx/100;
   b=(xxx-a*100)/10;
   c=(xxx-a*100-b*10);
   UART1_SendByte(a+0x30);
   UART1_SendByte(b+0x30);
   UART1_SendByte(c+0x30);   
//   UART1_SendByte(0x20);   
   }   
   else if(xxx>=10&xxx<100)
   {
   a=xxx/10;
   b=(xxx-a*10);
   UART1_SendByte(a+0x30);
   UART1_SendByte(b+0x30);
//   UART1_SendByte(0x20);   
   }
   else if(xxx>0&xxx<10)
   {
   a=xxx;
   UART1_SendByte(a+0x30);
//   UART1_SendByte(0x20);   
   }       
}

/****************************************************************************
* 名称:void UART0_SendData(uint32 xxx)
* 功能:串口发送数据
* 入口参数: xxx:需要在计算机串口上显示的数据
* 出口参数:无
****************************************************************************/
void UART0_SendData(uint32 xxx)
{
   uint8 a,b,c,d,e;
   if(xxx>=100000)
   {
   UART0_SendByte(0x20);
   UART0_SendStr((uint8 *)"NC");
//   UART1_SendByte(0x20);
   }
   else if(xxx>=10000&xxx<100000)
   {
   a=xxx/10000;
   b=(xxx-a*10000)/1000;
   c=(xxx-a*10000-b*1000)/100;
   d=(xxx-a*10000-b*1000-c*100)/10;
   e=(xxx-a*10000-b*1000-c*100-d*10);
   UART0_SendByte(a+0x30);
   UART0_SendByte(b+0x30);
   UART0_SendByte(c+0x30);
   UART0_SendByte(d+0x30);
   UART0_SendByte(e+0x30);
//   UART1_SendByte(0x20);   
   }
   else if(xxx>=1000&xxx<10000)
   {
   a=xxx/1000;
   b=(xxx-a*1000)/100;
   c=(xxx-a*1000-b*100)/10;
   d=(xxx-a*1000-b*100-c*10);
   UART0_SendByte(a+0x30);
   UART0_SendByte(b+0x30);
   UART0_SendByte(c+0x30);
   UART0_SendByte(d+0x30);
//   UART1_SendByte(0x20);   
   }   
   else if(xxx>=100&xxx<1000)
   {
   a=xxx/100;
   b=(xxx-a*100)/10;
   c=(xxx-a*100-b*10);
   UART0_SendByte(a+0x30);
   UART0_SendByte(b+0x30);
   UART0_SendByte(c+0x30);   
//   UART1_SendByte(0x20);   
   }   
   else if(xxx>=10&xxx<100)
   {
   a=xxx/10;
   b=(xxx-a*10);
   UART0_SendByte(a+0x30);
   UART0_SendByte(b+0x30);
//   UART1_SendByte(0x20);   
   }
   else if(xxx>0&xxx<10)
   {
   a=xxx;
   UART0_SendByte(a+0x30);
//   UART1_SendByte(0x20);   
   }       
}
/****************************串口1end****************************************/
/****************************************************************************
* 名称:main()
* 功能:初始化串口,并等待接收到串口数据。
* 说明:在STARTUP.S文件中使能IRQ中断(清零CPSR中的I位)。
****************************************************************************/

/*
int  main(void)
{  
   int j;
   PINSEL0 = 0x00050005;		     // 设置I/O连接到UART1  P0.8 TXD  P0.9 RXD
   PINSEL1 = 0x00000000;
   PINSEL2 = PINSEL2 & 0xFFFFFFF7;   // 设置P1口为GPIO   
   IO1DIR = DIRECT0;                  // 置P1.16为输出口,RS485方向控制
   IO1CLR = DIRECT0;				     // P1.16 = 0
   IO0DIR = DIRECT1;                  // 置P0.10为输出口,RS485方向控制
   IO0CLR = DIRECT1;				     // P0.10 = 0
   rcv_new=0;
   UART0_Ini();
   UART1_Ini();
   
   for(j=0;j<3;j++)	
   {  UART0_SendStr(SEND_STRING);
      DelayNS(10);
   }
   for(j=0;j<3;j++)	
   {  UART1_SendStr(SEND_STRING);
      DelayNS(10);
   }   

   rcv_byte_num=0;

   
   while(!rcv_new);
   UART0_SendStr((uint8 *)"开始进行下一项测试\r\n");
   while(1)                             // 等待中断
   { if(1==rcv_new)
     {  ISendBuf0();                     // 将接收到的数据发送回主机
        ISendBuf1();                     // 将接收到的数据发送回主机
        rcv_new = 0;  
     }
   }
   return(0);
}
*/

⌨️ 快捷键说明

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