红外线接收主程序:
ORG 0000H
AJMP RECE
ORG 0111H
RECE: MOV R5, # 4 ; 接收4位红绿灯信号
JB P2.0, $ ;
MOV R7, # 15 ;
RECE1: LCALL DELAY ; 调用一次子程序DELAY,产生一个26us的延时
DJNZ R7, RECE1 ;等待15个脉冲的时间
JB P2. 0, RECE1 ; 延时15个脉冲后Pl. 0=1,转RECE1重新检测
JNB P2. 0, $; 延时15个脉冲后P2. 0还是0传输开始再等编码中的高电平(如图8中E点和F点) (直接位不为1则转移)
GM: MOV R7, # 15 ; 编码中的高电平到来后,延时15个脉冲的时间
GM1: LCALL DELAY ; 调用一次子程序DELAY,产生一个26us的延时
DJNZ R7, GM1; 延时15个脉冲
JNB P2. 0, RE1: 延时15个脉冲后, P2. 0= 0转RE1, P2. 0= 1顺序执行
CLR C; P2.0= 1时应解码为0(图8中B点),使标志C清0
CLR A; 使A清0
RLC A; 把标志C= 0移入寄存器A中,经4次移位到A的高位
GM2: JB P2.0 , GM2 ; 等待低电平
LJMP XYW; 转接收下一位
RE1: SETB C ; P2.0= 0时应解码为1(图A 中A点),使标志C置1
CLR A ;
RLC A ; 把标志C= 1移入寄存器A中
JNB P2.0 , $; 等待高电平
XYW: DJNZ R5,GM; 4位未接收完,继续
JNB Acc.1 , RED ; 红灯提示发声
GREEN: MOV R0, #50H ; 绿灯提示发声
ACALL PLAY ; 调放音子程序
MOV R0, #78H;
ACALL PLAY; 调放音子程序
LJMP STOP
RED: MOV R0, #00H
ACALL PLAY ; 调放音子程序
MOV R0, #28H;
ACALL PLAY;调放音子程序
LJMP STOP
DELAY: MOV R6, #12; 1us
DJNZ R6, $ ;24us
RET ; 1 us
PLAY: MOV A, #00H;复位信号
MOV P1, A; 使P1复位,P1才能作为输入口。
SETB P2.1; 复位后,P2.1才能作为通用I/O口使用。
SETB P2.2; 复位后,P2.2才能作为通用I/O口使用。
MOV A, R0; 放音地址码由R0送A
MOV Pl, A; 放音地址码由A送P1口
CLR P2.2 ; PLAY端置低电平. 开始放音
ACALL FOUR ; 延时放音时间4s多(录音时每段用5秒,但用2秒时间说完)
MOV A, #00H;复位信号
MOV P1, A; 使P1复位
SETB P2.2 ; 停止放音
RET
FOUR: MOV R7,#50;
FOUR0: MOV R6,#200;
FOUR1: MOV R5,#200;
DJNZ R5,$;200×2us=400us=0.4ms
DJNZ R6,FOUR1;0.4ms×200=80ms
DJNZ R7,FOUR0;80ms×50=4000ms=4s
RET
STOP: SJMP $
END
语音信息可分成4段录入,每段5s。
语音
段序号 语言
信息 起始
时间 起始
地址
数 起始
地址
码 开关SWI-SW8的状态(1是断开,高电平)
SW8 SW7 SW6 SW5 SW4 SW3 SW2 SW1
1 红灯亮 0 0 00H 0 0 0 0 0 0 0 0
2 请停止 5 40 28H 0 0 1 0 1 0 0 0
3 绿灯亮 10 80 50H 0 1 0 1 0 0 0 0
4 请前行 15 120 78H 0 1 1 1 1 0 0 0