找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2285|回复: 0
收起左侧

单片机红外收发实验

[复制链接]
ID:331855 发表于 2018-5-21 08:09 | 显示全部楼层 |阅读模式
红外收发实验
  实验目的
了解红外通信知识,能够应用红外线模块进行无线控制设计。
  实验设备及器材
PC                                   1
DP-51PROC单片机综合仿真实验仪       1
  实验内容
使用单片机的串口发送并接收数据,TXD接到红外发射管,RXD接到红外接收头,实现无线通讯。
  红外收发原理
红外通信是利用950nm近红外波段的红外线作为传递信息的媒体。发送端将二进制信号调制为一系列的脉冲串信号,通过红外发射管发射红外信号。接收端将接收到的光脉冲转换成电信号,再经过放大,滤波等处理后送到解调电路进行解调,还原为二进制数字信号后输出。简而言之,红外通信的实质就是对二进制数字信号进行调制与解调,以便利用红外信道进行传输。
本实验的红外收发示意图如图4-30所示,通过硬件电路完成了对输入数据的调制,将调制的信号转换为光信号通过红外发射管发送数据,由红外接收头接收数据并完成对数据的调解。解调后的数据由单片机进行处理。实验仪B2区的1/512频率输出端输出用于信号调制的约为38kHz的时钟信号。
一般红外接收模块的解调频率为38kHz。当它接收到38kHz左右的红外信号时,将输出低电平,但连续输出低电平的时间是有限制的,也就是说,发送数据低电平宽度是有限制的。注意发射管应与接收头平齐,否则接收头可能接收不到来自发射管的反射光。
图片1.png

  实验原理图
  由于Proteus元件库中无红外发射和接收的仿真元件,所以该实验无法在Proteus软件中仿真调试,可搭试电路直接在实物板调试。红外收发的电路设计原理图4-31所示。

      图片2.png

4-31  红外收发电路设计原理图
图片3.png
          红外接收头模块
  实验步骤
  实验仪D3区红外收发电路原理图如图4-32所示。实验步骤如下:
  1B2X2插入20MHz的晶振,接上B2区的JP20号跳线。
  2)将B2区的1/512频率输出端接到D3区的DCLK(约为38kHz,用于信号调制)。
  3)将A2区的RXDTXD分别连接到D3区的DRECDSEND
  4)用短路线将D3JP9短接(D3区电路供电电源)。
  5)将A2区的P10连接到D1区的LED1
  6)断开A1JP15的跳线232RXD232TXD
  7)下载程序并运行,使用较厚的白纸挡住红外发射管发射信号,使其反射到接收头,观察LED1是否点亮。
图片4.png



  实验参考程序
1.汇编语言参考程序清单
   LED_CON   BIT      P1.0
    COUTE     DATA    40H
    ORG       0000H
    LJMP      MAIN
    ORG       0100H
MAIN:
    MOV      SP,#60H
    MOV      SCON,0X50
    MOV      TMOD,#0x20
    MOV      TH1,0xFA
    SETB      TR1
MAINLOOP:
    MOV      COUTE,#0
    MOV      R7,#50
LOOP1:
MOV     SUBF,#0x5A
JNB       TI,$
CLR       TI
NOP
NOP
JB        R2,LOOP2
SJMP      LOOP3
LOOP2:
    CLR       RI
    MOV      A,SUBF
    CJNE      A,#05AH,LOOP3
    INC       COUTE
LOOP3:
    DJNZ      R7,LOOP1
    MOV      A,COUTE
    SETB      C
    SUBB      A,#30
    JC        CLR_LED
    CLR       LED_CON
    SJMP      DELAY
CLR_LED:
    SETB      LED_CON
DELAY:
    MOV      R6,#200
DELAY1:
    MOV      R5,#200
    DJNZ      R5,$
    DJNZ      R6,DELAY1
    SJMP      MAINLOOP
END     
2.C语言参考程序清单
#include<reg51.h>
#define uint8 unsigned char
#define uint16 unsigned int
sbit LED_CON P1^0;                //定义LED控制口
//************向串口发送一字节数据*************//
// 人口参数:dat要发送的数据
//********************************************//
void UART_SendByte(uint8 dat)
{  SBUF=dat;                          //发送数据
   while(0==TI);                   //等待发送完毕
      TI=0;                        //清零TI标志
}
//************接收一字节串口数据************//
//入口参数:dat接受变量的地址指针
//出口参数:返回0表示没有数据,返回1表示接收到数据
//*****************************************//
uint8 UART_RcvByte(uint8 *dat)
{
   if(0==RI) return(0);       //若没有接收到数据则返回0
      *dat=SUBF;                   //取得接受的数据
   RI=0;                              //清除RI标志
   return(1);
}
//************串口初始化***********************//
//模式为1位起始位,8位数据位,1位停止位,波特率为9600
//晶振为11.0592MHz,使用T1作为波特率发生器
//********************************************//
void UART_Tnit(void)
{
   SCON=0x50;
   TMOD=0x20;
   TH1=0xFA;
   TR1=1;
}
//**************主函数************************//
//初始化串口后不断地发送及接收数据,若接收到所发送的数据则点亮LED
//*******************************************//
int main(void)
{
   uint8 i;
   uint16 j;
   uint8 rcv_dat;
   uint8 count;
UART_Tnit();
   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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表