⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 无线电源控制系统接收程序.asm

📁 本系统是用AT89C2051单片机组成的无线电源控制系统
💻 ASM
📖 第 1 页 / 共 3 页
字号:
                  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 + -