?? 主機(jī)通訊子程序.asm
字號(hào):
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; name: MCOM: 調(diào)試成功 此前電源問題 *
; FUNCTION: *
; ENTRY: *
; 1 與數(shù)據(jù)流方向相同 *
; ABUFFER1,ABUFFER2 :該段效果前進(jìn)方向的末端地址 *
; COLOURC: 必須通過前級(jí)程序?yàn)槠滟x值:#顏色代碼 *
; SEG :(SHIFT TIMES OF 1 ROW)=BYTES-1 THREE BYTES ONE PIPE *
; 在該區(qū)間(一行,半行,或更少)移動(dòng)的次數(shù),也就是該區(qū)間 *
; 字節(jié)數(shù)減1。 *
; 出口信息: 進(jìn)端填入一個(gè)點(diǎn)的顏色,末端內(nèi)容被移出,整體沿所規(guī)定方向移一點(diǎn) * *
; 子程序調(diào)用: 無 *
; 影響資源: DPTR,R5,C *
; 堆棧需求: 3字節(jié) *
; 全局變量: 無 *
; 作 者: 孫宗偉 *
; 日 期: 2006年1月1日 *
; 修改人: 孫宗偉 *
; 日 期: 2006年1月3日 *
; 執(zhí)行時(shí)間: *
; remark: USE EXTEND RAM 61C256 *
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;(R2) 被尋址從機(jī)地址
;(R3) 主機(jī)命令
; (R4) 數(shù)據(jù)塊長(zhǎng)度
; (R0) 主機(jī)發(fā)送的數(shù)據(jù)塊首址
; (R1) 主機(jī)接收的數(shù)據(jù)塊首址
ORG 0000H
AJMP RESET
ORG 0100H
RESET: MOV SP,#60H
OP: MOV R2,#00H ;被尋址從機(jī)地址
MOV R3,#01H ;主機(jī)命令;要求從機(jī)發(fā)數(shù)
MOV R1,#30H ;接收的數(shù)據(jù)塊首址
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 ;被尋址從機(jī)地址
MOV R3,#01H ;主機(jī)命令;要求從機(jī)發(fā)數(shù)
MOV R1,#30H ;接收的數(shù)據(jù)塊首址
CLR P1.1
MOV R5,#10
LCALL DELAY
SETB P1.1
LCALL MCOM
LCALL TR_DSPLY
MOV R2,#03 ;被尋址從機(jī)地址
MOV R3,#01H ;主機(jī)命令;要求從機(jī)發(fā)數(shù)
MOV R1,#30H ;接收的數(shù)據(jù)塊首址
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中為從機(jī)地址
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -