51单片机编码控制315无线模块传送指令

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

无线电编码程序设计思想

该项目利用单通道无线电实现了多路遥控功能。遥控距离100m左右。

单通道无线电路若想实现多路遥控,必须对无线电进行编码,该项目利用单片机进行编解码,实现了16路无线电控制。在进行无线电编码前必须先定义一个协议规则。

现定义如下:

下降沿:1ms的高电平,随后500us的低电平。v0

起始位:4ms的高电平,随后4ms的低电平。v2

数据1:2ms的高电平,随后500us的低电平。v1

数据0:1ms的高电平,随后500us的低电平。v3

结束位:4ms的低电平。

以上就是通信协议规则,只要无线电收发双方都遵循该协议规则,则实现对小车的多路控制将非常容易。

//发射模块c程序

#include

#define uchar unsigned char

sbit key0=P3^4;

sbit key1=P3^5;

sbit key2=P3^6;

sbit key3=P3^7;

sbit TX=P2^0;

uchar m;

void v0();

void v1();

void v2();

void v3();

void delay_315();

void main()

{

uchar i;

bit dong=0; //开定时器0中断

TMOD=0X01;

TH0=(65536-100)/256;

TL0=(65536-100)%256;

EA=1;

ET0=1;

TR0=1;

TX=0;

while(1) //发送指令0

{

if(key0==0)

{

delay_315();

while(key0==0){v3();v2();v0();v0();v0();m=0;while(m<40);}

dong=1;

}

if(key1==0) //发送指令1

{

delay_315();

while(key1==0){v3();v2();v0();v0();v1();m=0;while(m<40);}

dong=1;

}

if(key2==0)

{

delay_315();

while(key2==0){v3();v2();v0();v1();v0();m=0;while(m<40);}

dong=1;

}

if(key3==0)

{

delay_315();

while(key3==0){v3();v2();v0();v1();v1();m=0;while(m<40);}

dong=1;

}

if(dong==1)

{

dong=0;

for(i=0;i<5;i++){v3();v2();v1();v0();v0();m=0;while(m<40);} }

}

}

void timer0() interrupt 1

{

TH0=(65536-100)/256;

TL0=(65536-100)%256;

m++;

TF0=0;

}

void v0() // 1MS高电平500us低电平{

m=0;

while(m<10)

TX=1;

m=0;

while(m<5)

TX=0;

}

void v1() // 2MS高电平500us低电平{

m=0;

while(m<20)

TX=1;

m=0;

while(m<5)

TX=0;

}

void v2() // 4MS高电平4ms低电平

{

m=0;

while(m<40)

TX=1;

m=0;

while(m<40)

TX=0;

}

void v3() // 1MS高电平500us低电平{

m=0;

while(m<10)

TX=1;

m=0;

while(m<5)

TX=0;

}

void delay_315()

{

uchar i,j;

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

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

}

//接收程序

#include"reg52.h"

#define uchar unsigned char

sbit RX=P3^3;

sbit red0=P0^0;

sbit red1=P0^1;

sbit red2=P0^2;

sbit red3=P0^3;

sbit red4=P0^4;

uchar m;

bit n;

void main()

{

uchar a,b,c,p,x,y; //定义存取的数据

TMOD=0X01;

TH0=(65536-100)/256; //开定时器0

TL0=(65536-100)%256;

EA=1;

ET0=1;

TR0=1;

EX1=1;

IT1=1;

P0=0XFF;

p=5;

x=0;

相关文档
最新文档