|
楼主 |
发表于 2010-10-31 21:37:41
|
显示全部楼层
回复【14楼】gallle
我做的调整是这样的,一个中断0专门检测过零信号。在里边通过当前的输出给出一个延时时间(用0.14ms的倍数)我要求的精度不高。
每次加减的时候,时间长度加减1。
定时中断0.14ms一次,设定2个变量做红外解码。一个变量做调光时间调整。
以下所有变量都是全局或静态变量。
中断0程序
if ‘时间长度’>‘最大时间长度’,‘时间长度’=‘最大时间长度’
if ‘时间长度’=0
{
调用‘关闭可控硅函数’}
‘延时时间’=0
else {
调用‘打开可控硅函数’
‘延时时间’=0
}
中断0程序结束
定时中断函数(0.14ms)
if ‘延时时间’>=‘时间长度’
{
调用‘关闭可控硅函数’
}
else ‘延时时间’+1
‘红外本地时基’取反
if ‘红外本地时基’//用0.28ms解码
{ ......
-----------------------------------------------------------------------
再次麻烦大家看看我的调试过程,看哪里有问题.
参考上面的方法自己理解是:在定时器中断中同时做解码与调光处理.
思路;按时基法做解码,在时间推算到10ms时去处理调光程序,返回继续解码(理论上是只用50us时间,可能多一点,不会影响解码).
900us 起始码 (大约27个时基
450us 结果码 (大约13个时基
0 = 330us + 330us (
1 = 330us + 660 (大约1000us) (
过零检测 10ms (大约303个时基
时基=33us ,解码高电平与低电平识别500us (大约15个时基
用R4计数时基满255就清0,解码开始打开timer 0 ,方式2 . INC R4,当解码程序解码时,时间到10ms就去处理过零检测信号(时基法跟踪时间),返回后继续解码,当没有解码信号时一直等待处理过零检测信号
问题:
当解码到区分高低电平时,0 = 330 低 + 330 高,识别500us时间后剩余160us(大约5个时基) ,
但如果是高电平时,1 = 330 低 + 660 高,识别500us时间后剩余160us(大约13个时基) ,
但编码中"0","1"时间长度不同,这样R4中的时基标志就没法跟踪了,一时没有想到如何下一步,如何处理? |
|