?? 從機通訊子程序1.asm
字號:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; name: MCOM: 調試成功 *
; FUNCTION: *
; ENTRY: *
; 1 與數(shù)據(jù)流方向相同 *
; ABUFFER1,ABUFFER2 :該段效果前進方向的末端地址 *
; COLOURC: 必須通過前級程序為其賦值:#顏色代碼 *
; SEG :(SHIFT TIMES OF 1 ROW)=BYTES-1 THREE BYTES ONE PIPE *
; 在該區(qū)間(一行,半行,或更少)移動的次數(shù),也就是該區(qū)間 *
; 字節(jié)數(shù)減1。 *
; 出口信息: * *
; 子程序調用: 無 *
; 影響資源: R0,R1 *
; 堆棧需求: 3字節(jié) *
; 全局變量: 無 *
; 作 者: 孫宗偉 *
; 日 期: 2006年1月1日 *
; 修改人: 孫宗偉 *
; 日 期: 2006年1月3日 *
; 執(zhí)行時間: 297us~~624us 跟隨SEG和PFLAG的取值而變化 *
; remark: USE EXTEND RAM 61C256 *
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 5# 從機查詢方式, 主機查詢方式
; (R4) 發(fā)送數(shù)據(jù)塊長度
; (R0) 從機發(fā)送的數(shù)據(jù)塊首址
; (R1) 從機接收的數(shù)據(jù)塊首址
MYADDR EQU 01H
ORG 0000H
AJMP RESET
ORG 0100H
RESET: MOV SP,#60H
OP: mov 30h,#0fh
mov 31h,#0eh
mov 32h,#0dh
mov 33h,#0ch
mov 34h,#0bh
mov 35h,#0ah
mov 36h,#09h
mov 37h,#08h
mov 38h,#07h
mov 39h,#06h
mov 3ah,#05h
mov 3bh,#04h
mov 3ch,#03h
mov 3dh,#02h
mov 3eh,#01h
mov 3fh,#0aah
MOV R4,#16 ; 發(fā)送數(shù)據(jù)塊長度
MOV R0,#30H ;從機發(fā)送的數(shù)據(jù)塊首址
MOV R1,#50H ;從機接收的數(shù)據(jù)塊首址
SETB PSW.1 ;發(fā)送數(shù)據(jù)準備就緒標志
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 + -