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

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

📁 本系统是用AT89C2051单片机组成的无线电源控制系统
💻 ASM
📖 第 1 页 / 共 3 页
字号:


;*备注:   起始位:600US高电平+200us低电平
;*        00:    200us高电平+200us低电平
;*        01:    200us高电平+400us低电平
;*        10:    400us高电平+200us低电平
;*        11:    400us高电平+400us低电平

PDATA             EQU  0B2H         ;P3.2
NDATA             EQU  0B3H         ;P3.3

ADDR              EQU  20H          ;本机地址.
ADD2              EQU  0B1H         ;P3.1
ADD1              EQU  0B0H         ;P3.0

ADDLI             EQU  22H          ;输入地址.
ADDIBIT6          EQU  15H
ADDIBIT5          EQU  14H
ADDIBIT4          EQU  13H
ADDIBIT3          EQU  12H
ADDIBIT2          EQU  11H
ADDIBIT1          EQU  10H

COUNTH            EQU  30H
COUNTL            EQU  31H

N200HH            EQU  00H         ;240US
N200HL            EQU  0F0H
N200LH            EQU  00H         ;160US
N200LL            EQU  0A0H
N400HH            EQU  01H         ;440US
N400HL            EQU  0B8H
N400LH            EQU  01H         ;360US
N400LL            EQU  68H
N600HH            EQU  02H         ;640US
N600HL            EQU  80H
N600LH            EQU  02H         ;560US
N600LL            EQU  30H

NUMR              EQU  21H         ;本机编号.

NUMI              EQU  24H         ;编号
NUMIBIT8          EQU  27H
NUMIBIT7          EQU  26H
NUMIBIT6          EQU  25H
NUMIBIT5          EQU  24H
NUMIBIT4          EQU  23H
NUMIBIT3          EQU  22H
NUMIBIT2          EQU  21H
NUMIBIT1          EQU  20H

DATAI             EQU  25H
DATABIT2          EQU  29H
DATABIT1          EQU  28H

TIFLAG            EQU  7FH         ;发送空标志位:1=未空,0=空
TIREG1            EQU  32H
TIREG2            EQU  33H

DATAOUTk          EQU  0B4H        ;P3.4
dataoutg          equ  0b5h        ;p3.5

DOGOUT            EQU  0B7H        ;P3.7

del               equ  40h


                   ORG  0000H
                  AJMP   MAIN

                   ORG  000BH
                  NOP
                  NOP
                  CLR    TR0
                  MOV    A,SP            ;出现定时中断,重新开始.
                  NOP
                  CLR    C
                  SUBB   A,#2
                  MOV    SP,A
                  MOV    DPTR,#START
                  PUSH   DPL
                  PUSH   DPH
                  RETI


                   ORG  0040H
MAIN:             NOP
                  NOP
                  MOV    SP,#50H
                  NOP
                  NOP
                  MOV    P3,#0FFH
                  MOV    P1,#0FFH

                  SETB   DATAOUTk
                  SETB   DATAOUTG

                  MOV    TMOD,#01H
                  SETB   EA
                  SETB   ET0

;-----------------------------------------------------------------------------
;判断起始位: 600US高电平,200US低电平.

START:            NOP
                  NOP
                  ACALL  WATCHDOG
                  NOP
                  NOP
                  JNB    PDATA,START
                  MOV    TH0,#00H
                  MOV    TL0,#00H
                  SETB   TR0                 ;出现高电平,开始计数.
WAIT1:            JB     PDATA,WAIT1
                  CLR    TR0                 ;出现低电平,停止计数.
                  MOV    COUNTH,TH0
                  MOV    COUNTL,TL0
                  MOV    TH0,#00H
                  MOV    TL0,#00H
                  SETB   TR0
                  MOV    A,COUNTH
                  CJNE   A,#N600HH,START
                  MOV    A,COUNTL
                  CLR    C
                  SUBB   A,#N600LL
                  JC     START               ;高电平宽度小于530US,则返回.
                  MOV    A,#N600HL
                  CLR    C
                  SUBB   A,COUNTL
                  JC     START               ;高电平宽度大于670US,则返回.

WAIT2:            JNB    PDATA,WAIT2
                  CLR    TR0                 ;出现高电平,停止计数.
                  MOV    COUNTH,TH0
                  MOV    COUNTL,TL0
                  MOV    TH0,#00H
                  MOV    TL0,#00H
                  SETB   TR0
                  MOV    A,COUNTL
                  CLR    C
                  SUBB   A,#N200LL
                  MOV    A,COUNTH
                  SUBB   A,#N200LH
                  JC     START               ;低电平宽度小于130US,则返回.
                  MOV    A,#N200HL
                  CLR    C
                  SUBB   A,COUNTL
                  MOV    A,#N200HH
                  SUBB   A,COUNTH
                  JC     START               ;低电平宽度大于270US,则返回.

;--------------------------------------------------------------------------
;判断(6位)地址位.

ADDRESS:          MOV    ADDLI,#00H

ADDRESS6:         JB     PDATA,ADDRESS6
                  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     ADDERRE6            ;高电平宽度大于400US,错误,返回
                  MOV    A,COUNTL
                  CLR    C
                  SUBB   A,#N400LL
                  MOV    A,COUNTH
                  SUBB   A,#N400LH
                  JC     ADDRESS61
                  SETB   ADDIBIT6            ;电平宽度为400us,addibit6=1
                  SJMP   ADDRESS5
ADDRESS61:        MOV    A,#N200HL
                  CLR    C
                  SUBB   A,COUNTL
                  MOV    A,#N200HH
                  SUBB   A,COUNTH
                  JC     ADDERRE6            ;高电平宽度大于200us,小于400us,错误,返回
                  MOV    A,COUNTL
                  CLR    C
                  SUBB   A,#N200LL
                  MOV    A,COUNTH
                  SUBB   A,#N200LH
                  JC     ADDERRE6            ;高电平宽度小于200us,错误,返回.
                  CLR    ADDIBIT6            ;电平宽度为200us,addibit6=0
                  SJMP   ADDRESS5
ADDERRE6:         AJMP   START

ADDRESS5:         JNB    PDATA,ADDRESS5
                  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     ADDERRE5            ;低电平宽度大于400US,错误,返回
                  MOV    A,COUNTL
                  CLR    C
                  SUBB   A,#N400LL
                  MOV    A,COUNTH
                  SUBB   A,#N400LH
                  JC     ADDRESS51
                  SETB   ADDIBIT5           ;电平宽度为400us,addibit5=1
                  SJMP   ADDRESS4
ADDRESS51:        MOV    A,#N200HL
                  CLR    C
                  SUBB   A,COUNTL
                  MOV    A,#N200HH
                  SUBB   A,COUNTH
                  JC     ADDERRE5           ;低电平宽度大于200us,小于400us,错误,返回
                  MOV    A,COUNTL
                  CLR    C
                  SUBB   A,#N200LL
                  MOV    A,COUNTH
                  SUBB   A,#N200LH
                  JC     ADDERRE5           ;高电平宽度小于200us,错误,返回.
                  CLR    ADDIBIT5           ;电平宽度为200us,addibit5=0
                  SJMP   ADDRESS4
ADDERRE5:         AJMP   START

ADDRESS4:         JB     PDATA,ADDRESS4
                  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     ADDERRE4            ;高电平宽度大于400US,错误,返回
                  MOV    A,COUNTL
                  CLR    C
                  SUBB   A,#N400LL
                  MOV    A,COUNTH
                  SUBB   A,#N400LH
                  JC     ADDRESS41
                  SETB   ADDIBIT4            ;电平宽度为400us,addibit4=1
                  SJMP   ADDRESS3
ADDRESS41:        MOV    A,#N200HL
                  CLR    C
                  SUBB   A,COUNTL
                  MOV    A,#N200HH
                  SUBB   A,COUNTH
                  JC     ADDERRE4            ;高电平宽度大于200us,小于400us,错误,返回
                  MOV    A,COUNTL
                  CLR    C
                  SUBB   A,#N200LL
                  MOV    A,COUNTH
                  SUBB   A,#N200LH
                  JC     ADDERRE4            ;高电平宽度小于200us,错误,返回.
                  CLR    ADDIBIT4            ;电平宽度为200us,addibit4=0
                  SJMP   ADDRESS3
ADDERRE4:         AJMP   START

ADDRESS3:         JNB    PDATA,ADDRESS3
                  CLR    TR0                ;出现高电平,重新计数.
                  MOV    COUNTH,TH0
                  MOV    COUNTL,TL0
                  MOV    TH0,#00H
                  MOV    TL0,#00H
                  SETB   TR0
                  MOV    A,#N400HL
                  CLR    C

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -