基于51单片机315MHz无线收发模块调试程序.docx

上传人:b****6 文档编号:4685506 上传时间:2022-12-07 格式:DOCX 页数:8 大小:34.11KB
下载 相关 举报
基于51单片机315MHz无线收发模块调试程序.docx_第1页
第1页 / 共8页
基于51单片机315MHz无线收发模块调试程序.docx_第2页
第2页 / 共8页
基于51单片机315MHz无线收发模块调试程序.docx_第3页
第3页 / 共8页
基于51单片机315MHz无线收发模块调试程序.docx_第4页
第4页 / 共8页
基于51单片机315MHz无线收发模块调试程序.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

基于51单片机315MHz无线收发模块调试程序.docx

《基于51单片机315MHz无线收发模块调试程序.docx》由会员分享,可在线阅读,更多相关《基于51单片机315MHz无线收发模块调试程序.docx(8页珍藏版)》请在冰豆网上搜索。

基于51单片机315MHz无线收发模块调试程序.docx

基于51单片机315MHz无线收发模块调试程序

/****************************

 315Mhz无线通信程序

 原理:

 第一块单片机p1.0口输出脉冲方波提供给无线发射模块,

 无线发射模块将信号以电磁波的形式传到无线接收模块。

 无线接收模块会根据这个电磁波还原出脉冲方波提供给第二块单片机,

 第二块单片机进行进一步的解算处理。

 通信协议:

 根据这个原理和315模块的特性。

 我决定以900us高电平和2000us底电平表示1;

 450us高电平和2000us低电平表示0。

 而8个1或0组成一个字节。

为了防止误码,

 所以在每个字节的前面加一个2ms高电平和2ms低电平的起始码。

每个5S发送一个字符,一个字符发送20遍

*******************************/

/****************************

 315Mhz无线通信程序

 发送程序11.0592M晶振1机器周期=1.0851us

 定时器产生2MS定时

 TH0=0XF8;TL0=0XCD;

 900us定时

 TH0=0XFC;TL0=0XC3;

 450us定时

 TH0=0XFE;TL0=0X61;

*******************************/

#include

#include"intrins.h"

#defineuintunsignedint

#defineucharunsignedchar

sbitWXSEND=P1^0;

uchartimedata[8]={0xfe,0x61,0xfc,0xc3,0xf8,0xcd,0xea,0x66};//450us,900us,2MS,6ms

/*************************************

11.0592MHZ  下500毫秒延时,还准

***************************************/

voiddelay500ms(uinti)

{

 uintj;

 uchark;

 while(i--)

 {

 for(j=0;j<750;j++)

  for(k=0;k<200;k++);

 }

}

voidtime0init()

{

 TMOD=0x01;//

}

voidsendset(ucharsenddata);//发送数据程序

voidsendstartbit();//数据发送起始信号2ms高电平和2ms低电平的起始码

voidsendlowbit();//发送低电平

voidsendhighbit();//发送高电平

voidmain()

{ucharsenddata,i;

 time0init();//定时器初始化

 senddata=0x55;

 while

(1)

 { 

 for(i=0;i<20;i++)

 {

  sendset(senddata);//发送数据程序

 }

 delay500ms(10);

 senddata++;

 }

}

//发送数据程序

voidsendset(ucharsenddata)

{uchari,sendbit;

 sendstartbit();//发送开始信号

 for(i=0;i<8;i++)

 {

 sendbit=senddata&0x80;

 if(sendbit==0)sendlowbit();//发送低电平

 elsesendhighbit();//发送高电平

 senddata=senddata<<1;

 }

 

}

//数据发送起始信号6ms高电平和2ms低电平的起始码

voidsendstartbit()

{

 WXSEND=1;

 TH0=timedata[4];

 TL0=timedata[5];

 TR0=1;

 while(TF0==0);

 TR0=0;

 TF0=0;

 TH0=timedata[4];

 TL0=timedata[5];

 WXSEND=0;

 TR0=1;

 while(TF0==0);

 TR0=0;

 TF0=0;

}

voidsendlowbit()//发送低电平

{

 WXSEND=1;

 TH0=timedata[0];

 TL0=timedata[1];

 TR0=1;

 while(TF0==0);

 TR0=0;

 TF0=0;

 TH0=timedata[4];

 TL0=timedata[5];

 WXSEND=0;

 TR0=1;

 while(TF0==0);

 TR0=0;

 TF0=0;

}

voidsendhighbit()//发送高电平

{

 WXSEND=1;

 TH0=timedata[2];

 TL0=timedata[3];

 TR0=1;

 while(TF0==0);

 TR0=0;

 TF0=0;

 TH0=timedata[4];

 TL0=timedata[5];

 WXSEND=0;

 TR0=1;

 while(TF0==0);

 TR0=0;

 TF0=0;

}

/****************************

 315Mhz无线通信程序

 接收程序11.0592M晶振1机器周期=1.0851us

用中断0边沿触发中断,开启接收程序

由于接收模块平时大部分时间是低电平,有信号时是高电平,而中断0是负边沿触发,所以,

硬件电路中接收模块的信号输出端经过非门后接到单片机P3.2

接收到数据,用串口传到上位机的串口调试软件显示

*******************************/

#include

#include "intrins.h"

#define uint unsigned int

#define uchar unsigned char

sbit WXrecep=P3^2;

//uchar code timedata[6]={0xfe,0x61,0xfc,0xc3,0xf8,0xcd};// 450us, 900us,2MS

uchar wxrecepda;

void time0init()

{

 TMOD=0x21;//定时器0

 TH0=0;

 TL0=0;

 //TMOD=0x20;/*TMOD:

timer1,mode2,8-bitreload*/

 TH1=0xFD;/*TH111.0592MHz*/

 TL1=0XFD;

 EA=1;

 EX0=1;

 ET0=1;

 IE0=0;

}

void uartinit()

{

 SCON=0x50;/*SCON:

模式1,8-bitUART,使能接收*/

 TR1=1;/*TR1:

timer1run*/

}

void receivewx();//接收子程序

void main()

{

 time0init();//定时器初始化

 uartinit();

 while

(1);

}

void receivewx()//接收子程序

{uint i;

 uchar j,recedata;

  while(WXrecep==0);

  TR0=0;

  i=TH0*256+TL0;

  TH0=0;

  TL0=0;

  if((i>=1800)&&(i<=1890))

  {recedata=0;

   for(j=0;j<8;j++)

   {

    while(WXrecep==1);

  TR0=1;

  while(WXrecep==0);

  TR0=0;

    i=TH0*256+TL0;

  if((i>=390)&&(i<=450)) recedata=recedata&0xfe;

  else if((i>=800)&&(i<=860))recedata=recedata|0x01;

   recedata=recedata<<1;

    TH0=0;

    TL0=0;

   }

   wxrecepda=recedata>>1;

   SBUF=wxrecepda;

   while(TI==0);

   TI=0;

  }

}

void wxrecint() interrupt 0

{

  TH0=0;

  TL0=0;

  TR0=1;

  EX0=0;

  receivewx();

  EX0=1;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1