梦想当极客的小芦 2021-03-07 19:29 采纳率: 0%
浏览 372
已结题

求代码!怎么用51单片机 操控SYN115和 SYN480无线通信?

不懂SYN的时序 和 一帧数据有多少 

求大佬解答

  • 写回答

1条回答 默认 最新

  • 梦想当极客的小芦 2021-03-08 13:58
    关注
    /********************************************
    现定义如下:
    
    下降沿:1ms的高电平,随后500us的低电平。
    起始位:4ms的高电平,随后4ms的低电平。
    数据1: 2ms的高电平,随后500us的低电平。
    数据0: 1ms的高电平,随后500us的低电平。
    结束位:4ms的低电平。
    **********************************************/
    //本程序已经过调试硬件测试可用(STC15F104W),在SYN480的信号输出脚要接信号放大电路
    //发射模块c程序
    
    #include<reg52.h>  
    #define MCU_FREQ            12000000	//设置晶振频率
    #define uchar unsigned char 
    sfr P3M0=0xb2;
    
    sbit key0=P3^0;  
    
    sbit key1=P3^1; 
    
    
    sbit TX=P3^2; //senddata wire
    
    uchar m; 
    
    void v0(); //1MS高电平500us低电平	数据0 
    
    void v1(); // 2MS高电平500us低电平		 数据1
    
    void v2(); // 4MS高电平4ms低电平	   起始位
    
    void v3();  // 1MS高电平500us低电平 	  下降沿
    
    
    void delay_315(); 
    
    void main() 
    { 
    	uchar i;
    	bit dong=0;  //开定时器0中断
    	TMOD=0X01; 
    	P3M0=0x08;   //open 89 INT0
    	TH0=(65536-100)/256; 
    	TL0=(65536-100)%256; 
    	EA=1; 
    	ET0=1; 
    	TR0=1; 
    	TX=0; 
    	while(1)  
    	{ 
    		if(key0==0)     //发送指令0
    		{ 
    			delay_315(); 
    			while(key0==0)
    			{
    				v3();
    				v2();
    				v0();   //senddata 0
    				v0();   //senddata 0
    				v0();
    				m=0;
    				while(m<40);  //4ms低电平
    			} 
    			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低电平	数据0 
    { 
    	m=0; 
    	while(m<10) 
    	TX=1; 
    	m=0; 
    	while(m<5) 
    	TX=0; 
    } 
    
    void v1()   // 2MS高电平500us低电平		 数据1
    { 
    	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++); 
    } 

    这是发送模块的代码 

    
    /*****************************************
    本程序适用于STC15F/L104W
    ****************************************/
    
    /*******************************************
    现定义如下:
    
    下降沿:1ms的高电平,随后500us的低电平。
    起始位:4ms的高电平,随后4ms的低电平。
    数据1:2ms的高电平,随后500us的低电平。
    数据0:1ms的高电平,随后500us的低电平。
    结束位:4ms的低电平。
    ******************************************/
    
    
    //接收程序
    
    #include"reg52.h"  
    #define MCU_FREQ                          12000000	//设置晶振频率
    #define uchar unsigned char 
    sfr P3M0=0xb2;
    sfr P3M1=0xb1;
    sbit RX=P3^2; 
    
    sbit red0=P3^0; 
    
    sbit red1=P3^1; 
    
    uchar m; 
    bit n;  
    void main() 
    { 
    uchar a,b,c,p,x,y;    //定义存取的数据
    TMOD=0X01; 
    P3M1=0x04;
    TH0=(65536-100)/256; //开定时器0 
    TL0=(65536-100)%256; 
    EA=1; 
    ET0=1; 
    TR0=1; 
    EX0=1; 
    IT0=1; 
    //P0=0Xff; 
    //P1=0x00;
    red0=1;
    red1=1;
    p=5; 
    x=0;  
    while(1) 
    { 
    if(n==1) 
    { 
    while(RX==0); //读取协议下降沿
    m=0; 
    EX0=0; 
    while(RX==1); 
    if(m>35&&m<45) //读取协议起始位高电平
    {
    m=0; 
    while(RX==0); 
    if(m>35&&m<45)  //读取协议起始位低电平
    {
    m=0;
    
    while(RX==1);   //读取数据1 
    if(m>5&&m<15) a=0; 
    if(m>15&&m<25)a=4; 
    while(RX==0); 
    m=0; 
    
    while(RX==1);   //读取数据2  
    if(m>5&&m<15) b=0; 
    if(m>15&&m<25)b=2; 
    while(RX==0); 
    m=0;  
    
    while(RX==1); //读取数据3  
    if(m>5&&m<15) c=0; 
    if(m>15&&m<25)c=1; 
    while(RX==0); 
    m=0;  
    p=a+b+c;  
    x++;  
    if(x==1) y=p; 
    if(x==2) //连续收到两次数据才进入匹配
    { 
    x=0; 
    if(y==p) 
    { 
    switch(p) 
    
    {  
    case 0:red0=0;red1=1;
           break;
    case 1:red0=1;red1=0;
           break;
    case 2:red0=1;red1=1; 
           break;
    case 3:red0=1;red1=1;  
           break;
    case 4:red0=1;red1=1;
           break;
           }
          }
         }
        }
       }
    EX0=1;  }
      
     }
    }
    
    void INT_0() interrupt 0
    
    {                     
      n=1; 
    } 
    void timer0() interrupt 1 
    { 
    TH0=(65536-100)/256; 
    TL0=(65536-100)%256; 
    m++; 
    TF0=0; 
    } 
    

    这是接收 代码  但是 我不知道哪里搞错了 现象出不了来   我想用51单片机实现无线模块的 发送接收的  求大佬看一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试