2020-01-19 19:36发布
zyw19987 发表于 2014-5-29 13:50 顺便问这种方式硬件如何做到几千米的距离?
123.jpg (98.54 KB, 下载次数: 0)
下载附件
2014-5-29 15:23 上传
最多设置5个标签!
这个暂时就不知道了,我这个应用在只有几米的产品上。
根据“jinbangzhou” 提供的代码,调整后可以实现通信,但通信的质量还需要进一步测试。
现附上相应代码,请各位提点。。
1) 发送部分 MCU HT BS84B08-3 内部16M 定时器: 250us中断一次(2K无源蜂鸣器)
#define p_data_out _pa1 //通信口
#define temp_send_byte 4 //4字节数据,后2字节为前2字节的反码
bit b_send_ok; //发送数据完成标志位
unsigned char r_send_cnt; //发送时基
unsigned char r_send_cnts;//Bit0,Bit1计数
unsigned char r_send_mode;//发送数据状态
unsigned char r_send_data[temp_send_byte];//发送数据缓存器
unsigned char r_send_num; //发送数据位数
unsigned char r_send_byte;//发送数据字节数
//====================================================================
//=== 测试函数 ===//
void test_process(void)
{
bit b_send_ok = 0; //清发送完成标志位
r_send_data[0] = 0x04;
r_send_data[1] = 0xf0;
r_send_data[2] = 0xfb;
r_send_data[3] = 0x0f;
}
//====================================================================
//=== 中断服务函数 ===//
#pragma vector Interrupt_Extemal @ 0x0c
void Interrupt_Extemal()
{
//======================================//
r_t2500us ++;
if(r_t2500us >= 10)
{
r_t2500us = 0;
b_t2500us = 1;
r_t100ms ++;
if(r_t100ms >= 40)
{
r_t100ms = 0;
b_t100ms = 1;
}
r_t500ms ++;
if(r_t500ms >= 200)
{
r_t500ms = 0;
b_t500ms = 1;
}
}
//======================================//
if(b_send_ok == 0)//发送请求
{
r_send_cnt++;
switch(r_send_mode)
{
case 0:
if(r_send_cnt <= 80)
{
p_data_out = 1;
}
else if(r_send_cnt <= 160)//发送起始码
{
p_data_out = 0;
}
else
{
r_send_cnt = 0;
r_send_mode = 1;//进入发送数据码
}
break;
case 1:
if(r_send_data[r_send_byte] & (1 << r_send_num))
{
r_send_cnts = 20;
}
else
{
r_send_cnts = 10;
}
if(r_send_cnt <= (r_send_cnts / 2))// 脉冲一半时间发低电平
{
p_data_out = 0;
}
else if(r_send_cnt <= r_send_cnts)// 脉冲一半时间发高电平
{
p_data_out = 1;
}
else
{
r_send_cnt = 0;
r_send_num ++;
if(r_send_num >= 8)//发送完8位
{
r_send_num = 0;
r_send_byte++;
if(r_send_byte >= temp_send_byte)//发送多字节
{
r_send_byte = 0;
r_send_mode = 2;//进入结束码
}
}
}
break;
case 2://结束码
if(r_send_cnt <= 20)
{
p_data_out = 0;
}
else if(r_send_cnt <= 40)
{
p_data_out = 1;
}
else
{
p_data_out = 0;
r_send_cnt = 0;
b_send_ok = 1;//发送完成
r_send_mode = 0;//恢复到头码状态
}
break;
default:
break;
}
}
}
波形图:
123.jpg (98.54 KB, 下载次数: 0)
下载附件
2014-5-29 15:23 上传
一周热门 更多>