×
单片机 > 单片机程序设计 > 详情

红外线数据通信实验

发布时间:2020-06-23 发布时间:
|

1. 实验目的:
掌握利用红外线实现数据传输的原理和方法。

2.试验内容:
利用两块实验板,利用红外线实现实验板A向实验板B发送数据。并将发送和接收的数据显示在数码管上。                      
3. 硬件连接:
本实验主要涉及到红外模块与数码管模块,确保红外模块中的发送和接收跳线都连接正确,同时确保数码管模块中的跳线连接正确。

 
4.试验原理图:
硬件原理:
 
利用串口来处理数据,将串口数据利用红外发射管发送,将红外接收管接收到的数据取反后再送回串口处理,处理后还原得到发送的数据。利用串口处理数据,简化了数据的分解,组合,载波等一系列复杂操作,使得红外通信大大简单化。
软件原理:
利用串口来发送和接收数据,大大简化了程序的设计,将数据通过串口发送,在将收到的数据送数码管显示。由于红外传输并不可*,可能丢失数据,在实验的过程中我们可以观测到,可*的数据传输我们暂不考虑,在下一试验中会详细讨论这个问题。
5.实验步骤:
1.连接红外模块中的发送和接收条线。
2. Keil中编写程序,利用红外线发送和接收数据,并将接收到的数据在数码管上显示出来。
3. 将编译好的程序下载到实验箱上验证程序的正确性。
6.思考题: 
1:简析红外探测的优点和缺点及实用范围。
2:怎样利用红外探测原理来设计一个完整的防盗报警器?

下面是程序代码:
/**********************************Copyright (c)********************
;**                            西南科技大学计算机学院
;**                           
;**          
;**    日期:      2005.5.10
;**    描述:      红外数据通信实验,本程序也通过调试,仅供参考。
;**    实验内容:   利用红外线传输数据
;**    适用机型:  AT89S52
************************************************\*************/
#include                      //定义芯片特殊功能寄存器的头文件
#define uchar unsigned char
uchar Send_data[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
                   ,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar count=0x00;      //计时变量
uchar ptr=0x00;        //取数指针
uchar Receive_data;    //接收到的数据
/*******************************************************
 名称:   初始化运行环境   
 功能:  初始化各寄存器与端口状态
         设置串口工作方式,波特率 3138
 参数:  无
 返回值:无
*******************************************************/          
void DeviceInit(void)
{
   TL0=0xC0;         //置定时器处置,设置中断时间为20ms
   TH0=0x63;
   TMOD=0x01;        //设定定时器/计数器0工作方式为1
   IE=0x92;          //允许全局中断,允许定时器/计数器0溢出中断,允许串口接收终端
   T2CON = 0x39;     //设置定时器2的工作模式为波特率发生器方式,
   RCAP2H = 0xFF;    //设置波特率为3138Hz
   RCAP2L = 0x11;
   SCON = 0x50;      //设置串口工作方式为方式1
   TR2 = 0x01;       //启动定时器2*/
   TR0=0x01;         //启动定时器/计数器0
   P1=0xFE;
}
/*******************************************************
 名称:   发送模块   
 功能:  利用串口发送1个字符
 参数:  无
 返回值:无
*******************************************************/
void SendChar(uchar dat)  
{
    SBUF=dat;        //发送数据送发送缓冲区
    while(TI==0);    //等待发送完成
    TI=0;            //置发送完成标志
}
/*******************************************************
 名称:   接收中断模块   
 功能:  将接收到的数据保送数码管显示
 参数:  无
 返回值:无
*******************************************************/
void Receive (void) interrupt 4
{
    if(RI)                   //当接收终端标志设立时,开始读取接收到的数据
    {
        RI = 0;               //清除接收终端标志
		Receive_data=SBUF;    //将接收到的数据送缓冲区保存
        P0=Receive_data;      //显示接收到的数据
    }
}
/*******************************************************
 名称:   定时器中断模块
 功能:  每隔一秒发送一个数据
 参数:  无
 返回值:无
*******************************************************/
void Timer0Over(void) interrupt 1  
{ 
   count++;
   if(count==0x32)        //每隔相同时间发送一个数据
   { 
      if(ptr<=15)
	  {
         SendChar(Send_data[ptr]);
		 ptr++;
	  }
	  else
	  {
	     SendChar(Send_data[0]);
		 ptr=0x01;
	  }
	 count=0x00;     //计时清零
   }
   TL0=0xC0;       //中断时间20ms
   TH0=0x63;
}
/*******************************************************
 名称:   主函数
 功能:  应用程序入口
 参数:  无
 返回值:无
*******************************************************/
void main()                       
{
   DeviceInit();    //初始化定时器0与串口
   while(1);
}
关键字:红外线  数据通信 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈msp430f5529入门(2)----时钟配置.例程分析