📄 sandr.asm.bak
字号:
;*******发送/接收程序**************
;首先要整理数据
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
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 + -