找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

以STC12单片机用最笨的方法产生最精准的红外线遥控讯号

查看数: 2656 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-12-28 04:23

正文摘要:

     想用单片机通过红外线向另一个单片机输入控制讯号,所以就得自己写个能根据NEC遥控码的发射程序,首先是产生38K的载波,用11.0592m的晶振,在STC12的P3.4脚用T0定时器可获得38.2K的载波, ...

回复

ID:283954 发表于 2018-12-29 13:02
我的那台用STC12做的主机已经有标准的NEC红外线接收设备,可以用标准的遥控器控制了,而两个串口都已经被占用了,要想用另一个单片机给它下点控制命令只能通过红外线了, 在摸懂了这个编码后,就可以做另外的实验,第一的想法就是要加快传输速率,一个码要108MS实在太慢,那是因为是“遥控”,距离远,如果发射管和接收管距离短,几乎面对面,提高速率是完全可能的,正在构思。
ID:343102 发表于 2018-12-29 10:45
用单片机通过红外线向另一个单片机输入控制讯号没必要编码,可以模拟串口,就像无线发射。
不过你的研究还是有用的,可以当红外遥控器用。
ID:283954 发表于 2018-12-29 01:02
终于把发送一个完整遥控码的程序写完了,原来发射完所有32BIT的码后得加上一个560US载波的停止位,否则最后那个位是0的时候就会出错,另外发现 CPL 33H 这个命令是无效的,而编译软件并没有报错,执行时 33H 根本没有对補,而必须先把33H送进A,CPL A 后,再送回33H才行。

红外线的传输速率是很有限的,因为一个周期是108MS,所以还得在传送后DELAY,否则接收端无反应

START:
MOV A, #01010101B
LCALL SENTINFRA
MOV A, #10101010B
LCALL SENTINFRA
JMP START

SENTINFRA:            ;VALUE PUT A
MOV 32H, A            ;SAVE FOR RE-USE
MOV 33H, #11110000B   ;USER CODE
LCALL LEADINGBIT
;----------------USERCODE
MOV 30H, 33H
LCALL SENTBYTE
MOV A, 33H
CPL A
MOV 30H, A
LCALL SENTBYTE
;----------------SCANCODE
MOV 30H, 32H
LCALL SENTBYTE
MOV A, 32H
CPL A
MOV 30H, A
LCALL SENTBYTE
LCALL STOPBIT
LCALL DELAY3
RET

SENTBYTE:
MOV 31H, 30H
MOV 34H, #8
SENTBYTE1:
MOV A, 31H
RRC A
MOV 31H, A
JC BIT1
LCALL ZEROBIT
JMP BITEND
BIT1:
LCALL ONEBIT
BITEND:
DJNZ 34H, SENTBYTE1
RET

DELAY3:
MOV 56H, #255 ;
SLOWDOWN0:
MOV 55H, #100  ;255
SLOWDOWN:
MOV 57H, #1   ;1=3.64M 11=18M
SLOWDOWN2:
DJNZ 57H, SLOWDOWN2
DJNZ 55H, SLOWDOWN
DJNZ 56H, SLOWDOWN0
RET

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表