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

[复制链接]
1461|9
 楼主| nczywq 发表于 2015-7-22 20:22 | 显示全部楼层 |阅读模式


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
datouyuan 发表于 2015-7-24 10:55 | 显示全部楼层
  1. void hongwai_init()
  2. {
  3.         EA=1;
  4.         ET0=1;
  5.         TMOD |= 0x01;                //设置定时器模式
  6.         TR0=0;
  7.         TF0=0;
  8. }


你不打算使用T0中断,ET0应为0.
T0中断响应后,会自动使TF0=0;程序将卡在wave()函数中。发送不应该会成功。
ayb_ice 发表于 2015-7-24 11:34 | 显示全部楼层
这程序能工作就已经是奇迹了

都没有T0中断程序
xyz549040622 发表于 2015-7-24 16:21 来自手机 | 显示全部楼层
代码都不贴上来,还得下载解压。
 楼主| nczywq 发表于 2015-7-30 18:18 | 显示全部楼层
datouyuan 发表于 2015-7-24 10:55
你不打算使用T0中断,ET0应为0.
T0中断响应后,会自动使TF0=0;程序将卡在wave()函数中。发送不应该会成功 ...

T0用来计时的。要用到,程序只是在第一次发送会失败,第二次以后发送就能成功
 楼主| 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的波型吗?
datouyuan 发表于 2015-7-31 09:29 | 显示全部楼层
nczywq 发表于 2015-7-30 18:18
T0用来计时的。要用到,程序只是在第一次发送会失败,第二次以后发送就能成功 ...

怎么还没理解?

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

ET0=1;必须要中断服务函数。
datouyuan 发表于 2015-7-31 09:46 | 显示全部楼层
你允许了某个中断,就必须要有对应的中断服务程序。

你的程序有这么明显的问题,所以3楼说“这程序能工作就已经是奇迹了”。
 楼主| nczywq 发表于 2015-8-11 20:32 | 显示全部楼层
datouyuan 发表于 2015-7-31 09:46
你允许了某个中断,就必须要有对应的中断服务程序。

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

谢谢你们两位了,程序我改成中断发送载波了。现在成功了
 楼主| nczywq 发表于 2015-8-11 20:33 | 显示全部楼层
datouyuan 发表于 2015-7-31 09:29
怎么还没理解?

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

谢谢你们两位了,程序我改成中断发送载波了。现在成功了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

83

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部