📄 dtmf-test.asm
字号:
;--------------- 周立功单片机研究所 -----------
;----------------------------------------------
;文件名: DTMF-TEST.ASM
;开发: WWW.ZLGMCU.COM
;创建日期: 2004.03.25
;创建人: 唐尧福
;功能: DTMF信号的自发自收测试
;-----------------------------------------------
;-----------------------------------------------
$INCLUDE (REG932.INC)
;变量定义
KEY1 BIT P2.0
HC595_DAT BIT P2.2
HC595_CS BIT P2.4
HC595_CLK BIT P2.5
MT8880_D0 BIT P0.0
MT8880_D1 BIT P0.1
MT8880_D2 BIT P0.2
MT8880_D3 BIT P0.3
MT8880_CLK BIT P0.4
MT8880_RS0 BIT P0.5
MT8880_CP BIT P0.7
MT8880_RW BIT P2.6
MT8880_CS BIT P2.7
MT8880_DATA EQU P0
SEND_BUF DATA 30H
RCV_BUF DATA 31H
STATUS_BUF DATA 32H
ORG 0000H
AJMP MAIN
;主程序从这里开始
ORG 0100H
MAIN:
MOV SP,#60H
MOV SEND_BUF,#00H
; CALL ISP_INIT
MOV P0M1,#00H ;P0,P1,P2口设置为准双向
MOV P0M2,#00H
MOV P1M1,#00H
MOV P1M2,#00H
MOV P2M1,#00H
MOV P2M2,#00H
MOV R7,#02H
CALL DELAY
CALL MT8880_RST
MOV A,#0DH ;CRA,中断允许,DTMF模式,音频输出允许
CALL MT8880_WC
MOV A,#00H ;CRB,突发模式,DTMF模式
CALL MT8880_WC
LOOP:
JB KEY1,$ ;等待按键
INC SEND_BUF
MOV A,SEND_BUF
CJNE A,#10H,MAIN_L1 ;如果SEND_BUF=16,则令SEND_BUF=0
MOV SEND_BUF,#00H
MAIN_L1:
MOV A,SEND_BUF
CALL MT8880_WD ;发送数据到MT8880
MAIN_L2:
CALL MT8880_RS
JNB ACC.2,MAIN_L2 ;在此等待接收有效信号,STATUS.2=1表示接收到DTMF信号.
MOV STATUS_BUF,A
CALL MT8880_RD ;读取数据
MOV RCV_BUF,A
MOV A,STATUS_BUF ;显示状态寄存器的内容
CPL A
CALL HC595_SENDDAT
MOV R7,#05
CALL DELAY
MOV A,RCV_BUF ;显示接收到的数据和发送的数据,接收数据在高4位,
SWAP A
ORL A,SEND_BUF ;发送的数据在低4位
CPL A
CALL HC595_SENDDAT ;送LED显示
MOV R7,#05
CALL DELAY
JMP LOOP
;***************************************************************
;名称: MT8880_RST
;功能: 初始化MT8880,发送禁止,中断禁止,DTMF模式,突发模式
;***************************************************************
MT8880_RST:
CLR A
CALL MT8880_WC ;写控制寄存器,确保控制寄存器指针指向CRA
CALL MT8880_WC
MOV A,#08H ;写控制寄存器A,输出禁止,中断禁止,DTMF模式
CALL MT8880_WC
CLR A ;写控制寄存器B,突发模式,DTMF模式
CALL MT8880_WC
CALL MT8880_RS ;读状态寄存器,用以清除各标志
RET
;*****************************************
;名称: MT8880_WC
;功能: 写控制寄存器CRA或CRB
;入口参数: ACC--控制寄存器的写入数据。
; 低4位有效。
;出口参数: 无
;*****************************************
MT8880_WC:
CLR MT8880_CS
SETB MT8880_RS0
CLR MT8880_RW
NOP
SETB MT8880_CLK
ANL A,#0FH
ANL MT8880_DATA,#0F0H
ORL MT8880_DATA,A
NOP
CLR MT8880_CLK
SETB MT8880_CS
RET
;***************************************
;名称: MT8880_WD
;功能: 写MT8880的发送数据寄存器
;入口参数: ACC--要发送的数据
;出口参数: 无
;***************************************
MT8880_WD:
CLR MT8880_CS
CLR MT8880_RS0
CLR MT8880_RW
ANL A,#0FH
ANL MT8880_DATA,#0F0H
ORL MT8880_DATA,A
SETB MT8880_CLK
NOP
CLR MT8880_CLK
SETB MT8880_CS
RET
;***************************************
;名称: MT8880_RD
;功能: 读MT8880的接收数据寄存器
;入口参数: 无
;出口参数: ACC--读出的数据,低4位有效
;***************************************
MT8880_RD:
ORL MT8880_DATA,#0FH ;D0~D3设置为输入
CLR MT8880_CS
CLR MT8880_RS0
SETB MT8880_RW
SETB MT8880_CLK
MOV A,MT8880_DATA
CLR MT8880_CLK
ANL A,#0FH
MOV RCV_BUF,A
SETB MT8880_CS
RET
;***************************************
;名称: MT8880_RS
;功能: 读MT8880的状态寄存器
;入口参数: 无
;出口参数: ACC--读出的数据,低4位有效
;***************************************
MT8880_RS:
ORL MT8880_DATA,#0FH ;D0~D3设置为输入
CLR MT8880_CS
SETB MT8880_RS0 ;读MT8880状态寄存器
SETB MT8880_RW
SETB MT8880_CLK
MOV A,MT8880_DATA
ANL A,#0FH
CLR MT8880_CLK
SETB MT8880_CS
RET
;**********************************************************
;名称: HC595_SENDDAT
;功能: 发送数据到L1~L8进行显示。
;入口参数: ACC--要显示的数据,(ACC.0--L1;ACC.7--L8)。
;出口参数: 无
;**********************************************************
HC595_SENDDAT:
CLR HC595_CS
MOV R7,#08H
HC595_SDL1:
CLR HC595_CLK
RLC A
MOV HC595_DAT,C
NOP
SETB HC595_CLK
DJNZ R7,HC595_SDL1
SETB HC595_CS
CLR HC595_CS
RET
/*
;***************************
;名称: ISP_INI
;功能: ISP功能初始化
;***************************
ISP_INIT:
MOV PCON,#00H
MOV PCONA,#00H
MOV P1M1,0x00
MOV P1M2,0x00
ANL SSTAT,#0FAH
MOV BRGCON,#00H
ORL AUXR1,#40H
MOV SCON,#50H
MOV BRGR1,#90H
MOV BRGR0,#00H
MOV BRGCON,#03H
RET*/
;**********************
; 延时程序
; 延时时间:0.1S*R7
;**********************
DELAY:
MOV A,R7
JNZ DELAY_L1
RET
DELAY_L1:
MOV R6,#0C8H
DELAY_L2:
MOV R5,#0FAH
DELAY_L3:
NOP
NOP
NOP
NOP
DJNZ R5,DELAY_L3
DJNZ R6,DELAY_L2
DJNZ R7,DELAY_L1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -