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

📄 主机通讯子程序.asm

📁 一主多从中断方式,查询方式,完整的单片机通讯程序集合,编译即可应用。
💻 ASM
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;      name:    MCOM:      调试成功     此前电源问题                             *
;  FUNCTION:                                                                     *
;     ENTRY:                                                                     *
;                      1   与数据流方向相同                                      *
;               ABUFFER1,ABUFFER2 :该段效果前进方向的末端地址                   *
;               COLOURC:   必须通过前级程序为其赋值:#颜色代码                   *
;               SEG   :(SHIFT TIMES OF 1 ROW)=BYTES-1   THREE BYTES ONE PIPE    *
;                        在该区间(一行,半行,或更少)移动的次数,也就是该区间    *
;                        字节数减1。                                             *
;   出口信息:  进端填入一个点的颜色,末端内容被移出,整体沿所规定方向移一点     *                                                                *
; 子程序调用:   无                                                              *
;   影响资源:   DPTR,R5,C                                                       *
;   堆栈需求:   3字节                                                           *
;   全局变量:    无                                                              *
;   作 者:      孙宗伟                                                          *
;   日 期:      2006年1月1日                                                  *
;   修改人:      孙宗伟                                                          *
;   日 期:      2006年1月3日                                                  *
;   执行时间:                            *
;     remark:    USE EXTEND  RAM 61C256                                          *
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              ;(R2) 被寻址从机地址
              ;(R3)  主机命令
              ; (R4)  数据块长度
              ; (R0)  主机发送的数据块首址
              ; (R1)  主机接收的数据块首址
              ORG    0000H
              AJMP   RESET
              ORG    0100H
      RESET:  MOV    SP,#60H
       OP:    MOV    R2,#00H   ;被寻址从机地址
              MOV    R3,#01H   ;主机命令;要求从机发数
              MOV    R1,#30H   ;接收的数据块首址
              CLR    P1.0
              MOV    R5,#10
              LCALL  DELAY
              SETB   P1.0
              LCALL  MCOM
              LCALL  TR_DSPLY
              CLR    P1.0
              MOV    R5,#10
              LCALL  DELAY
              SETB   P1.0
                  MOV    R2,#01H   ;被寻址从机地址
              MOV    R3,#01H   ;主机命令;要求从机发数
              MOV    R1,#30H   ;接收的数据块首址
              CLR    P1.1
              MOV    R5,#10
              LCALL  DELAY
              SETB   P1.1
              LCALL  MCOM
              LCALL  TR_DSPLY
                 MOV    R2,#03   ;被寻址从机地址
              MOV    R3,#01H   ;主机命令;要求从机发数
              MOV    R1,#30H   ;接收的数据块首址
              CLR    P1.3
              MOV    R5,#5
              LCALL  DELAY
              SETB   P1.3
              LCALL  MCOM
              LCALL  TR_DSPLY
              AJMP   OP
      ;;;;;;;;........................
   TR_DSPLY:  MOV    R1,#30H
              MOV    R4,#16
    TR_LP:    MOV    A,@R1
              CPL    A
              MOV    P1,A
              MOV    R5,#10
              LCALL  DELAY
              INC    R1
              DJNZ   R4,TR_LP
              MOV    P1,#0FFH
              RET
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    DELAY:        MOV   R6,#200
    D1:           MOV   R7,#248
    D2:           DJNZ  R7,D2             ;1秒延迟
                  DJNZ  R6,D1
                  DJNZ  R5,DELAY
                  RET
         MCOM:    MOV    TMOD,#20H
                  MOV    TL1,#0F3H  ;12MHz
                  MOV    TH1,#0F3H  ;4800
                  SETB   TR1
                  MOV    PCON,#80H  ;SMOD=1
                  MOV    SCON,#0D8H ;11011000B
       TX_ADDR:   MOV    A,R2       ;R2中为从机地址
                  MOV    SBUF,A
         LOOP1:   JNB    TI,LOOP1
                  CLR    TI
      RX_REPLY:   JBC    RI,IF_AGREE
                  SJMP   RX_REPLY
      IF_AGREE:   MOV    A,SBUF
                  XRL    A,R2
                  JZ     TX_COMD
       COMEBAKE:  MOV    A,#0FFH
                  SETB   TB8
                  MOV    SBUF,A
         LOOP2:   JNB    TI,LOOP2
                  CLR    TI
                  SJMP   TX_ADDR
        TX_COMD:  CLR    TB8
                  MOV    A,R3      ;R3中为控制码
                  MOV    SBUF,A
         LOOP3:   JNB    TI,LOOP3
                  CLR    TI
      RX_STATE:   JBC    RI,IF_RIGHT
                  SJMP   RX_STATE
      IF_RIGHT:   MOV    A,SBUF
                  JNB    ACC.7,GO_ON
                  SJMP   COMEBAKE
         GO_ON:   CJNE   R3,#00H,RECEIVE
                  JNB    ACC.0,COMEBAKE
      TX_BYTES:   MOV    A,R4    ;DATA BLOCK LENGTH
                  MOV    SBUF,A
         WAIT1:   JBC    TI,TX_DATA
                  SJMP   WAIT1
       TX_DATA:   MOV    A,@R0
                  MOV    SBUF,A
         WAIT2:   JNB    TI,WAIT2
                  CLR    TI
                  INC    R0
                  DJNZ   R4,TX_DATA
                  RET
;......................................................
       RECEIVE:   JNB    ACC.1,COMEBAKE
      RX_BYTES:   JNB    RI,RX_BYTES
                  CLR    RI
                  MOV    A,SBUF
                  MOV    R4,A
                  MOV    @R1,A
                  INC    R1
      RX_DATA:    JNB    RI,RX_DATA
                  CLR    RI
                  MOV    A,SBUF
                  MOV    @R1,A
                  INC    R1
                  DJNZ   R4,RX_DATA
                  RET
                  end



⌨️ 快捷键说明

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