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

📄 mds-100-77e58.c

📁 W77E58串口实例
💻 C
📖 第 1 页 / 共 2 页
字号:
/**           串口初始化子程序 其中串口0用定时器2,串口1用定时器1        **/
/** 输   入: 无                                                         **/
/** 输   出: 无                                                         **/

/** 作   者: Hunter                                                     **/
/** 日   期: 2006年03月                                                 **/

/**************************************************************************/
/** 修 改 人:                                                            **/
/** 日   期:                                                            **/
/**************************************************************************/

void Main_Init()
 
 {
     EA=1;     /**允许总中断**/

/**定时器0初始化:定时方式**/
     TMOD=0x21;   /**定时器1工作在模式2,定时器0工作模式1**/

     TH0 =0x4C;
     TL0 =0xF7;    /**baud rate=9600**/

     TR0=1;	    /**启动定时器0**/
     ET0=1;		/**定时器0中断允许**/

/**串口0设置:用定时器1做串口0的波特率发生器**/   
     TL1  =0xFD;   /**baud rate=9600**/
     TH1  =0xFD;
     SCON0=0x50;   /**工作在模式1,允许接收**/
     PCON =0x00;   /**SM0=0 SM1=1 在10位异步收发模式 SMOD=0 溢出速率/32 **/

     ES=1;      /**串口0中断允许**/
     TR1=1;	    /**启动定时器1**/
     
     PS0=1;	    /**串口0中断优先**/

/**串口1设置:用定时器2做串口1的波特率发生器**/    
 
     SCON1 =0x50;   /**工作在模式1,接收允许**/
     T2MOD =0x20;   /**定时器2工作在模式1**/
     T2CON =0x30;   /**用定时器2做串口1的波特率发生器**/
     RCAP2H=0xFF;   /** 设置定时器2**/
     RCAP2L=0xDC;

     ES1=1;         /**串口1中断允许**/
     TR2=1;		    /**启动定时器2**/

  }  



/***********************************************************************/
/** 函数名称: Send_Data_Com0(unsigned char Onebit)                    **/
/** 功能描述: 串口发送一个数组给蓝牙模块Com0口                        **/
/** 输   入:                                                         **/
/** 输   出:无                                                       **/

/** 作   者: Hunter                                                  **/
/** 日   期: 2006年03月                                              **/

/***********************************************************************/
/** 修 改 人:                                                         **/
/** 日   期:                                                         **/
/***********************************************************************/
void Send_UART0(unsigned char data *Send_Buf)
{
 unsigned char SendSum,i;

     ES=0;      /**关闭串口0中断**/
 
  BT_Tran=0;
  SendSum=0;     /**清校验和 **/
  ES=0;      /**关串口0中断**/

  	for(i=0;i<9;i++)  /**发送数组的前9位数据**/
  	   {
  	   	SBUF=Send_Buf[i];
  	   	SendSum+=Send_Buf[i];
  	   	while(TI==0);TI=0;
  	   	}
        SBUF=SendSum;       /**发送此帧数据校验和**/
  	   	while(TI==0);TI=0; /**等待数据发送出去**/
 
     ES=1;      /**串口0中断允许**/

  BT_Tran=1;
}


/***********************************************************************/
/** 函数名称: Send_Data_Com1(unsigned char Onebit)                    **/
/** 功能描述: 串口发送一个数组给FC机Com1口                            **/
/** 输   入:                                                         **/
/** 输   出:无                                                       **/

/** 作   者: Hunter                                                  **/
/** 日   期: 2006年03月                                              **/

/***********************************************************************/
/** 修 改 人:                                                         **/
/** 日   期:                                                         **/
/***********************************************************************/
void Send_UART1(unsigned char data *Send_Buf)
{
 unsigned char SendSum,i;

  FC_Tran=0;
  SendSum=0;     /**清校验和 **/

     ES1=0;      /**关闭串口1中断*/
 
  	for(i=0;i<9;i++)   /**发送数组的前9位数据**/
  	   {
  	   	SBUF1=Send_Buf[i];
  	   	SendSum+=Send_Buf[i];
  	   	while(TI1==0);TI1=0;
  	   	}
        
		SBUF1=SendSum;       /**发送此帧数据校验和**/
  	   	while(TI1==0);TI1=0;     /**等待数据发送出去**/

     ES1=1;      /**串口1中断允许**/

  FC_Tran=1;

}

/***********************************************************************/
/** 函数名称: SP0_ISR()                                               **/
/** 功能描述: 串口0中断接收子程序,接受来自蓝牙模块的数据             **/
/** 输   入:                                                         **/
/** 输   出:                                                         **/

/** 作   者: Hunter                                                  **/
/** 日   期: 2006年03月                                              **/

/***********************************************************************/
/** 修 改 人:                                                         **/
/** 日   期:                                                         **/
/***********************************************************************/
void SP0_ISR() interrupt 4  using 2
{
unsigned char ReceSum,Recv_Buf,i;
  ReceSum=0;
  Recv_Buf=0;
  BT_Rece=0;

  if(SBUF==0xFF) /**判断缓冲区数区是否为起始位**/
     {
     for(i=0;i<9;i++)        /**如果接收的为起始位,则连续接收后面的8位数据**/
       {
        while(RI==0);RI=0;
        Rece_Data_BT[i]= SBUF;   /**将接收缓冲区数据存入接收数据存储数组**/
        ReceSum+=Rece_Data_BT[i]; /**计算接收数据校验和**/
        }
        while(RI==0);RI=0;
        Recv_Buf = SBUF;
           
/**判断如果接收数据为帧测信号则发送应答信息**/
     if(ReceSum == Recv_Buf)
        { RBT_Flag = 0xFA; }
      else
    	{ RBT_Flag = 0xFB; }

	 }

	 else{RBT_Flag = 0;}
	     
  BT_Rece=1;

	}	  

/***********************************************************************/
/** 函数名称: Intrup_Serial_Com1()                                    **/
/** 功能描述: 串口1中断接收子程序,接收来自桩考监控机数据             **/
/** 输   入:                                                         **/
/** 输   出:                                                         **/

/** 作   者: Hunter                                                  **/
/** 日   期: 2006年03月                                              **/

/***********************************************************************/
/** 修 改 人:                                                         **/
/** 日   期:                                                         **/
/***********************************************************************/
void SP1_ISR()interrupt 7  using 3
{
  unsigned char ReceSum,Recv_Buf,Answ_Flag,i;  

  FC_Rece=0;

  ReceSum=0;
  Recv_Buf=0;

  if(SBUF1 == 0xFF) /**判断缓冲区数区是否为起始位**/
     {
      for(i=0;i<9;i++)        /**如果接收的为起始位,则连续接收后面的8位数据**/
        {
        while(RI1==0);RI1=0;
        Rece_Data_FC[i]= SBUF1;   /**将接收缓冲区数据存入接收数据存储数组**/
        ReceSum+=Rece_Data_FC[i]; /**计算接收数据校验和**/
         }
        while(RI1==0);RI1=0;
        Recv_Buf=SBUF1;

		Answ_Flag=Rece_Data_FC[3];

/**判断如果接收数据为帧测信号则发送应答信息**/
       if (ReceSum==Recv_Buf)
		 {
		 if(Answ_Flag==0xFA)
           {RFC_Flag=0xFA;}
		 else if(Answ_Flag==0xFB)
		   {RFC_Flag=0xFB;}
	    }
 	    else{RFC_Flag=0x00;}	
      }
	else{RFC_Flag=0x00;} 
  FC_Rece=1;

}	

/***********************************************************************/
/** 函数名称: TR0_ISR                                                 **/
/** 功能描述: 定时器0中断子程序。                                     **/
/** 输   入:                                                         **/
/** 输   出:                                                         **/

/** 作   者: Hunter                                                  **/
/** 日   期: 2006年03月                                              **/

/***********************************************************************/
/** 修 改 人:                                                         **/
/** 日   期:                                                         **/
/***********************************************************************/
void TR0_ISR() interrupt 1 using 1
{

 TH0=0x4C;
 TL0=0xF7;   /**定时器初值**/

if(N==50)
	{
	N=1;
 /**判断右脚端口状态是否有变化**/
 if(R_State==0&&Right_Sig==1)
   {RG_Flag=1;}
 else
  {RG_Flag=0;}
 
 /**判断左脚端口状态是否有变化**/
 if(L_State==0&&Left_Sig==1)
   {LF_Flag=1;}
 else
   {LF_Flag=0;}
/**判断熄火端口状态是否有变化**/ 
 if(S_State==0&&Shart_Sig==1)
   {SH_Flag=1;}
 else
  {SH_Flag=0;}

 /**保存本次的端口状态**/
 R_State=Right_Sig;
 L_State=Left_Sig;
 S_State=Shart_Sig;
  }
else 
	N=N+1;  
 }

/***********************************************************************/
/** 函数名称:                                                         **/
/** 功能描述: 看门狗设置与喂狗子程序                                  **/
/** 输   入:                                                         **/
/** 输   出:                                                         **/
 
/** 作   者: Hunter                                                  **/
/** 日   期: 2006年03月                                              **/

/***********************************************************************/
/** 修 改 人:                                                         **/
/** 日   期:                                                         **/
/***********************************************************************/

/*看门狗设置子程序*/
void WDT_Init()
{
   CKCON |= 0xc0;                     
   TA = 0xaa;                
   TA = 0x55;
   WDCON |= 3;                 
 
}

/*喂狗子程序*/
void WDT_Clr()
{
 
     TA = 0xaa;
     TA = 0x55;
     WDCON &= 0xfe; 
 
     TA = 0xaa;
     TA = 0x55;
     WDCON |= 1;
  
}

⌨️ 快捷键说明

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