基于51单片机315MHz无线收发模块调试程序
基于 51 单片机的无线数据收发系统设计
基于 51 单片机的无线数据收发系统设计摘要:系统使用 51 单片机通过NRF24L01 模块远程传输数据,接收端通过NRF24L01 模块接收无线数据。
处理后由液晶进行数据显示,可根据需要设置声音提示。
系统接收与发送端模块均单片机、无线发送模块/ 接收、显示、声音提示模块。
关键词:51 单片机;NRF24L01;液晶显示;无线通讯1硬件设计1.1系统组成该系统将数据经过控制器由无线发送模块进行远距离发送,再通过接收端进行无线数据接收。
接收的数据经控制器处理后由液晶显示器显示,并根据需要可以实现一定的声音提示。
1.2无线收发模块本设计使用无线通讯技术实现数据的传送,能够实现此功能的硬件电路模块总类较多。
为符合设计需求,采用以NRF24L01 为核心的无线通讯模块。
该方案可以使系统具有低成本,低功耗,体积小等特点。
NRF24L01 无线模块出至 NORDIC 公司。
其工作频段在 2.4G— 5GHz,该模块正常工作电压为 1.9V—3.6V,内部具有 FSK 调制功能,集成了 NORDIC 公司自创的增强短脉冲协议。
该模块最多可实现 1 对 6 的数据发送与接收。
其每秒最高可传输两兆比特,能够实现地址检验及循环冗余检验。
若使用 SPI 接口,其每秒最高可传输八兆比特,多达 128 个可选工作频道,将该芯片的最小系统集成后,构成NRF24L01 无线通信模块。
1、引脚功能此模块有 6 个数据传输和控制引脚,采用 SPI 传输方式,实现全双工串口通讯,其中 CE脚为芯片模式控制线,工作情况下,CE 端协配合寄存器来决定模块的工作状态。
当4 脚电平为低时,模块开始工作。
数据写入的控制时钟由第 5 脚输入,数据写入与输出分别为 6、7 脚,中断信号放在了第 8 脚。
2、电器特性NRF24L01 采用全球广泛使用的 2.4Ghz 频率,传输速率可达 2Mbps,一次数据传输宽度可达 32 字节,其传输距离空旷地带可达2000M 此模块增强版空旷地带传输距离可达 5000M—6000M, 因内部具有 6 个数据通道,可实现 1 对 6 数据发送,还可实现 6 对 1 数据接收,其工作电压为 1.9V-3.6V,当没有数据传输时可进入低功耗模式运行,微控制器对其控制时可对数据控制引脚输入 5V 电平信号,可实现 GFSK 调制。
315M发射模块315MHZ超再生接收模块
点击查看大图315M发射模块型号:货号:10326简介:发射模块的工作频率为315M,采用声表谐振器SAW稳频,频率稳定度极高。
价格:8.00元购买:详细说明:主要技术指标:1。
通讯方式:调幅AM2。
工作频率:315MHZ (可以提供433MHZ,购货时请特别注明)3。
频率稳定度:±75KHZ4。
发射功率:≤500MW5。
静态电流:≤0.1UA6。
发射电流:3~50MA7。
工作电压:DC 3~12V无线数据传输广泛地运用在车辆监控、遥控、遥测、小型无线网络、无线抄表、门禁系统、小区传呼、工业数据采集系统、无线标签、身份识别、非接触RF智能卡、小型无线数据终端、安全防火系统、无线遥控系统、生物信号采集、水文气象监控、机器人控制、无线232数据通信、无线485/422数据通信、数字音频、数字图像传输等领域中。
DF数据发射模块的工作频率为315M,采用声表谐振器SAW稳频,频率稳定度极高,当环境温度在-25~+85度之间变化时,频飘仅为3ppm/度。
特别适合多发一收无线遥控及数据传输系统。
声表谐振器的频率稳定度仅次于晶体,而一般的LC振荡器频率稳定度及一致性较差,即使采用高品质微调电容,温差变化及振动也很难保证已调好的频点不会发生偏移。
DF发射模块未设编码集成电路,而增加了一只数据调制三极管Q1,这种结构使得它可以方便地和其它固定编码电路、滚动码电路及单片机接口,而不必考虑编码电路的工作电压和输出幅度信号值的大小。
比如用PT2262等编码集成电路配接时,直接将它们的数据输出端第17脚接至DF数据模块的输入端即可。
DF数据模块具有较宽的工作电压范围3~12V,当电压变化时发射频率基本不变,和发射模块配套的接收模块无需任何调整就能稳定地接收。
当发射电压为3V时,空旷地传输距离约20~50米,发射功率较小,当电压5V时约100~200米,当电压9V时约300~500米,当发射电压为12V时,为最佳工作电压,具有较好的发射效果,发射电流约60毫安,空旷地传输距离700~800米,发射功率约500毫瓦。
315m无线模块怎么接收程序?程序是什么?
315m无线模块怎么接收程序?程序是什么?下面给大家整理下315M无线模块的接收程序#include AT89X52.H#include string.h//液晶块#define LCM_RW P3_6 //定义引脚#define LCM_RS P3_5#define LCM_E P3_7#define LCM_Data P1#define Busy 0x80 //用于检测LCM状态字中的Busy标识typedef int byte;typedef unsigned int word;void Read_Temp(void);void mychar(char,char);void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadDataLCM(void);unsigned char ReadStatusLCM(void);void LCMInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); void Delay5Ms(void);void Delay400Ms(void);void delay(word useconds){for(;useconds0;useconds--);}void mychar(char xx,char yy){DisplayOneChar(0,0,0x54);DisplayOneChar(1,0,0x65);DisplayOneChar(2,0,0x6D); DisplayOneChar(3,0,0x70); DisplayOneChar(4,0,0x65); DisplayOneChar(5,0,0x72); DisplayOneChar(6,0,0x61); DisplayOneChar(7,0,0x74); DisplayOneChar(8,0,0x75); DisplayOneChar(9,0,0x72); DisplayOneChar(10,0,0x65); DisplayOneChar(11,0,0x3A);///////////////////////自定义字符WriteCommandLCM(0x48, 0); //第一行WriteDataLCM(0x06); WriteCommandLCM(0x49, 0); //第2行WriteDataLCM(0x09); WriteCommandLCM(0x4a, 0); //第3 WriteDataLCM(0x09); WriteCommandLCM(0x4b, 0); //第4 WriteDataLCM(0x06); WriteCommandLCM(0x4c, 0); //第5 WriteDataLCM(0x00); WriteCommandLCM(0x4d, 0); //第6 WriteDataLCM(0x00); WriteCommandLCM(0x4e, 0); //第7 WriteDataLCM(0x00); WriteCommandLCM(0x4f, 0); //第8 WriteDataLCM(0x00); DisplayOneChar(xx,yy,0x01); DisplayOneChar(xx+1,yy,0x43);}//写数据void WriteDataLCM(unsigned char WDLCM){ReadStatusLCM(); //检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; //若晶振速度太高可以在这后加小的延时LCM_E = 0; //延时LCM_E = 1;}//写指令void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCM(); //根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;}//读状态unsigned char ReadStatusLCM(void){LCM_Data = 0xFF;LCM_RS = 0;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;while (LCM_Data Busy); //检测忙信号return(LCM_Data);}void LCMInit(void) //LCM初始化{LCM_Data = 0;WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); //关闭显示WriteCommandLCM(0x01,1); //显示清屏WriteCommandLCM(0x06,1); // 显示光标移动设置WriteCommandLCM(0x0C,1); // 显示开及光标设置}//按指定位置显示一个字符void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) {Y = 0x1;X = 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码WriteDataLCM(DData);}//按指定位置显示一串字符***原来的遇到空格0x20就不显示***void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) {unsigned char ListLength,j;ListLength = strlen(DData);Y = 0x1;X = 0xF; //限制X不能大于15,Y不能大于1if (X = 0xF) //X坐标应小于0xF{for(j=0;jListLength;j++){DisplayOneChar(X, Y, DData[j]); //显示单个字符X++;}}}//5ms延时void Delay5Ms(void){unsigned int TempCyc = 5552;while(TempCyc--);}//400ms延时void Delay400Ms(void){unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--); };}sbit W_IN = P2 ; sbit W_OUT = P2。
315M无线遥控C51解码程序
315M无线遥控C51解码程序发布时间: 2008-11-03 ,阅读: (1041) ,来源:/*315M无线解码程序*//*无线码宽电平脉冲时间1.8ms,低电平脉冲时间600us,同步码低电平时间18.6ms P1口接LED显示接收到的无线码的最后一字节数据MCU:STC12C4052,12MHzOSC,调试通过*/#include <stc12c4052.h>#define uchar unsigned char#define WUXIAN P3_2 //无线信号输入脚#define _rlcar_(RX) CY=RX&0X80 //RX带进位左移1位,数据放入ACCuchar bdata wx_data0,wx_data1,wx_data2; //存储24位无线数据uchar data wx_code0,wx_code1,wx_code2;uchar data wx_count,wxcount_buf; //低电平时间计数器uchar data wx_bit; //无线码位数uchar data t_10ms;uchar data t_500ms;bit tb_flag; //同步码接收成功标志bit wx_ok; //无线码接收成功标志bit wx_sta; //无线信号输入脚的高低电平状态void mcu_initialize() {WDT_CONTR=0x00; //关闭看门狗AUXR=0; //定时器0和1设为传统8051速度,12分频P1M0=0;P1M1=0x0; //P1为准双向口P1=0;P3M0=0x04;P3M1=0x00; //P3.2设置成输入脚TR0=0;TH0=0x9c;TL0=0x00; //100us中断一次TMOD|=0x02; //设置T0为自动装入的8位定时器ET0=1; //允许T0中断EA=1;TR0=1; //启动T0}void main() {mcu_initialize();while(1);}void decode() {if(WUXIAN) { //检测无线I/O口为高if(!wx_sta) {wx_sta=1; //无线信号从低变高wxcount_buf=wx_count;if(tb_flag) { //同步码标志为1if((0x02<wxcount_buf)&&(wxcount_buf<0x08)){ //低电平脉宽范围在200us 到800us之间CY=1;}else if((0x0d<wxcount_buf)&&(wxcount_buf<0x14)){ //低电平脉宽范围在1.3ms到2ms之间CY=0;}else{ //干扰码loop2:wx_count=0;wx_bit=0;wxcount_buf=0;tb_flag=0;return;}_rlcar_(wx_data0); //移位寄存器,接收一位数据wx_data0=ACC;_rlcar_(wx_data1);wx_data1=ACC;_rlcar_(wx_data2);wx_data2=ACC;if(++wx_bit==24){ //接收完24位码,接收成功标志wx_ok置1tb_flag=0;wx_bit=0;wx_ok=1;wx_code0=wx_data0;wx_code1=wx_data1;wx_code2=wx_data2;P1=wx_code0; //p1口接LED显示数据}}else {if((0x87<wxcount_buf)&&(wxcount_buf<0xc8))tb_flag=1; //抵电平脉宽范围在13.5ms到20ms之间,把同步码标志置1 elsegoto loop2;}}}else {if(wx_sta) {wx_count=0; //无线信号从高变低,清零低电平脉宽计数器wx_sta=0;}elsewx_count++; //无线信号为低电平,低电平脉宽计数器加1}}void timer0_isr() interrupt 1 {decode();if(++t_10ms>=100){ //P3.7口接的LED以0.5s的速度闪烁t_10ms=0;if(++t_500ms>=50){P3_7=!P3_7;t_500ms=0;}} }。
433和315无线模块的软件编解码遥控程序
433和315无线模块的软件编解码遥控程序1:单片机软件解码pt22402:选择PIC16F877A作为软件解码芯片3:选择外部4MHz晶体振荡器作为单片机的时钟频率4:选择外部中断引脚作为编码信号引脚的输入引脚5:可解pt2240芯片(8脚的学习型编码芯片编码地址位:2的20次方重复几率100万分之一)6:功能是:遥控学习(演示上的S9用作学习按钮)清除内存(长按演示上的S9以清除遥控地址的记忆)7:可设置学习遥控器数量(可根据EEPROM大小任意设置)8:输出功能(有三路是单击遥控器双稳,可以通过portc上的led可以看到结果.还有一路是双击远程控制(双稳态)9:可选用315mhz/433mhz的超再生/超外差接收模块/***************************************************************************** *//******************************遥控器接收程序********************************//***************************************************************************** */#include#包括#定义远程uGeshu10/***************************************************************************** */联合比特16{inttimer1_reg;unsignedcharreg[2];}联合比特u32{unsignedlongdata_temp_long;unsignedchardata_temp_byte[4];}/***************************************************************************** */staticunionbit_16timer1_temp;//16位定时器1staticunionbit_32data_temp;/***************************************************************************** */staticvolatileunsignedcharrec_status@97;staticunsignedchardata_uCout;//遥控器接收到的代码号为staticunsigned chardata//received 4位数据staticunsigned_uuUpulse;//高电平宽度静态无符号整数脉冲;//低电平宽度staticunsignedcharremote_cout;//遥控器数量staticunsignedcharremote_numb;//遥控器编号/***************************************************************************** */staticunsignedchartimer15s1;//清除学习码按键长按时间staticunsignedchartimer15s2;//学习等待时间staticunsignedchartimer15s3;//遥控器的数据缓冲时间为StaticUnsignedChartTimer15s4//LED显示时间staticunsignedcharttimer15s5//StaticUnsignedChartTimer15s6;//静态无符号图表15s7;//静态无符号图表15S8///***************************************************************************** */staticbithead@((未签名)(&rec_状态)*8+(0));//同步头标志位staticbitlearn@((无符号)(&rec_状态)*8+(1))//学习标志位staticbitrecieved@((unsigned)(&rec_status)*8+(2));//接收完成标志位staticbitremote按钮状态@((未签名)(&rec_状态)*8+(3));//远程控制键标志位staticbitfirst_uu单击状态@((未签名)(&rec_状态)*8+(4));//按遥控器上的键单击标志位/***************************************************************************** *//**********************************数据接收**********************************//***************************************************************************** */未签名字符数据读取(无效){if(h_pulse>l_pulse){如果((左脉冲>200)和&(左脉冲<1000)){if(h_pulse返回2;//无效数据}。
基于51单片机315MHz无线收发模块调试程序
^****************************315Mhz无线通信程序原理:第一块单片机pl.O 口输出脉冲方波提供给无线发射模块,无线发射模块将信号以电磁波的形式传到无线接收模块。
无线接收模块会根据这个电磁波还原出脉冲方波提供给第二块单片机,第二块单片机进行进一步的解算处理。
通信协议:根据这个原理和315模块的特性。
我决定以900us高电平和2000us底电平表示1 ;450us高电平和2000us低电平表示0。
而8个1或0组成一个字节。
为了防止误码,所以在每个字节的前面加一个2ms高电平和2ms低电平的起始码。
每个5S发送一个字符,一个字符发送20遍%A^ >A^ %A^ >A^vl^ /^Tw ^T^yT^ ^T^yr^yt^yr^yj% yr^yj% yr^yj% yj% yj% yj% yj% yj% /{ xLr >±^ vl^ ^2^>X^ vl^ vl^i yr% yr^ yr% yr% yr^ yj^ *r% *r% *r% 彳・"卜315Mhz无线通信程序发送程序11.0592M晶振1机器周期二1.0851US定时器产生2MS定时TH0=0XF8;TLO=OXCD;900us定时THO二OXFC;TLO二0XC3;450us定时THO二OXFE;TLO二0X61;vtx vtx vtx xtx /^T> #T^ #T^>r^ yrs yrs yis^w yrs yrs^w yrs yrs^w /#include<reg52.h>Sinclude "intrins・h"#define uint unsigned int#define uchar unsigned charsbit WXSEND二P「0;uchar timedata[8]二{Oxfe, 0x61, Oxfc, 0xc3, 0xf8, Oxcd, Oxea, 0x66} ;// 450us, 900us, 2MS, 6ms/ >1^/ yj%yj%11.0592MHZ下500毫秒延时,还准vtx vtx vtx xtx vtx /yj% >Jx #y% #y% yj% ^J> ^J> 吩・^J> / void delay500ms(uint i) uint j;uchar k;while (i--){for(j=0;j<750;j++)for(k=0;k<200;k++);}void timeOinit()(TMOD二0x01;//void sendset (uchar senddata) ;// 发送数据程序void sendstartbit () ;//数据发送起始信号2ms高电平和2ms低电平的起始码void sendlowbit() ;// 发送低电平void sendhighbit 0 ;// 发送高电平void main(){uchar senddata, i;timeOinit () ;//定时器初始化senddata二0x55;wh订e(l) {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 0 ;// 发送高电平senddata=senddata<<l;//数据发送起始信号6ms高电平和2ms低电平的起始码void sendstartbit()(WXSEND=1;TH0=timedata[4];TLO二timedata[5];TRO=1;while (TF0==0);TRO二0;TFO二0;TH0=timedata[4];TLO二timedata[5];WXSEND=O;TRO二1;while (TFO==O);TRO二0;TFO=O;void sendlowbit () // 发送低电平WXSEND=1;THO=timedata[O]; TLO 二timeddta[l]; TRO 二1;while (TFO==O);TRO=O;TFO=O;TH0=timedata[4];TLO 二timeddta[5];WXSEND=O;TRO=1;while (TFO==O);TRO=O;TFO=O;WXSEND=1;TH0=timedata[2];TL0=timedata[3];TRO=1;while (TFO==O);TRO=O;TFO 二0; voidsendhighbi t ()//发送高电平TH0=timedata[4];TLO二timedata[5];WXSEND=O;TRO二1;while (TFO==O);TRO=O;TFO二0;315Mhz无线通信程序接收程序U.0592M晶振1机器周期二1.0851US用中断0边沿触发中断,开启接收程序由于接收模块平时大部分时间是低电平,有信号时是高电平,而中断以,°是负边沿触发,所硕件电路中接收模块的信号输出端经过非门后接到单片机P3. 2接收到数据,用串口传到上位机的串口调试软件显示#include<reg52.h>#include 〃inttins. h〃#define uint unsigned intSdefine uchar unsigned char sbit WXrecep=P3^2;//uchar code timedata[6]二{Oxfe, 0x61, Oxfc, 0xc3, Oxf&Oxcd};// 450us,900us, 2MS uchar wxrecepda;void timeOinit ()(TMOD二0x21;// 定时器0THO=O;TLO=O;//TM0D=0x20:/*TMOD:timer1, mode2, 8-bitreload*/TH1二OxFD;/*THl 11.0592MHz*/TL1=OXFD;EA=1;EXO=1;ETO=1;IE0=0;void uartinit()(SCON二0x50;/*SCON:模式1, 8-bitUART,使能接收 */ TR1=1;/*TR1:timerlrun*/void receivewxO ;// 接收子程序void main()timeOinit () ;//定时器初始化uartinit ();wh订e(l);void receivewx ()// 接收子程疗;{uint i;uchar j, recedata;while(WXrecep—0);TRO=O;i二TH0*256+TL0;THO=O;TLO=O;if((i>=1800)&&(i〈二1890)){ recedata二0;for(j=0;j<8;j++){while (WXrecep— 1);TRO二1;while(WXrecep—0);TRO二0;i二TH0*256+TL0;if ((i>二390)&&(iO450)) recedata=recedata&Oxfe;else if ((i>=800)&&(i<=860)) recedata=recedata 0x01;recedata二:recedata〈〈l;TH0=0;TL0=0;}wxrecepda=recedata»l ;SBUF=wxrecepda;while(TI==0);TI=0;}void wxrecint() interrupt 0(THO=O;TLO=O;TRO=1;EXO=O;receivewx ();EXO=1;。
基于315MHz的数字无线通信(发射,接收)系统实验报告
{ //P1=0x00;
P37=1;
SCON = 0x50;/* SCON:模式1, 8-bit UART,使能接收*/
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xFD; /* TH1: reload value for 9600 baud @ 11.0592MHz */
图3为发送载波波形
同组同学接收的图像:
图4为接收载波波形
说明射频发射模块工作正常,接收模块正常,与本组同学通信正常。
九、试验中遇到的问题及解决方法
1、电源电路部分输出电压不是5V?
电容接反了,而且小电容不仔细看都一样,但有一个是不同的。
2、串行接口部分连接与电路图不相符?
发现信号地应该与5针脚相连接,可是电路板上却与1针脚相连接,用一根导线将1针脚与5针脚相连,即可正常传输数据。
串口调试图像:
5、实现自发自收
将自发自收程序烧到单片机中,用串口线将电路与计算机相连接,在发送框中输入发送的内容,点击接收,接收框中出现刚才发送的内容。
将程序拷入CPU中,P3.7口线输出10KHZ的方波,说明RS232芯片正常通信,CPU工作正常。
调试图像:
CPU工作正常(P3.7口线输出10KHZ的方波)图像。
通过通信系统方案设计及具体的电路调试和软件编程实践,进一步加深对通信系统的了解,理解所学的专业知识,提高动手能力,提高解决实际问题的综合能力。
三、设计要求
通过亲自设计,动手焊接并调试电路实现315M的数字无线通信系统无线收发数据功能
四、给定条件
电路板(发送)、电阻、电容、发光二级管、晶振、7805、2262、2051单片机、RS232、导线等
单片机例程和指导315M_433M_868M_2[1].4G_ASK_超再生_超外差_ZIGBEE_
双向1G以内-SI4432系列自带PA
433MHz FSK/MSK/ASK/OOK收发模块
VCC GND GPIO_0 GPIO_1 GPIO_2
1.2-500Kbps ≤350mA at 27dBm ≤20mA ≤2uA
58-650KHz 1000M
1.8-3.6VDC -40℃~85℃
REMARKS
Programmable
PA-VCC 9V 2.4Kdata rate. Programmable ≤16mA at 0dBm
26M Crystal at open area
Pin name GND PA_VCC +3V3 SI SCLK SO
7
GDO2
8
GDO0
9
CSN
10
TX-EN
11
RX-EN
Pin type Ground PA power power Digital input Digital input Digital Output
Digital Output Digital I/O Digital input TX_EN RX-EN
参数 FSK/GFSK/MSK 470MHz~474MHz
≤200mW -109dBm@1200bps
3.3V ~ ~
10%~90%相对湿度,无冷凝 ××
主要特点及应用
• CC1110PATR4S无线短距模块的特点 • 微发射功率,最大发射功率小于200mW • 频率范围:470MHz~474MHz • 调制方式:FSK/GFSK/MSK • 接收灵敏度:-109dBm@1.2Kbps • 支持AES数据加密功能 • 可提供2个TTL电平串口(或SPI接口) • 对外可提供多个IO接口,便于用户灵活使用 • 低功耗 • 集成度高,体积小
使用315MHz收发模块制作的遥控插座.
使用315MHz收发模块制作的遥控插座目前市场上有很多无线遥控产品出售,质量参差不全,有些还使用LC振荡器,频率漂移严重,性能不好。
前一段时间逛电子市场,发现一种性能稳定、价格便宜的无线遥控组件,对于我们无线电爱好者来说是一个福音。
该无线模块工作频率为315MHz,采用声表谐振器SAW稳频,频率稳定度极高,当环境温度在-25~+85度之间变化时,频飘仅为3ppm/度。
它与台湾普城公司生产的用CMOS工艺制造的低功耗低价位通用编解码集成PT2622/PT2722配套使用时,可以实现遥控、遥测、数据采集、生物信号采集等功能。
本制作是针对无线电爱好者而设计的,采用了现在市场上非常普遍的元器件制作而成,价格低廉,便于业余条件下自制。
该无线遥控插座遥控距离可达200米,为了便于制作,只设计成6路的无线遥控器。
希望无线电爱好者可以在这基础上,设计出更多方便我们实际生活的电子作品。
一、工作原理1、发射部分发射部分的电路原理图如图1所示。
该部分电路主要由315MHz无线数据发射模块和编码集成PT2262组成。
315MHz 无线数据发射模块的实物图如图2所示。
该无线发射模块具有较宽的工作电压范围3~12V,当电压变化时发射频率基本不变,和发射模块配套的接收模块无需任何调整就能稳定地接收。
当发射电压为3V时,空旷地传输距离约20~50米,发射功率较小;当电压5V时约100~200米;当电压9V 时约300~500米;当发射电压为12V时,为最佳工作电压,具有较好的发射效果,发射电流约60毫安,空旷地传输距离700~800米,发射功率约500毫瓦。
当电压大于l2V 时功耗增大,有效发射功率不再明显提高。
发射模块采用ASK方式调制,以降低功耗。
当数据信号停止时发射电流降为零,数据信号与DF发射模块输入端可以用电阻或者直接连接而不能用电容耦合,否则DF发射模块将不能正常工作。
数据电平应接近DF数据模块的实际工作电压,以获得较高的调制效果。
正常315M无线遥控C51解码程序
可以正常使用315M无线遥控C51解码程序/*315M无线解码程序*//*无线码宽电平脉冲时间1.8ms,低电平脉冲时间600us,同步码低电平时间18.6ms P1口接LED显示接收到的无线码的最后一字节数据MCU:STC12C4052,12MHzOSC,调试通过*/#include <stc12c4052.h>#define uchar unsigned char#define WUXIAN P3_2 //无线信号输入脚#define _rlcar_(RX) CY=RX&0X80 //RX带进位左移1位,数据放入ACC uchar bdata wx_data0,wx_data1,wx_data2; //存储24位无线数据uchar data wx_code0,wx_code1,wx_code2;uchar data wx_count,wxcount_buf; //低电平时间计数器uchar data wx_bit; //无线码位数uchar data t_10ms;uchar data t_500ms;bit tb_flag; //同步码接收成功标志bit wx_ok; //无线码接收成功标志bit wx_sta; //无线信号输入脚的高低电平状态void mcu_initialize() {WDT_CONTR=0x00; //关闭看门狗AUXR=0; //定时器0和1设为传统8051速度,12分频P1M0=0;P1M1=0x0; //P1为准双向口P1=0;P3M0=0x04;P3M1=0x00; //P3.2设置成输入脚TR0=0;TH0=0x9c;TL0=0x00; //100us中断一次TMOD|=0x02; //设置T0为自动装入的8位定时器ET0=1; //允许T0中断EA=1;TR0=1; //启动T0}void main() {mcu_initialize();while(1);}void decode() {if(WUXIAN) { //检测无线I/O口为高if(!wx_sta) {wx_sta=1; //无线信号从低变高wxcount_buf=wx_count;if(tb_flag) { //同步码标志为1if((0x02<wxcount_buf)&&(wxcount_buf<0x08)){ //低电平脉宽范围在200us 到800us之间CY=1;}else if((0x0d<wxcount_buf)&&(wxcount_buf<0x14)){ //低电平脉宽范围在1.3ms到2ms之间CY=0;}else{ //干扰码loop2:wx_count=0;wx_bit=0;wxcount_buf=0;tb_flag=0;return;}_rlcar_(wx_data0); //移位寄存器,接收一位数据wx_data0=ACC;_rlcar_(wx_data1);wx_data1=ACC;_rlcar_(wx_data2);wx_data2=ACC;if(++wx_bit==24){ //接收完24位码,接收成功标志wx_ok置1tb_flag=0;wx_bit=0;wx_ok=1;wx_code0=wx_data0;wx_code1=wx_data1;wx_code2=wx_data2;P1=wx_code0; //p1口接LED显示数据}}else {if((0x87<wxcount_buf)&&(wxcount_buf<0xc8))tb_flag=1; //抵电平脉宽范围在13.5ms到20ms之间,把同步码标志置1 elsegoto loop2;}}}else {if(wx_sta) {wx_count=0; //无线信号从高变低,清零低电平脉宽计数器wx_sta=0;}elsewx_count++; //无线信号为低电平,低电平脉宽计数器加1}}void timer0_isr() interrupt 1 {decode();if(++t_10ms>=100){ //P3.7口接的LED以0.5s的速度闪烁t_10ms=0;if(++t_500ms>=50){P3_7=!P3_7;t_500ms=0;}}}。
315M无线解码程序(精准)
if(P3_2==0) goto kk;
delay_200();
if(P3_2==1) goto kk;
for(i=15;i>0;i--)//重复20次,检测在3750微秒内出现高电平就退出解码程序
{
delay_200();
if(P3_2==1) goto kk;
}
//////////////////////////////////////////////////////////////////////////////////
delay_131();
delay_131();
delay_131();
delay_131();
kk:EX0=1;
}
{
uchar i,j;
bit BitState_2;
EX0=0;
//////////////////////////////找起始位//////////////////////////////////////////
for(i=0;i<50;i++);
if(P3_2==1) goto kk;
while(P3_2==0);
/*------------------------------------------------------------------------------
; MCU:AT89s52 ,晶体频率:12MHz
:
;----------------------------315M无线遥控解码程序------------------------------*/
#include <AT89X52.H>
基于315MHz数字无线通信(发射,接收)系统实验报告
实验报课程名称通信系统课程设计实验项目基于315MHz的数字无线通信(发射,接收)系统实验仪器计算机、电路板等班级/学号学生姓名实验日期指导教师简要说明设计实现基于315MHz的数字无线通信系统。
1、系统模型BIEIU flisru LLOlOia...IIDIOIO无线发射系统无线接收系统图1本课程设计的系统模型2、数字无线通信系统的结构组成:1、信息源:模拟信源(电话机、摄像机、摄像头等),数字信源(计算机、数码相机等)。
2、信源编码:把连续的信息变换为数字信号,之后一般进行数据压缩处理,去掉部分冗余信息。
3、信道编码:通过增加冗余信息,进行适当的编码变换,以减少信息传输时干机、RS232导线等五、系统框图1、RS232通信接口电路扰造成的数据丢失。
提高传输的可靠性。
4、数字调制: 把信道编码后的数字信号变换为可加到射频电路的模拟信号。
如: ASKFSK PSK DPSK QPSK QAM ,MSK 等。
5、射频调制: 传输。
如:把数字调制后的模拟信号加到射频载波上,发射出去,实现无线AM , DSB SSB VSB FM , PM 等。
接收时,信息变换与上述过程相反。
设计目的:通过通信系统方案设计及具体的电路调试和软件编程实践,进一步加深对通信系统的了解,理解所学的专业知识,提高动手能力,提高解决实际问题的综合 能力。
设计要求通过亲自设计,动手焊接并调试电路实现 315M 的数字无线通信系统无线收发数据功能四、给定条件电阻、电容、发光二级管、晶振、7805、2262、2051 单片八、工作原理捉线发射系统原理框图图主要由DB9的标准232接口插座和专用芯片MAX232组成。
通过这个接口电路可使计算机与单片机之间实现双向通信。
单片机可以发送也可以接收命令和数据。
在计算机端,RS232通讯程序,通过DB9插座的2、3脚,产生RS232电流环信号,MAX232转换为TTL或CMOS电平,送入单片机。
315m无线发射接收模块解析
的,否则对接收灵敏度有很大的影响,所以如果用1/4波长的普通导线时应为23
厘米最佳,要尽可能减少天线根部到发射模块天线焊接处的引线长度,如果无法 减小,可以用特性阻抗50欧姆的射频同轴电缆连接(天线焊点右侧有一个专门 的接地焊点)
发射发射模块最好能垂直安装在主板的边缘,应离开周围器件5mm以上,以免
受分布参数影晌。模块的传输距离与调制信号频率及幅度,发射电压及电池容 量,发射天线,接收机的灵敏度,收发环境有关。一般在开阔区最大发射距离约800米,在有障碍的情况下,距离会缩短,由于无线电信号传输过程中的折射和 反射会形成一些死区及不稳定区域,不同的收发环境会有不同的收发距离。
空旷地传输距离约20〜50米,发射功率较小,当电压5V时约100〜200米,当 电压9V时约300〜500米,当发射电压为12V时,为最佳工作电压,具有较好的 发射效果,发射电流约60毫安,空旷地传输距离700〜800米,发射功率约500毫瓦。当电压大于I2V时功耗增大,有效发射功率不再明显提高。这套模块的特 点是发射功率比较大,传输距离比较远,比较适合恶劣条件下进行通讯。天线最 好选用25厘米长的导线,远距离传输时最好能够竖立起来,因为无线电信号传 输时收很多因素的影响,所以一般实用距离只有标称距离的一半甚至更少,这点 需要开发时注意。数据模块采用ASK方式调制,以降低功耗,当数据信号停止 时发射电流降为零,数据信号与发射模块输入端可以用电阻或者直接连接而不能 用电容耦合,否则发射模块将不能正常工作。数据电平应接近数据模块的实际工 作电压,以获得较高的调制效果。
编辑本段英文翻译
315Mhz RF tran sceiver/receiver module
基于STC51单片机315M无线遥控智能小车-Protues仿真-程序编写
无线遥控智能小车摘要:本设计就采用了比较先进的89C51为控制核心,89C51采用CHOMS工艺,功耗很低。
这种方案能实现对智能小车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。
本设计采用MCS-51系列中的89C51单片机。
以89C51为控制核心,利用超声波传感器检测道路上的障碍,控制电动小车的自动避障、自动寻迹功能。
整个系统小巧紧凑,控制准确,性价比高,人机互动性好。
关键词:单片机;避障;寻迹;89c51图2-1系统硬件框图三、硬件的设计(一)系统硬件设计思路按设计要求,根据超声波测距原理,以单片机AT89c51为核心的测液位系统。
设计系统各部分电路功能。
图3.1为89C51单片机的最小系统。
图3.1 89C51单片机最小系统1.时钟电路89C51虽然有内部振荡电路,但要形成时钟,必须外部附加电路。
89C51单片机的时钟产生方法有两种。
内部时钟方式和外部时钟方式。
本设计采用内部时钟方式,利用芯片内部的振荡电路,在XTAL1、XTAL2引脚上外接定时元件,内部的振荡电路便产生自激振荡。
本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。
振荡晶体可在1.2MHZ到12MHZ之间选择。
电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,CX1、CX2可在20pF到100pF之间取值,但在60pF到70pF时振荡器有较高的频率稳定性。
所以本设计中,振荡晶体选择6MHZ,电容选择65pF。
在设计印刷电路板时,晶体和电容应尽可能靠近单片机芯片安装,以减少寄生电容,更好的保证振荡器稳定和可靠地工作。
为了提高温度稳定性,应采用NPO 电容。
2.复位电路89C51的复位是由外部的复位电路来实现的。
复位引脚RST通过一个斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
无线wifi模块-51单片机-C语言程序
{
ESP8266_Set("AT+CIPSEND=0,4");
while(*puf!='\0') //遇到空格跳出循环
{
Send_Uart(*puf); //向WIFI模块发送控制指令。
us_delay(5);
********************************************************************/
#include <reg52.h>//包含头文件
#define uint unsigned int
#define uchar unsigned char
#define载入值
puf++;
}
us_delay(5);
Send_Uart('\n'); //换行
ms_delay(10);
}
/********************************************************************
名称:主函数
作用:程序的执行入口
********************************************************************/
二、关于安卓手机方面
测试时可以使用,网络调试助手(下载这个app安装在手机即可)发送数字1表示小灯亮,0表示灯灭。后续想深入的话可以自己开发安卓app软件。
三、参数设置
由于参数的设置方法和步奏网上资料很全,这里提供相关的网址自行参考。
Uart-W
315m无线模块用途及315m无线发射接收模块详解
315m 无线模块用途及315m 无线发射接收模块详解315m 无线模块用途无线数据传输广泛地运用在车辆监控、遥控、遥测、小型无线网络、无线抄表、门禁系统、小区传呼、工业数据采集系统、无线标签、身份识别、非接触RF 智能卡、小型无线数据终端、安全防火系统、无线遥控系统、生物信号采集、水文气象监控、机器人控制、无线232 数据通信、无线485/422 数据通信、数字音频、数字图像传输等领域中。
315m 无线发射接收模块参数介绍静态电流:小于等于0.1UA发射电流:2~10MA工作电压:DC 3~12V数据发射模块的工作频率为315M,采用声表谐振器SAW 稳频,频率稳定度极高,当环境温度在-25~+85 度之间变化时,频飘仅为3ppm/度。
特别适合多发一收无线遥控及数据传输系统。
声表谐振器的频率稳定度仅次于晶体,而一般的LC 振荡器频率稳定度及一致性较差,即使采用高品质微调电容,温差变化及振动也很难保证已调好的频点不会发生偏移。
发射模块未设编码集成电路,而增加了一只数据调制三极管Q1,这种结构使得它可以方便地和其它固定编码电路、滚动码电路及单片机接口,而不必考虑编码电路的工作电压和输出幅度信号值的大小。
比如用PT2262 或者SM5262 等编码集成电路配接时,直接将它们的数据输出端第17 脚接至数据模块的输入端即可。
数据模块具有较宽的工作电压范围3~12V,当电压变化时发射频率基本不变,和发射模块配套的接收模块无需任何调整就能稳定地接收。
当发射电压为3V 时,空旷地传输距离约20~50 米,发射功率较小,当电压5V 时约100~200 米,当电压9V 时约300~500 米,当发射电压为12V 时,为最佳工作电压,具有较好的发射效果,发射电流约60 毫安,空旷地传输距离700~800 米,发射功率约500 毫瓦。
当电压大于l2V 时功耗增大,有效发射功率不再明显提高。
这套模块的特点是发射功率比较大,传输距离比较远,比较适合恶劣条件下进行通讯。
315Mhz、433Mhz无线遥控信号的解码分析和模拟
315Mhz、433Mhz⽆线遥控信号的解码分析和模拟摘要前段时间学习⽆线电的同时了解到arduino是作为技能尚未成熟技术宅的我继树莓派⼜⼀个不错的选择。
于是花了200元购得3块arduino开发板(2*nano&1*uno)和其他传感器等,同时看到了315M超再⽣模块,因为玩⽆线电的都知道315M是汽车遥控器,防盗闸门,路桥系统等最常⽤的信号频率,所以我就毫不犹豫的下单了。
然后就有了今天的成果。
Freebuf也有不少此类⽂章,关于315,433的解码我已掌握很多⽅法(其实使⽤SDR是个不错的选择),对滚码我也有⼀定研究和破解,本⽂步骤详细,思路明确,希望对⼤家有⽤。
对arduino和315模块熟悉的可以直接进⼊第三步。
关键词:315M超再⽣模块、arduino。
引⾔:315MHz遥控器使⽤⼴泛,学习和深⼊了解其原理和实际操作,在获得⽆限乐趣的同时,可以学会防⽌⾃⼰的车被盗,并可以⾃⼰开发更安全的遥控锁设备,在做本项⽬的过程中我深刻体会到315M遥控系统的不安全性是个严重的问题,主要表现在315遥控系统解码简单,发射条件简单,易拷贝。
下⾯是我在此次学习研究中得到的⼀些浅陋知识,在此详细描述。
以下是本次学习的原理框架:框图说明:接收端接收信号,由arduino单⽚机解码,并将解码信息通过蓝⽛发送到⼿机,在⼿机蓝⽛串⼝监视器显⽰(解码过程);⼿机发送24位遥控码到单⽚机,单⽚机将24位遥控码通过发射端发出,⽤于遥控模拟接收端通过接收端PT2272芯⽚解码后在LED信号灯得到反馈,模拟接收端由单⽚机直接供电,发射端发出的信号也可直接有其他遥控接收端接收达到其他⽬的。
⼀、基础知识介绍:1、Arduino介绍:Arduino是⼀款便捷灵活、⽅便上⼿的开源电⼦原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。
由⼀个欧洲开发团队最早于2005年冬季开发。
其成员包括Massimo Banzi,David Cuartielles,Tom Igoe,Gianluca Martino,David Mellis和Nicholas Zambetti。
51单片机对315M、443M无线遥控波形分析
最近想做无线遥控,在网上没有找到好的资料,要想做好无线遥控,就要清楚无线遥控的波形,最好用示波器,但太贵了,自己动手先做一简单的示波器,利用声卡当示波器,很好用,对红外遥控、315M/443M无线遥控、51单片机串口分析等足够用了。
下面是我做的图片:1、硬件(音频线1根,万用表表笔1付);2软件。
这就是硬件,一根音频线各和两只表笔。
(10元钱不到)双通示波器表笔接测式端,屏蔽线接地。
音频线插头插入“话筒输入端”这是软件CoolEdit2.0值得注意的是接收到的波形图是通过声卡后反了相的,可以通过软件编辑反相,能接收到发送的波形图,就好办了,对波形图分析,就可以解码,可以根据对波形图分析理解,找到你自己的解码方式。
这是用声卡示波器对315M/443M无线遥控接收到的波形图:通过对波形的分析,好像是很乱,这就是为什么很多初学者无线遥控解码失败的原因,在没有接收到无线遥控信号时,也有一些乱的波形,有些朋友想用315M/443M无线遥控模块做串口通信,结果发现接收到很多乱码,而且不停的接收到。
你会看到波形有突然的变化,放大后,你就会发现有一定的规律,首先有一段比较长的波形,通过软件可以看出有多少ms(大概13ms),这就是同步码,后面有25短的波形,这就是PT2262的编码格式。
首先要识别出同步码,这个很关键,我们在做发射编码时也要做这个,一般为10-20ms,这是区别于乱码的标志。
下面说说我是怎样解码的,利用51单片机,接收信号接到P3.2,用下降沿外部中断。
检测每2次下降沿中断的时间,用T1计时;每2次下降沿之间的高电平段的时间,用T0计时;这是常用的PT2262的格式,首先要检测到同步码,每两次中断的时间大于(T1计时)12ms;检测到同步码后才开始解码,如果接收到的高电平在450us左右为“0”;如果接收到的高电平在1300us左右为“1”;这样我们就能解码了。
这是我的解码程序:#include <STC12C5A60S2.h>#include <intrins.h>#include<stdlib.h>#include <stdio.h>#define uchar unsigned char#define uint unsigned intuint INT0_H_timer=0;//两个下降沿之间的高电平宽度uint INT0_L_timer=0;//两个下降沿总宽度bit DBM =0;//同步码标志long DATA=0;//取得24位数据(暂存);long DATAZ=0;//取得24位数据(比较暂存);long DATAX=0;//取数据uchar DATA_x=0;//取数据次数;//uint INT0_H[24]={0,};uchar TY=0;//连续取数标志void InitTimer0(void)//T0用于计两个下降沿之间的高电平宽度{TMOD |= 0x09;//T0加门控计高电平宽度TH0 = 0x00;TL0 = 0x00;ET0 = 0;//关T0定时中断TR0 = 1;TF0=0;//溢出清0}void InitTimer1(void)//T1用于计两个下降沿总宽度{TMOD |= 0x10;TH1 = 0x00;TL1 = 0x00;ET1 = 0;//关T1定时中断TR1 = 1;TF1=0;//溢出清0}void INT0_int()//外部中断初始化{IT0=1;//下降沿EX0=1;EA=1;}void main(void){uchar x=12,y=0;// AUXR &= 0x7F; //定时器时钟12T模式InitTimer0();InitTimer1();INT0_int();TH0=10;TL0=10;while (1){P0=DATAX;}}void INT0Interrupt(void) interrupt 0{INT0_L_timer=TH1*256+TL1;//两个下降沿总宽度INT0_H_timer=TH0*256+TL0;//两个下降沿之间的高电平宽度TH0 = 0x00;TL0 = 0x00;TH1 = 0x00;TL1 = 0x00;if (TF0)//有溢出不取值出错{INT0_L_timer=0;//两个下降沿总宽度INT0_H_timer=0;//两个下降沿之间的高电平宽度TF0=0;TF1=0;DBM=0;DATA_x=0;// P0=0xfe;}//晶振22.1184、12分频,13~15ms为同步码if (INT0_L_timer>24000&&INT0_L_timer<27000)//晶振22.1184、12分频{DBM=1;//P0=0;}if (DBM)//取第3次同步码后的数据{if ((INT0_H_timer>600)&&(INT0_H_timer<1000))//350~500us为0{DATA &= 0xfffffe;if (DATA_x<23){DATA_x++;DATA=DATA<<1;}else{if (TY>=1){TY=0;if (DATAZ==DATA)//如果2次取数一致,读出数{DATAX=DATA;}else{INT0_L_timer=0;//两个下降沿总宽度INT0_H_timer=0;//两个下降沿之间的高电平宽度TF0=0;TF1=0;DBM=0;DATA_x=0;}}else{DATAZ=DATA;TY++;}DATA=0;DBM=0;DATA_x=0;// P0=0x7f;}}else if ((INT0_H_timer>2200)&&(INT0_H_timer<2600))//1200~1400us为1 {DATA |= 0x000001;if (DATA_x<23){DATA_x++;DATA=DATA<<1;}else{if (TY>=1){TY=0;if (DATAZ==DATA)//如果2次取数一致,读出数{DATAX=DATA;}else{INT0_L_timer=0;//两个下降沿总宽度INT0_H_timer=0;//两个下降沿之间的高电平宽度TF0=0;TF1=0;DBM=0;DATA_x=0;}}else{DATAZ=DATA;TY++;}DATA=0;DBM=0;DATA_x=0;// P0=0x7f;}}else//出错{INT0_L_timer=0;//两个下降沿总宽度INT0_H_timer=0;//两个下降沿之间的高电平宽度TF0=0;TF1=0;DBM=0;DATA_x=0;//P0=0xfd;}}}。
基于51单片机的无线数据收发系统设计(带电路图和代码)
控制电路主要组成部分为单片机AT89S52,通过AT89S52与nRF401进行串行通信,并用其控制nRF401的TXEN端,来调整收发状态。AT89S52还控制液晶屏的显示和按键等一些工作。
4.1AT89S52功能介绍
AT89S52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,片内含8k bytes的可重复编程的Flash存储器和256bytes的随机存取数据存储器(RAM),3个16位可编程定时计数器,1个全双工串行通信口,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS—51指令系统.AT89S52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
从待机模式到发射模式,所需稳定的最大时间是tST,如(b)。
图3-6StandbyRX、StandbyTX的时序图
(3)Power UpTX、Power UpRX的切换
从上电到发射模式过程中,为了避免开机时产生干扰和辐射,在上电过程中TXEN的输入脚必须保持为低,以便于频率合成器进入稳定工作状态。当由上电进入发射模式时,TXEN必须保持1ms以后才可以往DIN发送数据.
4.1。1 内部结构
AT89S52单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时器/计数器、并行I/O口、串行I/O口和中断系统等几大单元以及数据总线、地址总线和控制总线三大总线构成。图4-1为单片机内部结构框图[13].
(1) 中央处理器
中央处理器(CPU)是整个单片机的核心部件,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
- 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<reg52.h>
#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);
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<reg52.h>
#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;/*TH1 11.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;
}。