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

📄 从机.asm

📁 该程序是用于信息传输控制的程序
💻 ASM
字号:
;*************************************************************
;   1.完成从机从主机并口接收报文信息然后转发给K口设备
;   2.完成接收K口设备送来的报文信息然后转发给PC机
;*************************************************************
        DATA2051  EQU     P1
        CFS       BIT     P3.2       ;CFS作为从机向主机发数据的通知线
        HFS       BIT     P3.3       ;HFS作为主机向从机发数据的通知线
        MANG      BIT     P3.4       ;MANG作为主、从机忙标志线
        MS1       BIT     P3.7       ;K口设备主从机状态设置位
        REQUEST   EQU     "?"        ;发送请求信号
        TONG      EQU     "="        ;通道建立信号
        ENDSIGN   EQU     02H        ;控制命令结束符
       REQCOME    BIT     20H.0      ;请求到达标志
        ISYES     BIT     20H.1      ;通路建立标志标志
        ISMINE    BIT     20H.2      ;本机地址标志位
    ISNOTMINE     BIT     20H.3      ;本机地址标志位
;*************************************************************
        ORG   0000H
        AJMP  START
        ORG   0013H
        AJMP  BINGKOU
        ORG   0023H
        AJMP  PCTOMCU
        ORG   100H
;*************************************************************
START: MOV    SP,#60H
                                     ;初始化
       MOV    TMOD,#20H              ;设置定时器1为方式2(做波特率发生器,晶振11.0592M)
       MOV    TH1,#0F4H              ;T1初始值设置(BAUD RATE=2400 BIT/S)
       MOV    TL1,#0F4H
       SETB   EA                     ;CPU允许中断
       SETB   ES                     ;允许串口中断
       SETB   EX1                    ;允许外部1中断
       SETB   IT1                    ;外部中断1为边沿触发
       SETB   PX1                    ;外部中断1为高优先级
       MOV    SCON,#50H              ;设置串口为方式1(8个数据位)
       SETB   TR1                    ;启动定时器1
       SETB   MS1                    ;设置K口设备为从机状态
       MOV    P1,#0FFH
       SETB   CFS                    ;预设主机闲
       SETB   HFS                    ;预设从机闲
       SETB   MANG                   ;预设未准备好或未完成
       CLR    ISMINE                 ;预设非本机地址
       CLR    ISNOTMINE
       CLR    REQCOME                ;预设未收到请求
       CLR    ISYES                  ;预设通道未建立

       mov    R3,#3                  ;连续收到R3个“?” 后  REQCOME=1

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       MOV    4FH,#"A"               ;从机号
;****************************************************
HERE:  JNB    REQCOME,$              ;等待请求信号
HERE0: JNB    MANG,$
       MOV    R7,#1
       DJNZ   R7,$
       JNB    MANG,HERE0
       CLR    MANG
       SETB   ISYES                  ;允许接收数据
HERE1: MOV    SBUF,#TONG             ;回"="给PC机
       MOV    A,4FH                  ;发送从机地址给主机
       MOV    P1,A
       CLR    CFS                    ;延时等待并口接收
       MOV    R7,#1
       DJNZ   R7,$
       SETB   CFS
       JNB    TI,$
       CLR    TI
       CLR    REQCOME
       AJMP   HERE
;*************************************************************
;    串口接收K口设备报文数据中断服务程序
;*************************************************************
PCTOMCU: PUSH   PSW
         PUSH   A
         JNB    RI,NEXT                ;TI=1,为发送中断
         CLR    RI                     ;清接收中断标志
         MOV    A,SBUF                 ;读出串口接收的数据
         JB     ISYES,DOREC
         cjne   a,#REQUEST,PCTOMCU1    ;判断是否有请求?到来
         djnz   r3,NEXT
         SETB   REQCOME                ;收到"?个数满足条件标志REQCOME=1
         AJMP   NEXT

PCTOMCU1:mov    r3,#3                  ;只要不是连续的?就将R3赋初值
         ajmp   NEXT

DOREC:   MOV    P1,A                   ;转发数据
         CLR    CFS                    ;延时等待并口接收
         MOV    R7,#15
         DJNZ   R7,$
         SETB   CFS
         ;MOV    P1,#0FFH
         CJNE   A,#ENDSIGN,NEXT        ;判断报文发送是否完毕
         MOV    P1,#0FFH
         SETB   MANG
         CLR    ISYES
         mov    r3,#3
NEXT:    POP    A
         POP    PSW                    ;中断返回
         RETI
;*************************************************************
;    并口接收主机发来报文数据中断服务程序
;*************************************************************
BINGKOU: PUSH   PSW
         PUSH   A
         MOV    A,P1
PINREC:  JB     ISMINE,PINREC0         ;判断是否本地标志位
         JB     ISNOTMINE,NOTME1
         CJNE   A,4FH,NOTME           ;判断是否是本地地址
         SETB   ISMINE                 ;接收地址是本地地址
         AJMP   NEXTB

PINREC0: MOV    SBUF,A                 ;发送报文
         JNB    TI,$
         CLR    TI
         CJNE   A,#ENDSIGN,NEXTB       ;判断控制命令结束符到达否
         MOV    P1,#0FFH
         CLR    ISMINE
         SJMP   NEXTB
NOTME1:  CJNE   A,#ENDSIGN,NEXTB
         MOV    P1,#0FFH
         CLR    ISNOTMINE
         SJMP   NEXTB
NOTME:   SETB   ISNOTMINE
NEXTB:   POP    A
         POP    PSW
         RETI

         END

⌨️ 快捷键说明

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