📄 wanneng_remote.c
字号:
LOJI0_V_L: ;适合低电平时间大于1ms的逻辑0
MOV R4,L02
CLR P2.2
MOV A,BIT_TEMP ;发另外一段波时有误差,在这里判断如果是最后一位就把误差减去
CJNE A,#1,LOJI0_VL_L
MOV A,R4
SUBB A,#1
MOV R4,A
LOJI0_VL_L: ;低电平为基数40us 加上循环次数* 60us
lcall delay60us
DJNZ R4,LOJI0_VL_L
RET
LOJI1_V_L: ;适合低电平时间大于1ms的逻辑1
MOV R2,L11
LOJI1_VH_L: ;;高电平为 循环次数*( 载波)
lcall zaibo
DJNZ R2,LOJI1_VH_L
RET
LOJI_H_V: ;引导码的高
MOV R2,LH
LOJIH_H_V:
lcall zaibo
DJNZ R2,LOJIH_H_V
RET
LOJI_L_V: ;引导码的低
MOV R4,LL
MOV A,BIT_TEMP ;发另外一段波时有误差,在这里判断如果是最后一位就把误差减去
CJNE A,#1,LOJIH_L_V
MOV A,R4
SUBB A,#1
MOV R4,A
LOJIH_L_V:
lCALL DELAY60US
DJNZ R4,LOJIH_L_V
RET
LOJID_H_V:
MOV R2,D_H
LOJID_H1_V:
lcall zaibo
DJNZ R2,LOJID_H1_V
RET
LOJID_L_V:
MOV R4,D_L
LOJID_L1_V:
LCALL DELAY60US
DJNZ R4,LOJID_L1_V
RET
LOJID_H2_V:
MOV R2,D_H
LOJID_H22_V:
lcall zaibo
DJNZ R2,LOJID_H22_V
RET
LOJID_L2_V:
MOV R4,D_L2
LOJID_L22_V:
LCALL DELAY60US
DJNZ R4,LOJID_L22_V
RET
;---------------------- 无载波调制子程序 --------------
SENDDATA_Nothing:
;无载波调制(高位在前先发,延时带一高电平)
;根据位数可选四种数据类型,和连续发送四个字节数据值
;类型为1则是发短的逻辑0和1,为2则是另一种长的0和1
;类型为3引导码的高和低,为4则是发延时的高和低
MOV A,BIT_TEMP
CJNE A,#0,N_SEND_4BYTE
LJMP SENDDATA_N_OUT
N_SEND_4BYTE:
N_1: ;根据数据的三种类型选择发哪种逻辑
MOV A,TYPE_TEMP
CJNE A,#1,N_2
MOV A,DATA_TEMP4
RRC A
MOV DATA_TEMP4,A
MOV A,DATA_TEMP3
RRC A
MOV DATA_TEMP3,A
MOV A,DATA_TEMP2
RRC A
MOV DATA_TEMP2,A
MOV A,DATA_TEMP1
RRC A
MOV DATA_TEMP1,A
JC N_LOJI1
LCALL LOJI0_N_S
LJMP N_4BYTE_NEXTBIT
N_LOJI1:
LCALL LOJI1_N_S
LJMP N_4BYTE_NEXTBIT
N_2:
MOV A,TYPE_TEMP
CJNE A,#2,N_3
MOV A,DATA_TEMP4
RRC A
MOV DATA_TEMP4,A
MOV A,DATA_TEMP3
RRC A
MOV DATA_TEMP3,A
MOV A,DATA_TEMP2
RRC A
MOV DATA_TEMP2,A
MOV A,DATA_TEMP1
RRC A
MOV DATA_TEMP1,A
JC N_LOJI2
LCALL LOJI0_N_L
LJMP N_4BYTE_NEXTBIT
N_LOJI2:
LCALL LOJI1_N_L
LJMP N_4BYTE_NEXTBIT
N_3:
MOV A,TYPE_TEMP
CJNE A,#3,N_4
MOV A,DATA_TEMP4
RRC A
MOV DATA_TEMP4,A
MOV A,DATA_TEMP3
RRC A
MOV DATA_TEMP3,A
MOV A,DATA_TEMP2
RRC A
MOV DATA_TEMP2,A
MOV A,DATA_TEMP1
RRC A
MOV DATA_TEMP1,A
JC N_LOJIH
LCALL LOJI_L_N
LJMP N_4BYTE_NEXTBIT
N_LOJIH:
LCALL LOJI_H_N
LJMP N_4BYTE_NEXTBIT
N_4:
MOV A,TYPE_TEMP
CJNE A,#4,N_5
; MOV P0,#0FFH
MOV A,DATA_TEMP4
RRC A
MOV DATA_TEMP4,A
MOV A,DATA_TEMP3
RRC A
MOV DATA_TEMP3,A
MOV A,DATA_TEMP2
RRC A
MOV DATA_TEMP2,A
MOV A,DATA_TEMP1
RRC A
MOV DATA_TEMP1,A
JC N_LOJID_H
LCALL LOJID_L_N
LJMP N_4BYTE_NEXTBIT
N_LOJID_H:
LCALL LOJID_H_N
LJMP N_4BYTE_NEXTBIT
N_5:
MOV A,TYPE_TEMP
CJNE A,#5,SENDDATA_N_OUT1
; MOV P0,#0FFH
MOV A,DATA_TEMP4
RRC A
MOV DATA_TEMP4,A
MOV A,DATA_TEMP3
RRC A
MOV DATA_TEMP3,A
MOV A,DATA_TEMP2
RRC A
MOV DATA_TEMP2,A
MOV A,DATA_TEMP1
RRC A
MOV DATA_TEMP1,A
JC N_LOJID_H2
LCALL LOJID_L2_N
LJMP N_4BYTE_NEXTBIT
SENDDATA_N_OUT1:
LJMP SENDDATA_N_OUT
N_LOJID_H2:
LCALL LOJID_H2_N
LJMP N_4BYTE_NEXTBIT
N_4BYTE_NEXTBIT:
DEC BIT_TEMP
LJMP SENDDATA_Nothing
SENDDATA_N_OUT:
RET
LOJI0_N_S: ;适合高电平和低电平时间小于1ms的逻辑0
MOV R2,L01
MOV R4,L02
LOJI0_NH: ;高电平为5us
SETB P2.2
nop
nop
DJNZ R2,LOJI0_NH
CLR P2.2
MOV A,BIT_TEMP ;发另外一段波时有误差,在这里判断如果是最后一位就把误差减去
CJNE A,#1,LOJI0_NL
MOV A,R4
SUBB A,#8
MOV R4,A
LOJI0_NL: ;低电平为基数35us 加上循环次数* 5us
CLR P2.2
nop
nop
DJNZ R4,LOJI0_NL
RET
LOJI1_N_S: ;适合高电平和低电平时间小于1ms的逻辑1
MOV R2,L11
MOV R4,L12
LOJI1_NH: ;高电平为5us
SETB P2.2
nop
nop
DJNZ R2,LOJI1_NH
CLR P2.2
MOV A,BIT_TEMP ;发另外一段波时有误差,在这里判断如果是最后一位就把误差减去
CJNE A,#1,LOJI1_NL
MOV A,R4
SUBB A,#8
MOV R4,A
LOJI1_NL: ;低电平为基数45us 加上循环次数* 5us
nop
nop
nop
DJNZ R4,LOJI1_NL
RET
LOJI0_N_L: ;适合低电平时间大于1ms的逻辑0
MOV R2,L01
MOV R4,L02
LOJI0_NH_L: ;高电平为5us
SETB P2.2
nop
nop
DJNZ R2,LOJI0_NH_L
CLR P2.2
LOJI0_NL_L: ;低电平为基数35us 加上循环次数* 60us
lcall delay60us
DJNZ R4,LOJI0_NL_L
RET
LOJI1_N_L: ;适合低电平时间大于1ms的逻辑1
MOV R2,L11
MOV R4,L12
LOJI1_NH_L: ;高电平为5us
SETB P2.2
nop
nop
DJNZ R2,LOJI1_NH_L
CLR P2.2
LOJI1_NL_L: ;低电平为基数35us 加上循环次数* 60us
lcall delay60us
DJNZ R4,LOJI1_NL_L
RET
LOJI_H_N: ;引导码的高
MOV R2,LH
LOJIH_H_N:
SETB P2.2
NOP
NOP
DJNZ R2,LOJIH_H_N
CLR P2.2
RET
LOJI_L_N: ;引导码的低
MOV R4,LL
MOV A,BIT_TEMP ;发另外一段波时有误差,在这里判断如果是最后一位就把误差减去
CJNE A,#1,LOJIH_L_N
MOV A,R4
SUBB A,#1
MOV R4,A
LOJIH_L_N:
lCALL DELAY60US
DJNZ R4,LOJIH_L_N
RET
LOJID_H_N:
MOV R2,D_H
LOJID_H1_N:
SETB P2.2
NOP
NOP
DJNZ R2,LOJID_H1_N
CLR P2.2
RET
LOJID_L_N:
MOV R4,D_L
LOJID_L1_N:
LCALL DELAY60US
DJNZ R4,LOJID_L1_N
RET
LOJID_H2_N:
MOV R2,D_H
LOJID_H22_N:
SETB P2.2
NOP
NOP
DJNZ R2,LOJID_H22_N
CLR P2.2
RET
LOJID_L2_N:
MOV R4,D_L2
LOJID_L22_N:
ACALL DELAY60US
DJNZ R4,LOJID_L22_N
RET
DELAY60US:
MOV R5,#26
DJNZ R5,$
nop
RET
;------------------------ 特殊调制子程序(无载波的) -------------------------
SENDDATA_ESPECIAL:
MOV A,BIT_TEMP
CJNE A,#0,E_SEND_4BYTE
LJMP SENDDATA_E_OUT
E_SEND_4BYTE:
E_1: ;根据数据的类型选择发哪种逻辑
MOV A,TYPE_TEMP
CJNE A,#1,E_2
MOV A,DATA_TEMP4
RRC A
MOV DATA_TEMP4,A
MOV A,DATA_TEMP3
RRC A
MOV DATA_TEMP3,A
MOV A,DATA_TEMP2
RRC A
MOV DATA_TEMP2,A
MOV A,DATA_TEMP1
RRC A
MOV DATA_TEMP1,A
DEC BIT_TEMP
JC E_LOJI2 ;第一位如果是0则移第二位,根据两位确定是哪种类型
MOV A,DATA_TEMP4
RRC A
MOV DATA_TEMP4,A
MOV A,DATA_TEMP3
RRC A
MOV DATA_TEMP3,A
MOV A,DATA_TEMP2
RRC A
MOV DATA_TEMP2,A
MOV A,DATA_TEMP1
RRC A
MOV DATA_TEMP1,A
JC E_LOJI1
LCALL LOJI0_E_S
LJMP E_4BYTE_NEXTBIT
E_LOJI1:
LCALL LOJI1_E_S
LJMP E_4BYTE_NEXTBIT
E_LOJI2: ;如果第1位为1则判断第二位为0则是逻辑2,为1则是逻辑3
MOV A,DATA_TEMP4
RRC A
MOV DATA_TEMP4,A
MOV A,DATA_TEMP3
RRC A
MOV DATA_TEMP3,A
MOV A,DATA_TEMP2
RRC A
MOV DATA_TEMP2,A
MOV A,DATA_TEMP1
RRC A
MOV DATA_TEMP1,A
JC E_LOJI3
LCALL LOJI2_E_S
LJMP E_4BYTE_NEXTBIT
E_LOJI3:
LCALL LOJI3_E_S
LJMP E_4BYTE_NEXTBIT
E_2:
MOV A,TYPE_TEMP
CJNE A,#2,E_3
MOV A,DATA_TEMP4
RRC A
MOV DATA_TEMP4,A
MOV A,DATA_TEMP3
RRC A
MOV DATA_TEMP3,A
MOV A,DATA_TEMP2
RRC A
MOV DATA_TEMP2,A
MOV A,DATA_TEMP1
RRC A
MOV DATA_TEMP1,A
JC E_LOJIH
LCALL LOJI_L_E
LJMP E_4BYTE_NEXTBIT
E_LOJIH:
LCALL LOJI_H_E
LJMP E_4BYTE_NEXTBIT
E_3:
MOV A,TYPE_TEMP
CJNE A,#3,SENDDATA_E_OUT1
; MOV P0,#0FFH
MOV A,DATA_TEMP4
RRC A
MOV DATA_TEMP4,A
MOV A,DATA_TEMP3
RRC A
MOV DATA_TEMP3,A
MOV A,DATA_TEMP2
RRC A
MOV DATA_TEMP2,A
MOV A,DATA_TEMP1
RRC A
MOV DATA_TEMP1,A
JC E_LOJID_H
LCALL LOJID_L_E
LJMP E_4BYTE_NEXTBIT
E_LOJID_H:
LCALL LOJID_H_E
LJMP E_4BYTE_NEXTBIT
SENDDATA_E_OUT1:
LJMP SENDDATA_E_OUT
E_4BYTE_NEXTBIT:
DEC BIT_TEMP
LJMP SENDDATA_ESPECIAL
SENDDATA_E_OUT:
RET
LOJI0_E_S: ;适合高电平和低电平时间小于1ms的逻辑0
MOV R2,L01
MOV R4,L02
SETB P2.2
LOJI0_EH: ;高电平为5us
nop
nop
nop
DJNZ R2,LOJI0_EH
CLR P2.2
MOV A,BIT_TEMP ;发另外一段波时有误差,在这里判断如果是最后一位就把误差减去
CJNE A,#1,LOJI0_EL
MOV A,R4
SUBB A,#6
MOV R4,A
LOJI0_EL: ;低电平为基数50us 加上循环次数* 5us
NOP
nop
nop
DJNZ R4,LOJI0_EL
RET
LOJI1_E_S: ;适合高电平和低电平时间小于1ms的逻辑1
MOV R2,L11
MOV R4,L12
SETB P2.2
LOJI1_EH: ;高电平为5us
nop
nop
nop
DJNZ R2,LOJI1_EH
CLR P2.2
MOV A,BIT_TEMP ;发另外一段波时有误差,在这里判断如果是最后一位就把误差减去
CJNE A,#1,LOJI1_EL
MOV A,R4
SUBB A,#6
MOV R4,A
LOJI1_EL: ;低电平为基数50us 加上循环次数* 5us
nop
nop
nop
DJNZ R4,LOJI1_EL
RET
LOJI2_E_S: ;逻辑2
MOV R2,L21
MOV R4,L22
SETB P2.2
LOJI2_EH: ;高电平为5us
nop
nop
nop
DJNZ R2,LOJI2_EH
CLR P2.2
MOV A,BIT_TEMP ;发另外一段波时有误差,在这里判断如果是最后一位就把误差减去
CJNE A,#1,LOJI2_EL
MOV A,R4
SUBB A,#9
MOV R4,A
LOJI2_EL: ;低电平为基数50us 加上循环次数* 5us
NOP
nop
nop
DJNZ R4,LOJI2_EL
RET
LOJI3_E_S: ;逻辑3
MOV R2,L31
MOV R4,L32
LOJI3_EH: ;高电平为5us
SETB P2.2
nop
nop
DJNZ R2,LOJI3_EH
CLR P2.2
MOV A,BIT_TEMP ;发另外一段波时有误差,在这里判断如果是最后一位就把误差减去
CJNE A,#1,LOJI3_EL
MOV A,R4
SUBB A,#9
MOV R4,A
LOJI3_EL: ;低电平为基数50us 加上循环次数* 5us
NOP
nop
nop
DJNZ R4,LOJI3_EL
RET
LOJI_H_E: ;引导码的高
MOV R2,LH
SETB P2.2
LOJIH_H_E:
nop
NOP
NOP
DJNZ R2,LOJIH_H_E
CLR P2.2
RET
LOJI_L_E: ;引导码的低
MOV R4,LL
MOV A,BIT_TEMP ;发另外一段波时有误差,在这里判断如果是最后一位就把误差减去
CJNE A,#1,LOJIH_L_E
MOV A,R4
SUBB A,#2
MOV R4,A
LOJIH_L_E:
LCALL DELAY30US
DJNZ R4,LOJIH_L_E
RET
LOJID_H_E: ;延时高
MOV R2,D_H
SETB P2.2
LOJID_H1_E:
nop
NOP
NOP
DJNZ R2,LOJID_H1_E
CLR P2.2
RET
LOJID_L_E:
MOV R4,D_L
MOV A,BIT_TEMP ;发另外一段波时有误差,在这里判断如果是最后一位就把误差减去
CJNE A,#1,LOJID_L1_E
MOV A,R4
SUBB A,#2
MOV R4,A
LOJID_L1_E:
LCALL DELAY30US
DJNZ R4,LOJID_L1_E
RET
;--------------------------- 时间调制子程序 ------------------------
SENDDATA_TIME: ;时间调制(低位在前先发,延时带一高电平)
;根据位数可选三种数据类型,和连续发送四个字节数据值 子程序(时间调制)
;类型为1则是发逻辑0和1,为2则是发引导码的高和低,为3则是发延时的高和低
;类型为4时发延时2的高和低
MOV A,BIT_TEMP
CJNE A,#0,T_SEND_4BYTE
LJMP SENDDATA_T_OUT
T_SEND_4BYTE:
T_1: ;根据数据的三种类型选择发哪种逻辑
MOV A,TYPE_TEMP
CJNE A,#1,T_2
MOV A,DATA_TEMP4
RRC A
MOV DATA_TEMP4,A
MOV A,DATA_TEMP3
RRC A
MOV DATA_TEMP3,A
MOV A,DATA_TEMP2
RRC A
MOV DATA_TEMP2,A
MOV A,DATA_TEMP1
RRC A
MOV DATA_TEMP1,A
JC T_LOJI1
LCALL LOJI0
LJMP S_4BYTE_NEXTBIT
T_LOJI1:
LCALL LOJI1
LJMP S_4BYTE_NEXTBIT
T_2:
MOV A,TYPE_TEMP
CJNE A,#2,T_3
MOV A,DATA_TEMP4
RRC A
MOV DATA_TEMP4,A
MOV A,DATA_TEMP3
RRC A
MOV DATA_TEMP3,A
MOV A,DATA_TEMP2
RRC A
MOV DATA_TEMP2,A
MOV A,DATA_TEMP1
RRC A
MOV DATA_TEMP1,A
JC T_LOJIH
LCALL LOJI_L
LJMP S_4BYTE_NEXTBIT
T_LOJIH:
LCALL LOJI_H
LJMP S_4BYTE_NEXTBIT
T_3:
MOV A,TYPE_TEMP
CJNE A,#3,T_4
MOV P0,#0FFH
MOV A,DATA_TEMP4
RRC A
MOV DATA_TEMP4,A
MOV A,DATA_TEMP3
RRC A
MOV DATA_TEMP3,A
MOV A,DATA_TEMP2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -