📄 无线电源控制系统接收程序.asm
字号:
CLR C
SUBB A,#N400LL
MOV A,COUNTH
SUBB A,#N400LH
JC NUM41
SETB NUMIBIT4 ;电平宽度为400us,numibit4=1
SJMP NUM3
NUM41: MOV A,#N200HL
CLR C
SUBB A,COUNTL
MOV A,#N200HH
SUBB A,COUNTH
JC NUMERRE4 ;高电平宽度大于200us,小于400us,错误,返回
MOV A,COUNTL
CLR C
SUBB A,#N200LL
MOV A,COUNTH
SUBB A,#N200LH
JC NUMERRE4 ;高电平宽度小于200us,错误,返回.
CLR NUMIBIT4 ;电平宽度为200us,NUMIBIT4=0
SJMP NUM3
NUMERRE4: AJMP START
NUM3: JNB PDATA,NUM3
CLR TR0 ;出现高电平,重新计数.
MOV COUNTH,TH0
MOV COUNTL,TL0
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
MOV A,#N400HL
CLR C
SUBB A,COUNTL
MOV A,#N400HH
SUBB A,COUNTH
JC NUMERRE3 ;低电平宽度大于400US,错误,返回
MOV A,COUNTL
CLR C
SUBB A,#N400LL
MOV A,COUNTH
SUBB A,#N400LH
JC NUM31
SETB NUMIBIT3 ;电平宽度为400us,numibit3=1
SJMP NUM2
NUM31: MOV A,#N200HL
CLR C
SUBB A,COUNTL
MOV A,#N200HH
SUBB A,COUNTH
JC NUMERRE3 ;低电平宽度大于200us,小于400us,错误,返回
MOV A,COUNTL
CLR C
SUBB A,#N200LL
MOV A,COUNTH
SUBB A,#N200LH
JC NUMERRE3 ;高电平宽度小于200us,错误,返回.
CLR NUMIBIT3 ;电平宽度为200us,numibit3=0
SJMP NUM2
NUMERRE3: AJMP START
NUM2: JB PDATA,NUM2
CLR TR0 ;出现低电平,重新计数.
MOV COUNTH,TH0
MOV COUNTL,TL0
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
MOV A,#N400HL
CLR C
SUBB A,COUNTL
MOV A,#N400HH
SUBB A,COUNTH
JC NUMERRE2 ;高电平宽度大于400US,错误,返回
MOV A,COUNTL
CLR C
SUBB A,#N400LL
MOV A,COUNTH
SUBB A,#N400LH
JC NUM21
SETB NUMIBIT2 ;电平宽度为400us,numibit2=1
SJMP NUM1
NUM21: MOV A,#N200HL
CLR C
SUBB A,COUNTL
MOV A,#N200HH
SUBB A,COUNTH
JC NUMERRE2 ;高电平宽度大于200us,小于400us,错误,返回
MOV A,COUNTL
CLR C
SUBB A,#N200LL
MOV A,COUNTH
SUBB A,#N200LH
JC NUMERRE2 ;高电平宽度小于200us,错误,返回.
CLR NUMIBIT2 ;电平宽度为200us,NUMIBIT2=0
SJMP NUM1
NUMERRE2: AJMP START
NUM1: JNB PDATA,NUM1
CLR TR0 ;出现高电平,重新计数.
MOV COUNTH,TH0
MOV COUNTL,TL0
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
MOV A,#N400HL
CLR C
SUBB A,COUNTL
MOV A,#N400HH
SUBB A,COUNTH
JC NUMERRE1 ;低电平宽度大于400US,错误,返回
MOV A,COUNTL
CLR C
SUBB A,#N400LL
MOV A,COUNTH
SUBB A,#N400LH
JC NUM11
SETB NUMIBIT1 ;电平宽度为400us,numibit1=1
SJMP NUMOK
NUM11: MOV A,#N200HL
CLR C
SUBB A,COUNTL
MOV A,#N200HH
SUBB A,COUNTH
JC NUMERRE1 ;低电平宽度大于200us,小于400us,错误,返回
MOV A,COUNTL
CLR C
SUBB A,#N200LL
MOV A,COUNTH
SUBB A,#N200LH
JC NUMERRE1 ;高电平宽度小于200us,错误,返回.
CLR NUMIBIT1 ;电平宽度为200us,numibit1=0
SJMP NUMOK
NUMERRE1: AJMP START
NUMOK: MOV A,NUMI
MOV NUMR,P1
CJNE A,NUMR,NUMERRE
SJMP KEY
NUMERRE: AJMP START
;-------------------------------------------------------------------------------------
;判断(1位)数据位
KEY: MOV DATAI,#00H
KEY2: JB PDATA,KEY2
CLR TR0 ;出现低电平,重新计数.
MOV COUNTH,TH0
MOV COUNTL,TL0
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
MOV A,#N400HL
CLR C
SUBB A,COUNTL
MOV A,#N400HH
SUBB A,COUNTH
JC KEYERRE2 ;高电平宽度大于400US,错误,返回
MOV A,COUNTL
CLR C
SUBB A,#N400LL
MOV A,COUNTH
SUBB A,#N400LH
JC KEY21
SETB DATABIT2 ;电平宽度为400us,keyibit2=1
SJMP KEY1
KEY21: MOV A,#N200HL
CLR C
SUBB A,COUNTL
MOV A,#N200HH
SUBB A,COUNTH
JC KEYERRE2 ;高电平宽度大于200us,小于400us,错误,返回
MOV A,COUNTL
CLR C
SUBB A,#N200LL
MOV A,COUNTH
SUBB A,#N200LH
JC KEYERRE2 ;高电平宽度小于200us,错误,返回.
CLR DATABIT2 ;电平宽度为200us,KEYIBIT2=0
SJMP KEY1
KEYERRE2: AJMP START
KEY1: JNB PDATA,KEY1
CLR TR0 ;出现高电平,重新计数.
MOV COUNTH,TH0
MOV COUNTL,TL0
MOV TH0,#00H
MOV TL0,#00H
;SETB TR0
MOV A,#N400HL
CLR C
SUBB A,COUNTL
MOV A,#N400HH
SUBB A,COUNTH
JC KEYERRE1 ;低电平宽度大于400US,错误,返回
MOV A,COUNTL
CLR C
SUBB A,#N400LL
MOV A,COUNTH
SUBB A,#N400LH
JC KEY11
SETB DATABIT1 ;电平宽度为400us,keyibit1=1
SJMP KEYOK
KEY11: MOV A,#N200HL
CLR C
SUBB A,COUNTL
MOV A,#N200HH
SUBB A,COUNTH
JC KEYERRE1 ;低电平宽度大于200us,小于400us,错误,返回
MOV A,COUNTL
CLR C
SUBB A,#N200LL
MOV A,COUNTH
SUBB A,#N200LH
JC KEYERRE1 ;高电平宽度小于200us,错误,返回.
CLR DATABIT1 ;电平宽度为200us,keyibit1=0
SJMP KEYOK
KEYERRE1: AJMP START
KEYOK: MOV A,DATAI
CJNE A,#01H,KEYNEXT
CLR DATAOUTk ;打开电源.
acall delay100ms
setb dataoutk
AJMP START
KEYNEXT: CJNE A,#02H,KEYEND
clr DATAOUTg ;关闭电源.
acall delay100ms
setb dataoutg
AJMP START
KEYEND: AJMP START
ADDPRG: MOV ADDR,#00H ;本机地址高4位.
MOV A,ADDR
RL A
RL A
MOV C,ADD2
MOV ACC.1,C
MOV C,ADD1
MOV ACC.0,C
MOV ADDR,A
RET
;---------------------------------------------------------------------
;看门狗喂狗子程序.
WATCHDOG: SETB DOGOUT
NOP
NOP
NOP
NOP
CLR DOGOUT
RET
;---------------------------------------------------------------------
;延时100ms
delay100ms: nop
mov del,#100
delay100ms1: push del
delay100ms2: push del
delay100ms3: djnz del,delay100ms3
pop del
djnz del,delay100ms2
pop del
djnz del,delay100ms1
ret
org 07fdh
ljmp start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -