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

📄 24-1 485receive.asm

📁 RS-485接口具有较强的抗干扰性
💻 ASM
字号:
       ;晶振11.0592MHz
       ;485通讯Receive.ASM
       ;接收1,2,3,......,并送数码显示



        DBUF      DATA  030H 
        BIT_COUNT DATA  040H
        TIMER     DATA  041H
        DATA_IN   DATA  020H
        DATA_OUT  DATA  021H
        CLK       BIT   P1.6
        DAT       BIT   P1.7
        R_W485   BIT    P3.2

        ORG   0000H
        JMP  main
        ORG   0100H
main:  
        MOV   SCON,#01010000B     ;设定串行方式1:8位异步,允许接收
        MOV   TMOD,#20H           ;设定计数器1为模式2
        ORL   PCON,#10000000B     ;波特率加倍
        MOV   TH1,#0F4H           ;设定波特率为4800
        MOV   TL1,#0F4H
        SETB  TR1                 ;计数器1开始计时
        CLR    A
        ACALL  TOBCD
        ACALL  DISPLAY
RECEIVE:
        CLR   R_W485              ;发送控制
mloop:
        JNB   RI,$                ;等待接收
        CLR   RI                  ;清接收标志
        MOV   A,SBUF              ;接收数据缓冲
        ACALL  TOBCD
        MOV   A,DBuf+2
        JNZ   TODISP
        mov   DBuf+2, #0FH  ; 消影     
        MOV   A,DBuf+1
        JNZ   TODISP
        mov   DBuf+1, #0FH
        MOV   A,DBuf
        JNZ   TODISP
        mov   DBuf, #0FH

TODISP:
        ACALL  DISPLAY
        ACALL  DELAY
        SJMP  mloop
TOBCD:;===================

        mov   b, #100
        div   ab
        mov   DBuf+2, a
        mov   a, b
        mov   b, #10
        div   ab
        mov   DBuf+1, a
        mov   a, b   
        mov   DBuf, a 
        ret

DELAY:  LCALL   DELAY1
        LCALL   DELAY1
        LCALL   DELAY1
        LCALL   DELAY1
        LCALL   DELAY1
        RET
DELAY1:MOV   R1, #0
DLOOP: DJNZ  R1, DLOOP
       DJNZ  R0, DELAY1
       RET
Delay2:
       mov   r5, #2
A0:    mov   r6, #20     
A1:    mov   r7, #50
DelayLoop:
       NOP
       NOP
       djnz  r7, DelayLoop
       djnz  r6, A1
       djnz  r5, A0
       RET
DISPLAY:  	 
	 ANL   P2,#00H              ; CS7279有效
	 MOV   DATA_OUT,#10100100B  ; A4H,复位命令
	 CALL  SEND
         MOV   DATA_OUT,#10000000B  ; 在第一个数码管上显示
	 CALL  SEND
	 MOV   DATA_OUT,DBUF       
	 CALL  SEND	 
         MOV   DATA_OUT,#10000001B  ; 译码方式0,2位显示在第二个数码管上显示
	 CALL  SEND
	 MOV   DATA_OUT,DBUF+1       
	 CALL  SEND
         MOV   DATA_OUT,#10000010B  ; 译码方式0,3位显示在第三个数码管上显示
	 CALL  SEND
	 MOV   DATA_OUT,DBUF+2       
	 CALL  SEND
         RET
       
SEND:     MOV  BIT_COUNT,#8         ; 发送字符子程序
          ANL  P2,#00H
          CALL LONG_DELAY
SEND_LOOP:MOV  C,DATA_OUT.7
          MOV  DAT,C
          SETB CLK
          MOV  A,DATA_OUT
          RL   A
          MOV  DATA_OUT,A
          CALL SHORT_DELAY
          CLR  CLK
          CALL SHORT_DELAY
          DJNZ BIT_COUNT,SEND_LOOP
          CLR  DAT
          RET
LONG_DELAY:  MOV TIMER,#80          ;延时约200US
DELAY_LOOP:  DJNZ TIMER,DELAY_LOOP
             RET
SHORT_DELAY: MOV TIMER,#6           ;延时约20US
SHORT_LP:    DJNZ TIMER,SHORT_LP
             RET


        END

⌨️ 快捷键说明

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