基于51单片机315MHz无线收发模块调试程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/****************************
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"
#define uint unsigned int
#define uchar unsigned char
sbit WXSEND=P1^0;
uchar timedata[8]={0xfe,0x61,0xfc,0xc3,0xf8,0xcd,0xea,0x66};// 450us, 900us,2MS,6ms
/*************************************
11.0592MHZ 下500毫秒延时,还准
***************************************/
void delay500ms(uint i)
{
uint j;
uchar k;
while(i--)
{
for(j=0;j<750;j++)
for(k=0;k<200;k++);
}
}
void time0init()
{
TMOD=0x01;//
}
void sendset(uchar senddata);//发送数据程序
void sendstartbit();//数据发送起始信号2ms高电平和2ms低电平的起始码void sendlowbit();//发送低电平
void sendhighbit();//发送高电平
void main()
{uchar senddata,i;
time0init();//定时器初始化
senddata=0x55;
while(1)
{
for(i=0;i<20;i++)
{
sendset(senddata);//发送数据程序
}
delay500ms(10);
senddata++;
}
}
//发送数据程序
void sendset(uchar senddata)
{uchar i,sendbit;
sendstartbit();//发送开始信号
for(i=0;i<8;i++)
{
sendbit=senddata&0x80;
if(sendbit==0)sendlowbit(); //发送低电平else sendhighbit();//发送高电平senddata=senddata<<1;
}
}
//数据发送起始信号6ms高电平和2ms低电平的起始码void sendstartbit()
{
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;
}
void sendlowbit() //发送低电平
{
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;
}
void sendhighbit()//发送高电平{
WXSEND=1;
TH0=timedata[2];
TL0=timedata[3];
TR0=1;
while(TF0==0);