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

📄 从机通讯子程序3.asm

📁 一主多从中断方式,查询方式,完整的单片机通讯程序集合,编译即可应用。
💻 ASM
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;      name:    MCOM:        调试成功                                            *
;  FUNCTION:                                             *
;     ENTRY:                                                          *
;                      1   与数据流方向相同                                      *
;               ABUFFER1,ABUFFER2 :该段效果前进方向的末端地址                   *
;               COLOURC:   必须通过前级程序为其赋值:#颜色代码                   *
;               SEG   :(SHIFT TIMES OF 1 ROW)=BYTES-1   THREE BYTES ONE PIPE    *
;                        在该区间(一行,半行,或更少)移动的次数,也就是该区间    *
;                        字节数减1。                                             *
;   出口信息:                                                                   *                                                                *
; 子程序调用:   无                                                              *
;   影响资源:   R0,R1                                                           *
;   堆栈需求:   3字节                                                           *
;   全局变量:    无                                                              *
;   作 者:      孙宗伟                                                          *
;   日 期:      2006年1月1日                                                    *
;   修改人:      孙宗伟                                                          *
;   日 期:      2006年1月3日                                                    *
;   执行时间:   297us~~624us 跟随SEG和PFLAG的取值而变化                         *
;     remark:    USE EXTEND  RAM 61C256                                          *
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                   ; 5# 从机查询方式, 主机查询方式
                   ; (R4)  发送数据块长度
                   ; (R0)  从机发送的数据块首址
                   ; (R1)  从机接收的数据块首址
      MYADDR   EQU   03H
              ORG    0000H
              AJMP   RESET
              ORG    0100H
      RESET:  MOV    SP,#60H
       OP:    mov    30h,#00h
              mov    31h,#01h
              mov    32h,#02h
              mov    33h,#04h
              mov    34h,#08h
              mov    35h,#01h
              mov    36h,#03h
              mov    37h,#07h
              mov    38h,#0fh
              mov    39h,#0ah
              mov    3ah,#05h
              mov    3bh,#0ah
              mov    3ch,#05h
              mov    3dh,#0ah
              mov    3eh,#05h
              mov    3fh,#0aah
              MOV    R4,#16     ; 发送数据块长度
              MOV    R0,#30H    ;从机发送的数据块首址
              MOV    R1,#50H    ;从机接收的数据块首址
              SETB   PSW.1      ;发送数据准备就绪标志
              LCALL  SUBCOM
              AJMP   OP
       SUBCOM:    MOV    TMOD,#20H
                  MOV    TL1,#0F3H   ;12MHz
                  MOV    TH1,#0F3H   ;4800
                  SETB   TR1
                  MOV    PCON,#80H  ;SMOD=1
                  MOV    SCON,#0F0H ;11110000B
       RX_ADDR:   JBC    RI,IF_ME       ;R2中为从机地址
                  SJMP   RX_ADDR
       IF_ME:     MOV    A,SBUF
                  XRL    A,#MYADDR
                  JZ     IS_ME
                  SJMP   RX_ADDR
        IS_ME:    CLR    SM2
                  MOV    A,#myaddr
                  MOV    SBUF,A
         LOOP1:   JNB    TI,LOOP1
                  CLR    TI
       RX_COMD:   JNB    RI,RX_COMD
                  CLR    RI
      IF_RESET:   JNB    RB8,DO_WHAT
                  SETB   SM2
                  LJMP   RX_ADDR
        DO_WHAT:  MOV    A,SBUF
                  CJNE   A,#02,COMMAND_CH;00H
     COMMAND_CH:  JC     NEXT
                  MOV    A,#80H     ;非法命令,ERROR=1
                  MOV    SBUF,A
        LOOP2:    JNB    TI,LOOP2
                  CLR    TI
                  SETB   SM2
                  LJMP   RX_ADDR
        NEXT:     JZ     READY_RX
        READY_TX: JB     PSW.1,TX_TRDY
                  MOV    A,#00H
                  MOV    SBUF,A
        LOOP3:    JNB    TI,LOOP3
                  CLR    TI
                  SETB   SM2
                  LJMP   RX_ADDR
;...........................................
      TX_TRDY:    MOV    A,#02H
                  MOV    SBUF,A
                  CLR    PSW.1
        WAIT1:    JBC    TI,TX_BYTES
                  SJMP   WAIT1
       TX_BYTES:  MOV    A,R4
                  MOV    SBUF,A
         WAIT2:   JBC    TI,TX_DATA
                  SJMP   WAIT2
        TX_DATA:  MOV    A,@R0
                  MOV    SBUF,A
         WAIT3:   JNB    TI,WAIT3
                  CLR    TI
                  INC    R0
                  DJNZ   R4,TX_DATA
                  SETB   SM2
                  RET
       READY_RX:  JB     PSW.5,TX_RRDY
                  MOV    A,#00H
                  MOV    SBUF,A
         LOOP4:   JNB    TI,LOOP4
                  CLR    TI
                  SETB   SM2
                  LJMP   RX_ADDR
       TX_RRDY:   MOV    SBUF,#01H
                  CLR    PSW.5
         LOOP5:   JNB    TI,LOOP5
                  CLR    TI
      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
                  SETB   SM2
                  RET
                  end






⌨️ 快捷键说明

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