📄 9200send.asm
字号:
;==========================================================
;========HT9200发送子程序
;子程序名:HT9200
;功 能:发送R2表示的数据个数
;说 明:输入数据与发送DTMF码的关系:00H-0 01H-1 02H-2 03H-3 04H-4 05H-5 06H-6 07H-7
; 08H-8 09H-9 0AH-A 0BH-B 0CH-C 0DH-D 0EH-* 0FH-#
;函数调用:Delay_10MS 10毫秒延时程序
;入口参数:R2 传送数据个数
; HT9200_BUF 数据缓冲区
;出口参数:无
;资源占用:R0~R5, A
;设 计:XZL 日期:2005-07-19
;==========================================================
;==DEFINE
HT9200_CE BIT P1.0; 芯片使能端0有效
HT9200_DA BIT P1.2; 串行数据端口
HT9200_CK BIT P1.1; 时钟端口,0锁存
HT9200_BUF EQU 30H; 待发送数据缓冲区首地址
HT9200: PUSH PSW;
PUSH A;
PUSH DPL;
PUSH DPH;
SETB HT9200_CE;
SETB HT9200_CK;
CLR HT9200_CE; 芯片使能
LCALL Delay_10MS; 使能到晶体起振延时时间
MOV R1, #HT9200_BUF; 被传送数据的地址指针R1
MOV DPTR, #TABLE_1;
HT9200_L1:
MOV R3, #05H; 5位串行数据代表一位
MOV A, @R1;
MOVC A, @A+DPTR;
HT9200_L2:
MOV HT9200_DA, ACC.0;
RR A;
CLR HT9200_CK; 时钟下降沿锁存数据
NOP;
NOP;
NOP;
SETB HT9200_CK; 开启锁存,准备下次接收
NOP;
NOP;
NOP;
DJNZ R3, HT9200_L2; 已经传送5位?否继续传送
INC R1; 指向下一个传送数据
DJNZ R2, HT9200_L1; 判断数据是否全部传送完毕?否读取下一个传送数据
HT9200_OVER:
MOV R3, #05H;
MOV A, #1FH; 传送结束标志数11111;
HT9200_L3:
MOV HT9200_DA, ACC.0;
RR A;
CLR HT9200_CK;
NOP;
NOP;
NOP;
SETB HT9200_CK;
NOP;
NOP;
NOP;
DJNZ R3, HT9200_L3;
SETB HT9200_CE; 芯片禁止使能
POP DPH;
POP DPL;
POP A;
POP PSW;
RET;
;==========================================================
;时间计算(R4*2*R5+R5*2)*机器周期
Delay_10MS:
MOV R5, #14H;
Loop2: MOV R4, #0FFH;
DJNZ R4, $;
DJNZ R5, Loop2;
RET
;=============================================================================================
TABLE_1:DB 0AH, 01H, 02H, 03H, 04H, 05H, 06H, 07H,08H, 09H, 0DH, 0EH, 0FH, 00H, 0BH, 0CH
; 0 1 2 3 4 5 6 7 8 9 A B C D * #
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -