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

📄 wireless.asm

📁 我自己写的短距离无线通信系统的收发程序
💻 ASM
字号:
             ORG    0000H           ;主程序入口
             AJMP   START
             ORG    0023H           ;中断服务子程序入口
             AJMP   RECEIVE
             ORG    0030H
START:       MOV    P2,#7FH         ;LED灯全灭,P2.7=0使TXEN=0,模块处于接收状态
             LCALL  DELAY_10ms      ;时间延迟
             MOV    R0,#50H         ;R0(50H)中存放接收数据地址
             ;MOV    R5,#00H         ;R5(校验和寄存器)清零
             MOV    SCON,#50H       ;串行口方式1,允许接收
             MOV    TMOD,#20H       ;初始化T1为定时器方式,模式2
             MOV    TH1,#0FDH       ;设置计数常数,波特率为9600b/s
             MOV    TL1,#0FDH
             MOV    87H,#00H        ;SMOD=0
             SETB   TR1             ;启动定时器T1
             SETB   EA              ;开全局中断
             SETB   ES              ;开串行口中断
            ; MOV    R0,#50H         ;R0为接收数据存放地址(50H)
             ;MOV    R2,#01H         ;R1存放命令
             ;MOV    R3,#03H         ;R2存放地址及命令发送次数(3次)
             ;CLR    P2.7            ;设置TXEN=0,使模块处于接收状态
            ; LCALL  DELAY_10ms      ;时间延迟
            ; SJMP   $
            ; LJMP   MAIN                ;等待串口中断
;***********************************************************************
;串口中断接收数据中断子程序
RECEIVE:     MOV    R4,#00H                  ;R4为校验和寄存器
             CLR    RI
             MOV    A,SBUF                  ;接收字符
             CJNE   A,#0FFH,RXD_ERR          ;接收是否FFH?不是则跳转
             ADD    A,R4                     ;形成累加校验和
             MOV    R4,A
             JNB    RI,$                     ;接收字符
             CLR    RI
             MOV    A,SBUF
             CJNE   A,#00H,RXD_ERR          ;接收是否00H,不是则跳转
             ADD    A,R4
             MOV    R4,A
             MOV    R6,#00H                  ;R6存放接收次数(6次)
RXSIX:       JNB    RI,$                     ;接收数据
             CLR    RI
             MOV    A,SBUF
             ADD    A,R4                     ;形成校验和
             MOV    R4,A
             MOV    R0,A                     ;把数据命令放入50H开始的数据寄存器
             INC    R0
             DJNZ   R2,RXSIX                 ;接收6次数据
             JNB    RI,$
             CLR    RI
             MOV    A,SBUF                   ;接收校验和
             SUBB   A,R4                     ;比较校验和是不是正确
             JNZ    RXD_ERR                  ;校验和不正确则跳转
             LCALL  COMPARE                 ;调用比较子程序比较三对地址和命令数据
             MOV    A,P2                     ;判断三对数据是否至少有两对相同
             CJNE   A,#00H,RXD_END           ;不相等(P2=00H)则跳转
             MOV    R2,50H                   ;R2存放地址
             MOV    R3,51H                   ;R3存放命令标志
             SJMP   RXD_END
RXD_ERR:     MOV    P2,#00H                  ;数据错,灯全亮
RXD_END:     RETI
;***********************************************************************
MAIN:        CLR    EA                       ;关闭中断
             LCALL  PROCESSOR                ;调数据处理子程序
             SETB   EA
;**********************************************************************
;延时子程序
DELAY_10ms:  MOV    R7,#32
DEL1:        MOV    R6,#142         ;因为晶振为11.0592MHZ,所以t=12/(11.0592×1000000)
             NOP
DEL2:        DJNZ   R6,DEL2         ;142×2t+2t=286t
             DJNZ   R7,DEL1         ;(286t+2t)×32+t=10.001ms
             RET
             END

⌨️ 快捷键说明

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