⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ht9032demo.txt

📁 在keil开发环境下实现的汇编程序
💻 TXT
字号:
HT9032示例程序


这是使用了HT9032典型应用电路的持续,与PC的连接需要隔离 
PWR_UP BIT P1.0 ; 
RECE_IN BIT 7FH ; 
T0_TIMER DATA 2BH ;5秒倒计时计数器 
;-------------------------------; 
ORG 0000H ; 
ST: AJMP START ;程序入口 
ORG 0003H ; 
AJMP INT_0 ;振铃中断 
ORG 000BH ; 
AJMP T_0 ;定时中断 
ORG 0013H ; 
AJMP INT_1 ;DTMF中断 
ORG 001BH ; 
RETI ; 
ORG 0023H ; 
AJMP RECE ;串行接收中断 
;-------------------------------; 
ORG 0030H ; 
START: 
MOV SP,#07H ;主程序 
ACALL INIT ; 
AJMP $ ; 
INIT: ; 
CLR PWR_UP 
MOV TMOD,#21H ;T0为16位计数器,T1为波特率定时器,1200bps 
MOV TH1,#0F8H ;3.58MHz晶体,1200bps 
MOV TL1,#0F8H ; 
MOV SCON,#40H ;8位UART,方式1 
CLR RECE_IN ; 
ACALL CLEAR_BUFF ;清除RAM内容 
SETB IT0 ;设定为边沿触发方式中断 
SETB TR1 ;允许波特率计数器计数 
; MOV A,7FH ; 
; CJNE A,#0AAH,FOR1 ;冷、热启动检测 
; MOV A,7EH ; 
; CJNE A,#055H,FOR1 ; 
; AJMP FOR2 ; 
;FOR1: ACALL SEND_MYID ;开机显示 
; MOV 7FH,#0AAH ; 
; MOV 7EH,#055H ; 
FOR2: SETB ET0 ;允许T0中断 
SETB EA ;开放总中断 
SETB EX0 ;允许振铃中断 
RET ; 
;-------------------------------; 
SEND_MYID: ;开机显示: 
MOV DPTR,#TAB ;It's telephone Call-ID demodulator, 
CLR A ;made by w557 
SMID1: PUSH ACC ; 
CLR TI ; 
MOVC A,@A+DPTR ; 
CJNE A,#0AAH,SMID2 ; 
AJMP SMID3 ; 
SMID2: MOV SBUF,A ; 
JNB TI,$ ; 
POP ACC ; 
INC A ; 
AJMP SMID1 ; 
SMID3: POP ACC ; 
CLR TI ; 
RET ; 
TAB: DB 020H ;起始符 
DB 049H,074H,027H,073H,020H,074H,065H,06CH ;It's tel 
DB 065H,070H,068H,06FH,06EH,065H,020H,043H ;ephone C 
DB 061H,06CH,06CH,02DH,049H,044H,020H,064H ;all-ID d 
DB 065H,06DH,06FH,064H,075H,06CH,061H,074H ;emodulat 
DB 06FH,072H,02CH,06DH,061H,064H,065H,020H ;or,made 
DB 062H,079H,020H,077H,035H,035H,037H,020H ;by w557 
DB 0AAH ;结束符 
;-------------------------------; 
INT_0: ;振铃中断 
clr ex0 ; 
CLR RECE_IN ; 
acall clear_buff ; 
SETB REN ;允许串行接收 
SETB ES ;开放串行中断 

MOV R3,#01H ; 
MOV R0,#30H ; 
MOV TH0,#00H ; 
MOV TL0,#00H ; 
MOV T0_TIMER,#20 ;4.5秒定时 
SETB TR0 ; 
RETI ; 
;-------------------------------; 
INT_1: ; 
RETI ; 
;-------------------------------; 
T_0: CLR EX0 ;禁止振铃中断 
CLR TR0 ; 
T_0_5: MOV A,T0_TIMER ; 
JNZ T_0_7 ; 
T_0_6: ajmp send_pho ; 
T_0_7: DEC T0_TIMER ; 
SETB TR0 ; 
RETI ; 
;-------------------------------; 
send_pho: ;接收到的数据传送给PC机 
jbc rece_in,send_pho_code 
SSEND_P:clr ren ; 
clr es ; 
clr ie0 ; 
setb ex0 ; 
clr tr0 ; 
reti ; 
send_pho_code: ; 
clr ex0 ; 
clr ren ; 
clr es ; 
MOV R0,#31H ; 
MOV A,@R0 ;读取数据长度 
INC A ;消息总长度为数据长度+3 
INC A ;消息第1字符为消息类型 
INC A ;消息第2字符为数据长度 
;消息最后一个字符为校验和 
MOV R3,A ; 
MOV R0,#30H ; 
SEND_P: CLR TI ; 
MOV A,@R0 ; 
MOV SBUF,A ; 
JNB TI,$ ; 
INC R0 ; 
DJNZ R3,SEND_P ; 
CLR TI ; 
CLR RI ; 
ACALL CLEAR_BUFF ; 
setb ex0 ; 
reti ; 
;-------------------------------; 
CLEAR_BUFF: ;清除RAM内容 
MOV R0,#30H ; 
MOV R1,#30H ; 
CL_BF: MOV @R0,#00H ; 
INC R0 ; 
DJNZ R1,CL_BF ; 
RET ; 
;-------------------------------; 
RECE: ;串行中断 
CLR EX0 ; 
CLR RI ; 
CLR TI ; 
MOV A,R3 ; 
CJNE A,#01H,RECE_1 ; 
MOV A,SBUF ; 
CJNE A,#04H,RECE_0 ;收到的第一字符不为4,转判断是否为8 
MOV 30H,A ; 
INC R3 ; 
AJMP RECE_RET ; 
RECE_0: ; 
CJNE A,#08H,SSEND_P ;收到的第一字符也不为8,则认为数据出错 
MOV 30H,A ; 
INC R3 ; 
AJMP RECE_RET ; 
RECE_1: CJNE A,#02H,RECE_2 ; 
MOV A,SBUF ; 
MOV 31H,A ; 
INC A ; 
MOV R4,A ;获取数据长度 
INC R3 ; 
MOV R0,#32H ; 
AJMP RECE_RET ; 
RECE_2: MOV A,SBUF ; 
MOV @R0,A ; 
INC R0 ; 
DJNZ R4,RECE_RET ; 
CLR EX0 ; 
CLR TR0 ; 
AJMP send_pho_code ; 
; 
RECE_RET: ; 
SETB RECE_IN ;置数据收到标志 
RETI ; 
;-------------------------------; 
END 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -