打印
[51单片机]

新人问红外(菜鸟卡住被虐心,望高手指教)

[复制链接]
楼主: d865841995
手机看帖
扫描二维码
随时随地手机跟帖
21
d865841995|  楼主 | 2014-8-31 10:05 | 只看该作者 回帖奖励 |倒序浏览
ningling_21 发表于 2014-8-30 14:21
第一句:你说的12X26T什么意思?我产生38K用的是定时器13US一个周一反转一次,也就是占空比1:2的载波。

...

没有成功,在找原因

使用特权

评论回复
22
d865841995|  楼主 | 2014-8-31 10:09 | 只看该作者
gx_huang 发表于 2014-8-30 14:27
这个程序肯定有问题的了,输出的波形肯定不是你想要的波形了。
定时器中断,不需要再次赋值定时器寄存器的 ...

首先,定时器中断里怎么不用再次赋值呢?
第二:0X100-0XF2是什么意思?不太懂
我回头写个用延时的试试,到时候传上来大家看看哈。光顾用中断,忘了用延时了。

使用特权

评论回复
23
gx_huang| | 2014-8-31 10:40 | 只看该作者
d865841995 发表于 2014-8-31 10:09
首先,定时器中断里怎么不用再次赋值呢?
第二:0X100-0XF2是什么意思?不太懂
我回头写个用延时的试试, ...

8位自动重装载的,当然不用再次赋值了。
从0XF2到0X100溢出的数值呀。
你仔细看看51的内部资源的功能吧,指令时间,C对应的汇编代码是什么,也应该了解一下。

使用特权

评论回复
24
d865841995|  楼主 | 2014-8-31 10:49 | 只看该作者
wh6ic 发表于 2014-8-30 14:30
1、13uS X 2 = 26,一条指令12个时钟周期,你产生的是13uS + 13uS的占空比为1:1
2、软件中断服务响应时 ...

额,那个。13us X 2 = 26不就是38K么,怎么和12扯上的关系?12我算定时器初值的时候才用了!

中断服务响应时间,这个概念简单百度了下。中断是一样的,在进入前都是保存下地址什么的,为什么时间会不一样?(似乎不是很好解释,书上哪里有么)

手册出了点问题,打不开了。回头我看看要有不明白的再问你哈。谢谢哈

使用特权

评论回复
25
d865841995|  楼主 | 2014-8-31 11:04 | 只看该作者
coody 发表于 2014-8-30 14:48
以下的描述,跟用什么MCU无关,效果一样。
在所有无线遥控中,红外收发是最简单的,只要按其时序参数,并允 ...

1、接收的程序不是我写的,不过用的确实是外中断。那个弱弱的问一句,你说的100US查询是什么?要查询不应该是先查询红外的引导码9ms+4.5ms么?
我在接收程序里加大了他的范围,可效果不甚很好,我再调调试下。至于去毛刺的代码,我再找找资料什么的研究下吧。
2、对了,我的避障下模块用了一个74HC00d的芯片,我认为它就是用来产生载波的,电路没看懂,回头传上来你帮我分析下可以么?
3、接收头分脉冲型倒是忽略了,While(1)不应该了。我的接收头是HS0038B手册我有可没找到哪里有写它是脉冲的还是电平的啊?最后弱弱问下是不是脉冲型接收头就没办法连续输出低电平呢?(我的避障模块上的小灯可以一直亮啊,难道是闪烁太快造成的?)
谢谢哈!

使用特权

评论回复
26
d865841995|  楼主 | 2014-8-31 11:05 | 只看该作者
我这个菜鸟在这里感谢大家的回答,让我明白了好多。谢谢大家的无私,真心感谢。

使用特权

评论回复
27
d865841995|  楼主 | 2014-8-31 20:55 | 只看该作者
gx_huang 发表于 2014-8-31 10:40
8位自动重装载的,当然不用再次赋值了。
从0XF2到0X100溢出的数值呀。
你仔细看看51的内部资源的功能吧, ...

这个程序用的不是模式2,是模式1需要手动赋初值的。还有就是不应该是0XF2到0XFF溢出的数值么?
额,指令时间我只找到说指令分  (单/双/三)字节指令(单/双/四)机器周期 这几种,不知道你的意思是要根据指令分类来计算所需时间么?我对汇编是一窍不通,这个要了解有点费时,光用C可以么?

使用特权

评论回复
28
gx_huang| | 2014-9-1 08:39 | 只看该作者
d865841995 发表于 2014-8-31 20:55
这个程序用的不是模式2,是模式1需要手动赋初值的。还有就是不应该是0XF2到0XFF溢出的数值么?
额,指令 ...

你要用模式2,不需要重新赋值,赋值也需要时间的,你的定时器才14个机器周期,你说可以执行几条指令呢?进中断、返回中断需要时间,你还有赋值语句,还有双字节的加指令,14T肯定不够的了。所以,你要看看编译后的汇编代码,大致计算一下指令的执行时间,毛估估肯定不够的。

使用特权

评论回复
29
d865841995|  楼主 | 2014-9-1 12:29 | 只看该作者
gx_huang 发表于 2014-9-1 08:39
你要用模式2,不需要重新赋值,赋值也需要时间的,你的定时器才14个机器周期,你说可以执行几条指令呢? ...

后来我改成模式2了,初值给的是F3,这样能改善一些吧。还有汇编代码的时间怎么计算啊。进中断,返回中断什么的都需要时间,那我把中断的初值尝试着在改小些,能有效果么?

使用特权

评论回复
30
gx_huang| | 2014-9-1 12:32 | 只看该作者
汇编代码的时间,自己看数据手册的指令代码。
中断的时间长了,输出就不是38KHz了。
自己想想吧,到此为止了,该说的都已经说了。

使用特权

评论回复
31
wh6ic| | 2014-9-1 14:28 | 只看该作者
d865841995 发表于 2014-8-31 20:55
这个程序用的不是模式2,是模式1需要手动赋初值的。还有就是不应该是0XF2到0XFF溢出的数值么?
额,指令 ...

看了下你的源码,感觉你对定时、软件执行时间等还没摸到门道;  驱动电路图也看到了,你的思路也问题比较大;貌似这种时间比较紧张的控制难度还比较大。所以一是建议你使用它的6T选项,再是建议你使用 89C52RC 的T2定时器,用它的定时翻转功能来实现目的;另外一种建议是换用STC的引脚兼容的单周期MCU,带有比较完善PWM的型号就更容易了。
打开PDF文件有问题这个比较严重,要搞这行,目前这是最基本得到技术资料的手段,上  http://www.****ducst/datasheet/stc/STC-AD-PDF/STC89C51RC-RD+_GUIDE-CHINESE.pdf 去再下载一遍。

使用特权

评论回复
32
d865841995|  楼主 | 2014-9-3 19:47 | 只看该作者
gx_huang 发表于 2014-9-1 12:32
汇编代码的时间,自己看数据手册的指令代码。
中断的时间长了,输出就不是38KHz了。
自己想想吧,到此为止 ...

额,我的意思是中断时间减少,增大初值。这样把指令消耗的时间平衡掉,可以不?

使用特权

评论回复
33
d865841995|  楼主 | 2014-9-3 19:56 | 只看该作者
wh6ic 发表于 2014-9-1 14:28
看了下你的源码,感觉你对定时、软件执行时间等还没摸到门道;  驱动电路图也看到了,你的思路也问题比较 ...

额,定时器什么的我只会简单的控制寄存器,算初值。至于软件执行时间就真的不懂了。怎么样算摸到门道?我程序是思路上的问题还是其他哪里细节注意不好。望指教。
驱动电路怎么了????这个还有问题么???????
我会尝试用6T模式的,我手上还有一个STC89C54我找资料看下,它会不会有1T模式!!
最后可以推荐新人看点什么资料么?还是做点什么练习?感觉很多东西明白点,却还不是很清楚似得

使用特权

评论回复
34
gx_huang| | 2014-9-3 20:04 | 只看该作者
那是因为你没有理解MCU的基本工作原理。
MCU的指令系统,执行时间,定时器原理,这是最基本的。
有的人不懂微机原理,但是可以编程,在PC上处理一些东西。
但是,他不知道MCU的原理,就无法设计实用的MCU程序,就好比你。

使用特权

评论回复
35
d865841995|  楼主 | 2014-9-3 20:10 | 只看该作者
/*
* 获取低电平时间
*/
unsigned int Ir_Get_Low()
{
        TL0 = 0;
        TH0 = 0;
        TR0 = 1;
        while (!Ir_Pin && (TH0&0x80)==0);  
              
        TR0 = 0;           
        return (TH0 * 256 + TL0);
}

这是我解码程序中的一小段,没太看明白,感觉是获取低电平的时间,可这逻辑关系,没太懂。而且还想问问大家这个自函数返回值最大是多少?本人愚见认为是7*256+255=2047.可在程序后面调用时有个小于7833就不执行后面语句的命令。
大家来帮帮看看,不胜感激!

使用特权

评论回复
36
d865841995|  楼主 | 2014-9-3 20:31 | 只看该作者
是我理解错了,最大值应该是7F*256+255。大家觉得我这么理解对不?

使用特权

评论回复
37
chen_jhhb| | 2014-9-3 22:09 | 只看该作者
有点晕

使用特权

评论回复
38
d865841995|  楼主 | 2014-9-4 08:15 | 只看该作者
chen_jhhb 发表于 2014-9-3 22:09
有点晕

有时间我传整个程序大家来看看

使用特权

评论回复
39
wh6ic| | 2014-9-4 09:25 | 只看该作者
d865841995 发表于 2014-9-3 19:56
额,定时器什么的我只会简单的控制寄存器,算初值。至于软件执行时间就真的不懂了。怎么样算摸到门道?我 ...

STC89C54只有6T模式,没有1T模式。但这个系列还是有强悍的地方,它有的型号5V电源时,主频可以到80MHz!
你看看你的芯片上标的最大主频是多少,然后将晶振换成高频的,比如36MHz甚至更高,同时开启6T模式,也许这些问题就迎刃而解了。不过也需要注意选择的晶振是否是基频晶振问题,多问问厂家吧。

使用特权

评论回复
40
wh6ic| | 2014-9-4 09:58 | 只看该作者
d865841995 发表于 2014-8-30 13:04
这是我在红外发射的电路图(万用表量出来的)。还有就是红外的协议了。
...

13L的图有问题。
  建议:Q1换成PNP,R1减小为102,R2减小为420甚至更小。
        或者你能明白IO口的输出模式是怎么回事,在 S信号 侧增加强上拉,然后Q1和LED、电阻位置互换一下,各阻值也需要大幅减小。

使用特权

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

本版积分规则