我的那台用STC12做的主机已经有标准的NEC红外线接收设备,可以用标准的遥控器控制了,而两个串口都已经被占用了,要想用另一个单片机给它下点控制命令只能通过红外线了, 在摸懂了这个编码后,就可以做另外的实验,第一的想法就是要加快传输速率,一个码要108MS实在太慢,那是因为是“遥控”,距离远,如果发射管和接收管距离短,几乎面对面,提高速率是完全可能的,正在构思。 |
用单片机通过红外线向另一个单片机输入控制讯号没必要编码,可以模拟串口,就像无线发射。 不过你的研究还是有用的,可以当红外遥控器用。 |
终于把发送一个完整遥控码的程序写完了,原来发射完所有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 |