关于红外遥控的若干问答Word格式.docx
- 文档编号:22669121
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:12
- 大小:21.16KB
关于红外遥控的若干问答Word格式.docx
《关于红外遥控的若干问答Word格式.docx》由会员分享,可在线阅读,更多相关《关于红外遥控的若干问答Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
----5msdelay----------------
MOVLW
06H
防止抖动,延时5ms
MOVWF
30H
LOOP4
MOVLW0FFH
MOVWF31H
LOOP5
DECFSZ31H,1
GOTOLOOP5
DECFSZ30H,1
GOTOLOOP4
-----------------------------
BTFSCPORTA,0
GOTOBACK
遥控接收无效。
LOOP0
BTFSSPORTA,0
遥控接收,等待高电平出现,约9-5ms
GOTOLOOP0
------------测一个脉冲接收-----
STEP
MOVLWD'
32'
设置32位接收码的计数器.
MOVWFBIT32
STEP1
BTFSCPORTA,0
等待4.5ms
GOTOSTEP1
STEP2
BTFSSPORTA,0
GOTOSTEP2
180'
延时0.9ms,测试高电平的脉宽。
MOVWF29H
BCFSTATUS,C
WAIT
NOP
DECFSZ29H,1
GOTOWAIT
PA0TOC
GOTOC0
GOTOC1
C0
GOTOSTEP3
C1
BSFSTATUS,C
STEP3
4'
MOVWF2AH
MOVLW28H
28H是DAT8F的地址
MOVWFFSR
利用FSR进行间接寻址。
STEP4
RLFINDF,1
DECFFSR,1
DECFSZ2AH,1
GOTOSTEP4
DECFSZBIT32,1
MOVFADD8L,0
XORLW00H
BTFSSSTATUS,Z
低8位地址码不对,返回
MOVFADD8H,0
XORLW0FFH
GOTOBACK
MOVFDAT8,0
8位数据码不对,返回
MOVFDAT8F,0
8位数据反码不对,返回
GOTOREM_OK
代码接收正确
BACK
BSF20H,0
REM_OK
RETURN
回复
先清32位数据再接收.
然后每接收完8位后,RAM要清0
如;
**************RAM移位***************************
j1
incf
jsp1
8位计数寄存器
jsp2
32位数,计存器.
btfss
jsp1,3
是否有8位
goto
js
clrf
jsp1
movf
sj,0
移8位数到W
movwf
**
W到DATA
f
RAM地址加1
sj
注意这里!
!
*****************************
jsp2,5
检测是否接收完32位.
js
否,再检测.
这是6122和6121
IC的接收程序.
发表于:
2003-03-0417:
34:
51
小宝:
很高兴看到你的提示,不过我的程序不是按照每8位接收后经过RAM放入寄存器中,而是每位都经过4次循环移位后直接放入存放数据的寄存器中(参见接收程序中的STEP4),所以不可能按昭你所说的那样清0。
你的程序单独看是没有问题的。
我想关键在于发射编码究竟如何?
你所谓“第一次可以,以后就不行了”,是不是每次复位后的第一次发射和接受是正常的?
如果是这样的,说明还是连发的处理不是很合适。
发生连发时,应该将25H-28H清空。
否则第二次发射时,25H-28H已经有了部分不完整的数据,造成移位过程中的错误数据,接受失败。
我的意见不一定正确,仅供参考。
NEC遥控接收问题
NEC遥控接收问题出错在位接收上。
我看程序有点问题,主要是在接收位上,应该是每接受8位后才把FSR-1,在回到接受程序上。
如此进行4次可以接受32位的数据。
2003-03-0420:
46:
38
并不是位接收问题
我那程序的位接收问题不是先接收8位再保存的,那个4次循环指的是每接收一位后即改变STATUS标志位C,同时4个接收寄存器依次带C位移位,等到接收32位后(即第1位移位32次后恰好保存到了第一个接收寄存器的第7位,第2位移到了第6位)你可以自己演示一下,这样32位正好保存到了4个寄存器中。
可以参见我那段程序的STEP3,STEP4。
很感有这么多热心的朋友关心这个问题!
=========================
红外线遥控编码有几种类型
类型不知道,但格式有上千种
我要做个通用型的红外接收器,就是不管遥控器发送什么码,反正照收不误,然后按原样把它发送出去,我想用PIC做,你看要用哪种型号的控制器做较好!
既然是转发你管他格式干什么?
你又不解码,只要检测联接红外管的PIC的I/O口的电压变化就行了,再在另一个脚把他发送出去。
送你一个检测红外的小程序。
只不过要自己做一点电路。
点击浏览该文件
最后一位数据位的宽度如何检测!
!
以红外接收器为准,如果没有遥控信号的情况下,接收器的输出端是不是高电平,如果是,最后一位码,0.56ms低电平过后,接着是出现高电平对吧,那高电平的宽度如何确定就不好办了!
请教老兄!
红外接收目前用的比较多的有三种方法.
1,查询法,既软件不停地查询是否为低(遥控信号)然后通过精确延时读头码.和
数据0或1码.
2,读到有信号输入时开打开定时计数器,然后通过读定时器的中断次数,来判定头码和0,1的.
3RB0或RB4-RB7加定时器(或软件延时)利用输入中断的好处是可做实时控制.
如下:
***发射为6221,把接收到的码值送到ICD的PORTC口显示******
*******************************
org
0000h
nop
start
0004h
serv
**************************************************
start
bsf
status,rp0
体1
movlw
trisc
C口输出
0ffh
B口RB0输入
trisb
B'
00000100'
1:
64
option_reg
TMR0定时器
bcf
体0
intcon
10010000
intcon,7
开放INT下降沿中断
intcon,4
intcon,1
portc
loop
sleep
loop
*************现场保护********************************
serv
w_temp
swapf
status,0
status
status_temp
pclath,0
pclath_temp
pclath
***************遥控处理.******************************
btfsc
portb,0
检测RB0是否为0.
zdhh
RB0不为0,误中断.反回
call
delay8
调用8MS延时.头码检测.
检测头码
不是中断反回
delay5
延时5MS后进行数据检测.
检测RB0是否为高电平.
不是继续检测.
*********************************************
data1
20H
data2
21H
data3
22H
data4
24H
32位计数器
接收的数据寄存器
8位计数器
0x20
20H寄存器送W
fsr
由W送20H到FSR
jc
检测RB0是否为低电平.
jc
**************0和1数据检测****************************
js
delay1
延时1.3MS
检测头码过后是0还是1,
s1
检测的数据不"
1"
*************0数据处理*****************************
sj,c
数据是"
0"
rrf
sj,1
0数据右移到SJ寄存器
j1
**************1数据处理.*************************
s1
sj,c
sj,1
ddp
portb,0
ddp
indf
sj
10001111'
送IC高8位码
xorwf
data1,0
相减(Z:
1=结果为0;
0=结果不为0)
status,2
结果为0则下一步.
相减结果不为0中断返回
101010101'
低8位IC码检测
data2,0
status,2
zdhh
comf
data4,0
数据反码检测.暂不用.
subwf
data3,0
btfss
goto
data3,0
送数码到C口
接收完32位则中断返回
****************zdhh中断返回程序*********************
zdhh
pclath_temp,0
status_temp,0
交换STATUS与W容,将体选还原.
将W容送STATUS寄存器
w_temp,1
交换w_temp
w_temp,0
交换w_temp与w容,将w_temp?
retfie
中断返回,
****************8ms*********************************
delay8
intcon,5
intcon,2
D'
15'
tmr0
loop1
loop1
return
****************5ms*********************************
delay5
120'
loop2
loop2
****************1.3ms*******************************
delay1
intcon,5
240'
loop3
loop3
*************
end
错码的可能有两种
一个是字头对不好
一个是数据传输有错误特别是时序错误
后面的可以用软件校验
字头不好确认最好可以在软件规定上连续多发几个然后用移位方法判断有多次连续相同子头出现对齐字头比如连续出现20个10转换后表示准备发送数据然后等待10传输结束后跟着有一个字头如11110000这样后面就可以接数据了
A我在外面买了一个万能遥控器,他就是用pic16c57c作的,那就说明它是没有中断的,我真搞不懂他是怎么做的,它是没有解码芯片的,请问有谁知道,我现在也在做这个,有谁能提示一下,。
B这很容易
上次我用两片PIC16C57C作了一个发射与一个接收的小模块。
有效控制,没能出现乱码,但有一缺点就是会受到其它红外线产品的干扰!
C红外接受
用外中断,加定时,即可检测出编码,非常准确。
我用的是PIC16F72芯片。
D我使用红外线接受管加两级放大,看红外线的输出波形,用长虹的遥控器当信号源,在示波器上要打到10ms才能看到完整的信号波形,像个稳压后的波形一样的东西,我看了有关方面的书说,红外线信号时调制在38khz的信号上的,那我将示波器打到50ns上为什么看不到波形,这样的话程序不是没有办法编了,望哪位高人帮帮我,
E可以用CCP中的inputcapture(输入捕捉)功能,很好用的,仔细阅读一下inputcapture有关容,很容易的
在CCP的引脚上若有事件发生(可设置为上升沿,下降沿或其他方式),TMR1的容背记录,这样很准确的,即使中断响应较慢也没问题的,这样的功能来做红外遥控最恰当不过!
F回复红外定时接收原理
用RB0做中断(FIRST:
RISINGTRIG,SECOND:
FALLINGTRIG),同时启动TIMER2定时100US)计数.当下一个中断来临时,由TIMER2有88个数,9MS就检测出来。
其余时间,
类推。
注意,RBO的中断沿,要根据时序,来改变。
据此原理,很容易编出代码。
还有一个地方值得注意;
红外信号的衰减很厉害的,所以一定要考虑它的接受围的选择
其实用那种方法都可以,在接收数据时时间方面留够余量,这样对正确接收数据有好处
关于红外线接收的一点思路
我现在在做电视机红外线接受,发射器,看了一些书,书上说信号被调制在38khz的调制信号上,但我通过一颗红外接收管加两级放大后看红外线波形,示波器要打到10ms档上才能看到完整波形,照书上说的话应该打到50us档上就能看到波形了,而且这个波
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关于 红外 遥控 若干 问答
![提示](https://static.bdocx.com/images/bang_tan.gif)