📄 从机中断通讯子程序.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月1日 *
; 执行时间: 297us~~624us 跟随SEG和PFLAG的取值而变化 *
; remark: USE EXTEND RAM 61C256 *
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;5# 从机 主机查询方式
MYADDR EQU 5
; ORG 0000H
; AJMP START
; ORG 0023H
; LJMP SERVE
; ORG 0050H
START: MOV TMOD,#20H
MOV TL1,#0F3H
MOV TH1,#0F3H
SETB TR1
MOV PCON,#80H ;SMOD=1
MOV SCON,#0F0H ;11110000B
MOV 08H,#50H
MOV 09H,#60H
SETB EA
SETB ES
; LJMP MAIN
;....
SERVE: CLR RI
PUSH ACC
PUSH PSW
CLR RS0
SETB RS1
MOV A,SBUF
XRL A,#MYADDR
JZ IS_ME
RETURN: POP PSW
POP ACC
RETI
IS_ME: CLR SM2
MOV SBUF,#MYADDR
LOOP1: JNB TI,LOOP1
CLR TI
RX_COMD: JNB RI,RX_COMD
CLR RI
IF_RESET: JNB RB8,DO_WHAT
SETB SM2
LJMP RETURN
DO_WHAT: MOV A,SBUF
CJNE A,#02H,00H
JC NEXT
MOV A,#80H
MOV SBUF,A
LOOP2: JNB TI,LOOP2
CLR TI
SETB SM2
LJMP RETURN
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 RETURN
;...........................................
TX_TRDY: MOV A,#02H
MOV SBUF,A
CLR PSW.1
WHAT1: JNB TI,WHAT1
CLR TI
MOV A,@R0
MOV R4,A
INC R4
TX_DATA: MOV SBUF,@R0
WHAT2: JNB TI,WHAT2
CLR TI
INC R0
DJNZ R4,TX_DATA
SETB SM2
LJMP RETURN
READY_RX: JB PSW.5,TX_RRDY
MOV A,#00H
MOV SBUF,A
LOOP4: JNB TI,LOOP4
CLR TI
SETB SM2
LJMP RETURN
TX_RRDY: MOV SBUF,#01H
CLR PSW.5
RX_BYTES: JNB RI,RX_BYTES
CLR RI
MOV A,SBUF
MOV @R1,A
INC R1
MOV R4,A
RX_DATA: JNB RI,RX_DATA
CLR RI
MOV @R1,SBUF
INC R1
DJNZ R4,RX_DATA
SETB SM2
LJMP RETURN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -