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

📄 code1.txt

📁 无线通信系统 1、系统由一个主站
💻 TXT
字号:
  ;主机程序            
			   ORG     0000H
               LJMP    START

DELAY:        MOV     R7,#0
DELAYLOOP:    DJNZ    R7,DELAYLOOP
              DJNZ    R6,DELAYLOOP
              RET



RECEIVE:                      ;接收数据块的长度    
              CLR   RI           
              JNB   RI,$
              MOV   A,SBUF
              MOV  R2,A       ;将数据块长度存到R2

               MOV     R0,#30H      ;设置数据块存放始地址
               MOV     70H,#0        ;校验和初始化为零
               CLR     RI           ;清接收中断标志
RECER:         JNB     RI,$         ;等待接收一个字节数据
               MOV     A,SBUF       ;将已接收到的一个字节数据送A
               CLR     RI
               MOV    @R0,A         ;存放数据块
               INC     R0           ;准备下个要接收数据的存放地址
               ADD     A,70H        ;计算接收数据的校验和
               MOV     70H,A         ;暂存校验和
               DJNZ    R2,RECER      ;所有数据接收完?否,跳到RECER
               JNB     RI,$          ;等待接收从机的校验和
               MOV     A,SBUF        ;从机校验和送A
               CJNE    A,70H,RECEIVEX ;接收到的校验和等于从机发送的校验和?否,跳到RECEIVEX
               MOV     SBUF,#00H     ;是,向从机发回接收正确的标志00H
               CLR     REN          ;不允许再接收
               RET

RECEIVEX:      MOV    SBUF,#0FFH    ;向从机发回接收出错标志0FFH 
               SJMP   RECEIVE       ;再次接收数据块


DISPLAYLED:    MOV    R0,#30H
              
DISPLAY:       MOV    R1,#4         ;共四个八段管 
               MOV    R3,#11111110B ;从左边开始显示

LOOP:          MOV    P2,#0FH       ;关所有八段管
               MOV    P1,R0         ;显示一位八段管
               MOV    P2,R3
               MOV    R6,#1
               LCALL  DELAY           ;调用延迟子程序
               MOV    A,R3           ;显示下一位
               RL     A
               MOV    R3,A
               INC    R0
               DEC    R2              ;数据块长度减1
               DJNZ   R1,LOOP        ;四位显示完?否,跳到LOOP
               MOV    A,R2           ;将R2中的值给A
               JNZ    DISPLAY     ;数据块都显示完?否,跳到DISPLAY
               RET                    ;是,返回
  




                              
START:         MOV     SP,#70H     ;设置堆栈指针            
               MOV     PCON,#00H    ;设置SMOD=0
               MOV     TMOD,#20H    ;定时器T1设置为方式2
               MOV     TH1,#0FDH    ;设置波特率为9600bps
               MOV     TL1,#0FDH
               SETB    TR1         ;启动T1
               MOV     SCON,#0F8H   ;串口工作于方式3,允许接收,TB8=1
               MOV     R7,#1        ;设置通信的次数
               MOV     10H,#01H    ;被寻址的从机地址暂存到10H

AA:            MOV     SBUF,10H     ;发送从机地址
               CLR     TI           ;清发送中断标志位
               JNB     TI,$        ;等待发送完
               CLR     RI           ;清接收中断标志位
               JNB     RI,$         ;等待从机应答
               MOV     A,SBUF      ;从机应答地址送A
               CJNE    A,10H,AAX    ;从机应答地址相符?否,跳至AAX
               LCALL   RECEIVE      ;是,接收从机发过来的数据块
               MOV    R4,#30        ;设置刷新次数

DISAGAIN:     LCALL   DISPLAYLED   ;调用显示子程序
              DJNZ   R4,DISAGAIN  
               INC     10H         ;准备下个被寻址从机地址
               DJNZ    R7,AA       ;所有从机都完成通信?否,跳到AA
               
AAX:           MOV     SBUF,#0FFH   ;送从机拒绝接收命令
               CLR     TI
               JNB     TI,$         ;等待命令发送完成
               SETB    TB8          ;重设地址帧标志
               SJMP    AA          ;跳到AA,重新发送该从机地址

               END















⌨️ 快捷键说明

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