打印
[51单片机]

单片机写的红外收发程序,但第一次发送会失败(附上程...

[复制链接]
966|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nczywq|  楼主 | 2015-7-22 20:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
红外线无线通讯.zip (101.32 KB)

在红外发送里面要使用两次send(count);从机才能正确收到,只是在开机第一次发送会失败。
检查原因是发送启始信号9ms高电平时,在从机发现第一次发送的9ms高电平,他收到的只有4ms,接受程序中发现启始信号出错,就停止接受了,但是只失败第一次,以后就不会失败了,哪位大神能看看问题出在哪里?

相关帖子

沙发
datouyuan| | 2015-7-24 10:55 | 只看该作者
void hongwai_init()
{
        EA=1;
        ET0=1;
        TMOD |= 0x01;                //设置定时器模式
        TR0=0;
        TF0=0;
}


你不打算使用T0中断,ET0应为0.
T0中断响应后,会自动使TF0=0;程序将卡在wave()函数中。发送不应该会成功。

使用特权

评论回复
板凳
ayb_ice| | 2015-7-24 11:34 | 只看该作者
这程序能工作就已经是奇迹了

都没有T0中断程序

使用特权

评论回复
地板
xyz549040622| | 2015-7-24 16:21 | 只看该作者
代码都不贴上来,还得下载解压。

使用特权

评论回复
5
nczywq|  楼主 | 2015-7-30 18:18 | 只看该作者
datouyuan 发表于 2015-7-24 10:55
你不打算使用T0中断,ET0应为0.
T0中断响应后,会自动使TF0=0;程序将卡在wave()函数中。发送不应该会成功 ...

T0用来计时的。要用到,程序只是在第一次发送会失败,第二次以后发送就能成功

使用特权

评论回复
6
nczywq|  楼主 | 2015-7-30 18:22 | 只看该作者
ayb_ice 发表于 2015-7-24 11:34
这程序能工作就已经是奇迹了

都没有T0中断程序

if(TF0) break;
这代码用汇编看,用时2us,
IR=0,后,跟4个if(TF0) break;
用时就是9us后,翻转电平用时1us,后面再跟8个if(TF0) break;,用时17us。合在一起刚好26us。这不就是38Khz的波型吗?

使用特权

评论回复
7
datouyuan| | 2015-7-31 09:29 | 只看该作者
nczywq 发表于 2015-7-30 18:18
T0用来计时的。要用到,程序只是在第一次发送会失败,第二次以后发送就能成功 ...

怎么还没理解?

不是说T0没用,是说没有使用T0的中断服务程序。

ET0=1;必须要中断服务函数。

使用特权

评论回复
8
datouyuan| | 2015-7-31 09:46 | 只看该作者
你允许了某个中断,就必须要有对应的中断服务程序。

你的程序有这么明显的问题,所以3楼说“这程序能工作就已经是奇迹了”。

使用特权

评论回复
9
nczywq|  楼主 | 2015-8-11 20:32 | 只看该作者
datouyuan 发表于 2015-7-31 09:46
你允许了某个中断,就必须要有对应的中断服务程序。

你的程序有这么明显的问题,所以3楼说“这程序能工作 ...

谢谢你们两位了,程序我改成中断发送载波了。现在成功了

使用特权

评论回复
10
nczywq|  楼主 | 2015-8-11 20:33 | 只看该作者
datouyuan 发表于 2015-7-31 09:29
怎么还没理解?

不是说T0没用,是说没有使用T0的中断服务程序。

谢谢你们两位了,程序我改成中断发送载波了。现在成功了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

60

帖子

2

粉丝