新人求教,这个433mhz无线模块收发程序里的结束码起什么作用

2019-07-15 15:20发布

这个程序不是我写的
这是发送端:#include <STC12C2052AD.H> //单片机头文件

sbit OUT  = P1 ^ 0;
sbit LED  = P1 ^ 7; //

/*********************************************************************************************
函数名:毫秒级CPU延时函数
调  用:DELAY_MS (?);
参  数:1~65535(参数不可为0)
返回值:无
结  果:占用CPU方式延时与参数数值相同的毫秒时间
备  注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
        unsigned int i;
        while( a-- != 0){
                for(i = 0; i < 600; i++);
        }
}
/*********************************************************************************************/


/**********************************************************************************************/
void ST (void){//开始码
        OUT = 1; //
        DELAY_MS (6);
        OUT = 0; //
        DELAY_MS (4);
}
/**********************************************************************************************/
void BT (bit s){//数据位码
        OUT = 1;
        DELAY_MS (1);
        OUT = 0;
        DELAY_MS (1);
        if(s){
                DELAY_MS (1);
        }
}
/**********************************************************************************************/
void MT (unsigned char a){//字节发送
        unsigned char i,n;

        for(i=0;i<8;i++){
                n = a & 0x80;//1000 0000
                a = a << 1;//0000 1010
                if(n == 0x80){
                        BT(1);
                }else{
                        BT(0);
                }
        }
}
/**********************************************************************************************/
void END (void){//结束码
        MT(0x00); //
}
/**********************************************************************************************/

/*********************************************************************************************
函数名:主函数
调  用:无
参  数:无
返回值:无
结  果:程序开始处,无限循环
备  注:
/**********************************************************************************************/
void main (void){
        while(1){
        
                ST(); //
                MT(0x93); // 0x05 = 0000 0101
                MT(0x94); // 0x05 = 0000 0101
                MT(0x95); // 0x05 = 0000 0101
                MT(0x96); // 0x05 = 0000 0101
                END(); //
                DELAY_MS (1000);
        }
}

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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
時雨
1楼-- · 2019-07-15 21:10
这是接收端,延时函数没有使用:
#include <STC12C2052AD.H> //单片机头文件

sbit IN =P3^7;
sbit LED=P1^7;

unsigned char Ir_Buf[4]; //用于保存解码结果

/*********************************************************************************************
函数名:毫秒级CPU延时函数
调  用:DELAY_MS (?);
参  数:1~65535(参数不可为0)
返回值:无
结  果:占用CPU方式延时与参数数值相同的毫秒时间
备  注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
        unsigned int i;
        while( a-- != 0){
                for(i = 0; i < 600; i++);
        }
}
/*********************************************************************************************/


/*********************************************************************************************/
unsigned int Ir_Get_Low()
{
TL1=0;
TH1=0;
TR1=1;
while(IN == 0 && (TH1&0x80)==0);               
TR1=0;           
return TH1*256+TL1;
}
/*********************************************************************************************/
unsigned int Ir_Get_High()
{
TL1=0;
TH1=0;
TR1=1;
while(IN ==1 && (TH1&0x80)==0);
TR1=0;
return TH1*256+TL1;
}
/*********************************************************************************************/
void main(void){
        unsigned int temp;
        unsigned char i,j;
        TMOD=0x11;

        while(1){
                restart:
                while(!IN);
                temp=Ir_Get_High();
                if(temp<5000 || temp>8000){
                        goto restart;       
                }
                temp=Ir_Get_Low();
                if(temp<3000 || temp>6000){
                        goto restart;       
                }

                for(i=0;i<4;i++){ //4个字节
                        for(j=0;j<8;j++){ //每个字节8位
                                temp=Ir_Get_High();
                                if(temp<500 || temp>1500){
                                        goto restart;
                                }
                                temp=Ir_Get_Low();
                                if(temp<500 || temp>2500){
                                        goto restart;
                                }
                                Ir_Buf[i]<<=1;
                                if(temp>2000){
                                        Ir_Buf[i]|=0x01;
                                }
                        }
                }
                if(Ir_Buf[3]==0x96){LED=~LED;}
        }
}
/*********************************************************************************************/
电子工程师2014
2楼-- · 2019-07-15 23:06
 精彩回答 2  元偷偷看……
jiwenjie1314
3楼-- · 2019-07-16 00:38
学习了!
深圳喆华电子科技
4楼-- · 2019-07-16 02:03
433模块,目前喆华在此领域主要的模块有ZM4301PD01。

调光组网模块.png
jiwenjie1314
5楼-- · 2019-07-16 03:53
结束码用来校验数据有没有接收完全!

一周热门 更多>