📄 g d f s.asm
字号:
;****************************************
;编码 发射程序
MOV SP,#30H
ZXY: MOV TMOD,#00H
MOV TL0,#19H ;8ms p2.0 38K载波
MOV TH0,#19H
SETB P2.0
SETB TR0 ;启动定时器0
NEXT_01:MOV TMOD,#20H
MOV TL1,#0F4H ;38K载波
MOV TH1,#0F4H
SETB TR1 ;启动定时器1
HERE_03:JBC TF1,NEXT_03
SJMP HERE_03
NEXT_03:MOV TL1,#0F4H
MOV TH1,#0F4H
CPL P2.0
HERE_01:JNB TF0,NEXT_01 ;if T0 count time not over, next
CLR TR1 ;TR1 -- T1 运行控制 1---则终止定时
LJMP KAISHI
;if T0 count time over,then off 38k载波
SJMP HERE_03
;****************************************
;****************************************
COUNT DATA 09H ; 计数^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KAISHI: MOV 0AH,#30;发送数据最大个数
; MOV SP,#30H
ZHXY: CLR A
MOV COUNT,A
MOV R0, #50H
START: MOV 50H,#01010101B
;**********************************************
MOV R2,#2 ;计数反码正码一共 发射2次
MAIN: MOV A,@R0
; INC R0
MOV R6,A ;暂存数据---------在R7中
LOOP:MOV R5,#8 ; 一个数据有8为
CLR C
LOOP1: RRC A
JNC BM_0 ;判断是0还是1,为编码准备
LJMP BM_1
LOOP2:MOV A,R6 ;发射数据 反码
CPL A
DJNZ R2, LOOP
LJMP SPEAK
;*******************************
BM_0:LCALL BM_bitO ;编码0
DJNZ R5,LOOP1
JMP LOOP2
BM_1:LCALL BM_bit1 ;编码1
DJNZ R5,LOOP1
JMP LOOP2
;********************************
;**********发射提示OK ***********
SPEAK: NOP
;*********************************
ZHXY0: POP B
MOV R0,B
INC R0
DJNZ 0AH,START
;LJMP START
;**************************
;**************************************************************
;如果一直为低电平就认为发射结束
;**************************************************************
MOV R3,#3
ZHXY_216: MOV TMOD,#00H
MOV TL0,#19H ;8ms p2.0 38K载波
MOV TH0,#19H
SETB P2.0
SETB TR0 ;启动定时器
NEXT_010:MOV TMOD,#20H
MOV TL1,#0F4H ;38K载波
MOV TH1,#0F4H
SETB TR1 ;启动定时器1
HERE_030:JBC TF1,NEXT_030
SJMP HERE_030
NEXT_030:MOV TL1,#0F4H
MOV TH1,#0F4H
CPL P2.0
HERE_010:JNB TF0,NEXT_010 ;if T0 count time not over, next
CLR TR1 ;TR1 -- T1 运行控制 1---则终止定时
LJMP BBB
;if T0 count time over,then off 38k载波
SJMP HERE_030
;*******************************************************************
BBB: DJNZ R3,ZHXY_216
LJMP OVER
OVER:LJMP ZXY
;**************************************
;**************************************
; 子程序......
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
BM_bitO:SETB P2.0
MOV TMOD,#00H ;bian ma 0
MOV TL0,#1CH ;0.56ms p2.0 高电平
MOV TH0,#0EFH
SETB TR0 ;启动定时器0
HERE00: JBC TF0,NEXT_00 ; if TF0 is 1,then next,else wait!!!
SJMP HERE00
NEXT_00:MOV TMOD,#00H
MOV TL0,#17H ;0.565ms p2.0 38K载波
MOV TH0,#0EFH
CLR P2.0
SETB TR0 ;启动定时器0
NEXT01:MOV TMOD,#20H
MOV TL1,#0F4H ;38K载波
MOV TH1,#0F4H
SETB TR1 ;启动定时器1
HERE03:JBC TF1,NEXT03
SJMP HERE03
NEXT03:MOV TL1,#0F4H
MOV TH1,#0F4H
CPL P2.0
HERE01:JNB TF0,NEXT01 ;if T0 count time not over, next
CLR TR1 ;TR1 -- T1 运行控制 1---则终止定时
RET ;if T0 count time over,then off 38k载波
SJMP HERE03
RET
;************************************
BM_bit1:MOV TMOD,#00H ;编码 1
MOV TL0,#1CH ;0.56ms high lever
MOV TH0,#0EFH
SETB TR0
SETB P2.0
HERE10:JBC TF0,NEXT1
SJMP HERE10
NEXT1:MOV TMOD,#00H ;tipe 00 of T0 1.685ms-----6639
MOV TL0,#0FH
MOV TH0,#0CFH
SETB TR0
CLR P2.0
NEXT2:MOV TMOD,#20H
MOV TL1,#0F4H
MOV TH1,#0F4H
SETB TR1
HERE3:JBC TF1,NEXT3
SJMP HERE3
NEXT3:MOV TL1,#0F4H
MOV TH1,#0F4H
CPL P2.0
HERE02:JNB TF0,NEXT2
CLR TR1
RET
SJMP HERE3
;************************************
;延时程序
DELAY2400: ;1.085x ((245x9)+5)=2397.85
MOV R7,#245
DELAY2400_A:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_A
RET
;*************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -