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

📄 dp_51pro_irda.c

📁 一个不错的串口控制红外接收发送的
💻 C
字号:
/***************************************************************
* 文件名:DP_51PRO_IRDA.C
* 功能:DP_51PRO实验仪红外收发实验。使用串口发送数据经调制后从红外管输出,
*      并通过红外接收模块把接收到的数据返回串口接收端,通过判断接收到的数
*      据来控制LED灯点亮。
***************************************************************/
#include  <Reg52.H>

#define  uint8      unsigned char
#define  uint16     unsigned int

sbit     LED_CON    = P1^0;                     // 定义LED控制口

/***************************************************************
* 名称:UART_SendByte()
* 功能:向串口发送一字节数据。
* 入口参数:dat         要发送的数据
* 出口参数:无
***************************************************************/
void  UART_SendByte(uint8 dat)
{  SBUF = dat;                                  // 发送数据
   while(0==TI);                                // 等待发送完毕
   TI = 0;                                      // 清零TI标志
}


/***************************************************************
* 名称:UART_RcvByte()
* 功能:接收一字节串口数据。
* 入口参数:dat         接收变量的地址指针
* 出口参数:返回0表示没有数据,返回1表示接收到数据
***************************************************************/
uint8  UART_RcvByte(uint8 *dat)
{  if(0==RI) return(0);                         // 若没有接收到数据则返回0

   *dat = SBUF;                                 // 取得接收的数据
   RI = 0;                                      // 清除RI标志
   return(1);
}


/***************************************************************
* 名称:UART_Init()
* 功能:串口初始化。模式为1位起始位,8位数据位,1位停止位,波特率为9600。
* 入口参数:无
* 出口参数:无
* 说明:晶振为11.0592MHz,使用T1作为波特率发生器。
***************************************************************/
void  UART_Init(void)
{  SCON = 0x50;
   TMOD = 0x20;
   TH1 = 0xFa;
   TR1 = 1;
}


/***************************************************************
* 名称:main()
* 功能:主函数,初始化串口后不断的发送及接收数据,若接收到所发送的数据则
*      点亮LED。
***************************************************************/
int  main(void)
{  uint8  i;
   uint16 j;
   uint8  rcv_dat;
   uint8  count;

   UART_Init();
   while(1)
   {  count = 0;                                // 计数变量清零
      for(i=0; i<50; i++)                       // 发送及接收50个数据
      {  UART_SendByte(0x5A);
         if( UART_RcvByte(&rcv_dat)!=0 )
         {  if(0x5A==rcv_dat) count++;          // 若接收的数据为0x5A,则计数变量加1
         }
      }
      if(count>30) LED_CON = 0;                 // 若接收到0x5A的个数大于40个时,点亮LED
        else  LED_CON = 1;                      // 否则熄灭LED

      for(j=0; j<500; j++);
   }

   return(0);
}

⌨️ 快捷键说明

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