?? sandr.asm
字號:
;*******發送/接收程序**************
;首先要整理數據
F_TEL1 BIT 010H ;在電話1解碼的最后,應設置此標志位
F_TEL2 BIT 011H ;
F_DATA_LAST BIT 012H ;數據發送完成標志
TEL_BUF
TEL_NUM ;暫存位置
;輸入:要發送的個數tel_num、發送BUFFER的開始位置tel_buf
;影響的是R0、R1、R2、R3、R4
OUT:
JNB F_TEL1,SEND_TEL2 ;首先合并
AJMP SEND_TEL1
JNB F_TEL2,OUTRET
SEND_TEL1:
MOV R0,#TEL1_BUF
MOV R2,TEL1_NUM
AJMP START_OUT
SEND_TEL2:
MOV R0,#TEL2_BUF
MOV R2,TEL2_NUM
START_OUT:
MOV TEL_BUF,R0 ; 暫存
MOV R3,TEL_BUF
MOV TEL_NUM,R2
MOV A,R0
ADD A,R2
MOV R2,A ;此時,R2是結束的地址
START_OUT_0:
MOV A,R0
MOV R1,A
MOV A,R2
XRL A,R0 ;是否已經到了最后一個
JNZ START_OUT_1
SETB F_DATA_LAST
AJMP START_OUT_2
START_OUT_1:
INC R1
MOV A,R2
XRL A,R1 ;是否已經到了最后一個
JNZ START_OUT_2
SETB F_DATA_LAST
START_OUT_2:
MOV A,@R0
SWAP A
ANL A,#0F0H
MOV @R3,A
JNB F_DATA_LAST START_OUT_4 ;最后一個數低4位為F
ORL A,#00FH
MOV @R3,A
AJMP START_OUT_3
START_OUT_4:
MOV A,@R1
ORL A,@R0
MOV @R3,A
INC R0
INC R0
INC R3
JB F_DATA_LAST,START_OUT_3
AJMP START_OUT_0
SETB DATACLK ;第一個CLK高電平發送第一個BIT,然后每翻轉一次,一個BIT
START_OUT_3:
MOV A,TEL_NUM
MOV B,2
DIV AB
INC A
MOV TEL_NUM,A ;是要發送的BYTE個數
MOV R2,TEL_NUM
MOV A,R3
MOV R0,A
START_OUT_5:
MOV R1,#08H
CLR C
START_OUT_8:
MOV A,@R0
RLC A
MOV @R0,A
JC START_OUT_6
CLR DATAOUT
AJMP START_OUT_7
START_OUT_6:
SETB DATAOUT
START_OUT_7:
CPL DATACLK
DJNZ R1,START_OUT_8 ;8BIT結束
INC R0
DJNZ R2,START_OUT_5 ;發送的BYTE數
;ADD A,#0CH ;最后連續發送3個F
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -