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

📄 ars232b.asm

📁 汽车气门生产自控系统控制算法及源码
💻 ASM
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序-------------------RS232B.ASM(调试程序)
;日期-------------------1997年08月24日
;作者-------------------胡丙龙
;功能-------------------1. 从串口接收数据,命令
;                       2. 从串口发送数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                D_COUNT EQU 40H
                D_FLAG  EQU 5fH
                RW_FLAG EQU 60H
;
                ORG 2000H
                LJMP MAIN
                ORG 2023H
                LJMP COMI
;
                ORG 2030H
MAIN:           CLR RS0
                CLR RS1                 ;选择寄存器组0
                MOV SP,#30H             ;堆栈
                MOV TMOD,#20H           ;设置T1方式2
                MOV SCON,#70H           ;串口工作方式1,允许接收,SM2=0
                MOV PCON,#80H           ;SMOD=1
                MOV TH1,#0FDH
                MOV TL1,#0FDH           ;波特率=9600BPS
                SETB TR1
                SETB EA
                SETB ES
                MOV D_COUNT,#00H        ;通讯数据计数器
                MOV D_FLAG,#00H
                MOV 70H,#00H
                MOV DPTR,#3000H         ;数据存放区首址
LOOP:           MOV A,D_FLAG
                JZ LOOP
                CLR ES
                LJMP 0000H              ;循环等待
;
;
                ORG 2080H
COMI:           CLR ES
                PUSH B
                PUSH A
                PUSH PSW
                JBC RI,COMI_R            ;识别中断源,是接收中断,转
                CLR TI                   ;是发送中断,清标志退出
                AJMP COMI_RET                 
;
COMI_RET:       POP PSW
                POP A
                POP B
                SETB ES
                RETI
;
COMI_R:         MOV A,SBUF              ;取数据
                MOV B,A
                INC D_COUNT             ;接收计数器加1
                MOV A,D_COUNT
                CJNE A,#01H,RNEXT1      ;接收到第一个字节,#80
                ACALL COMI_T            ;立即送回作为应答
                AJMP COMI_RET
RNEXT1:         CJNE A,#02H,RNEXT2      ;接收到第二个字节,机台号
                ACALL COMI_T            ;立即回送作为应答
                AJMP COMI_RET
RNEXT2:         CJNE A,#03H,RNEXT3      ;接收到第三个字节,工件号
                ACALL COMI_T            ;立即回送作为应答
                AJMP COMI_RET
RNEXT3:         CJNE A,#04H,RNEXT4      ;接收到第四个字节,命令
                MOV RW_FLAG,B           ;保存命令
                MOV A,RW_FLAG
                CJNE A,#01H,RNEXT6      ;RW_FLAG=2,不作应答,开始上送数据到PC机
                ACALL COMI_T            ;RW_FLAG=1,立即送回作为应答
                AJMP COMI_RET
RNEXT4:         MOV A,RW_FLAG
                CJNE A,#01H,RNEXT6      ;RW_FLAG=2,上送数据到PC机
                MOV A,D_COUNT           ;RW_FLAG=1,由PC机送入数据
                CJNE A,#0CDH,RNEXT5     ;判数据传送完,4+C8+1=CDH,最后为0XFF,无须应答
                MOV D_FLAG,#01H         ;结束通讯标志置1
                AJMP COMI_RET
RNEXT5:         MOV A,B
                LCALL 0C22H             ;数据存储
                INC DPTR
                ACALL COMI_T            ;回送作为应答
                AJMP COMI_RET
RNEXT6:         MOV A,D_COUNT
                CJNE A,#0CDH,RNEXT7     ;判数据传送完,4+C8+1=CDH,最后为0XFF,无须应答
                MOV D_FLAG,#01H         ;结束通讯标志置1
                AJMP COMI_RET
RNEXT7:         MOVX A,@DPTR            ;上送数据到PC机
                MOV B,A
                ACALL COMI_T
                INC DPTR
                AJMP COMI_RET
;
COMI_T:         MOV A,B
                MOV SBUF,A
                RET

⌨️ 快捷键说明

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