?? dtmf-test.asm
字號:
;--------------- 周立功單片機研究所 -----------
;----------------------------------------------
;文件名: DTMF-TEST.ASM
;開發(fā): WWW.ZLGMCU.COM
;創(chuàng)建日期: 2004.03.25
;創(chuàng)建人: 唐堯福
;功能: DTMF信號的自發(fā)自收測試
;-----------------------------------------------
;-----------------------------------------------
$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口設(shè)置為準雙向
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,突發(fā)模式,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 ;發(fā)送數(shù)據(jù)到MT8880
MAIN_L2:
CALL MT8880_RS
JNB ACC.2,MAIN_L2 ;在此等待接收有效信號,STATUS.2=1表示接收到DTMF信號.
MOV STATUS_BUF,A
CALL MT8880_RD ;讀取數(shù)據(jù)
MOV RCV_BUF,A
MOV A,STATUS_BUF ;顯示狀態(tài)寄存器的內(nèi)容
CPL A
CALL HC595_SENDDAT
MOV R7,#05
CALL DELAY
MOV A,RCV_BUF ;顯示接收到的數(shù)據(jù)和發(fā)送的數(shù)據(jù),接收數(shù)據(jù)在高4位,
SWAP A
ORL A,SEND_BUF ;發(fā)送的數(shù)據(jù)在低4位
CPL A
CALL HC595_SENDDAT ;送LED顯示
MOV R7,#05
CALL DELAY
JMP LOOP
;***************************************************************
;名稱: MT8880_RST
;功能: 初始化MT8880,發(fā)送禁止,中斷禁止,DTMF模式,突發(fā)模式
;***************************************************************
MT8880_RST:
CLR A
CALL MT8880_WC ;寫控制寄存器,確保控制寄存器指針指向CRA
CALL MT8880_WC
MOV A,#08H ;寫控制寄存器A,輸出禁止,中斷禁止,DTMF模式
CALL MT8880_WC
CLR A ;寫控制寄存器B,突發(fā)模式,DTMF模式
CALL MT8880_WC
CALL MT8880_RS ;讀狀態(tài)寄存器,用以清除各標志
RET
;*****************************************
;名稱: MT8880_WC
;功能: 寫控制寄存器CRA或CRB
;入口參數(shù): ACC--控制寄存器的寫入數(shù)據(jù)。
; 低4位有效。
;出口參數(shù): 無
;*****************************************
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的發(fā)送數(shù)據(jù)寄存器
;入口參數(shù): ACC--要發(fā)送的數(shù)據(jù)
;出口參數(shù): 無
;***************************************
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的接收數(shù)據(jù)寄存器
;入口參數(shù): 無
;出口參數(shù): ACC--讀出的數(shù)據(jù),低4位有效
;***************************************
MT8880_RD:
ORL MT8880_DATA,#0FH ;D0~D3設(shè)置為輸入
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的狀態(tài)寄存器
;入口參數(shù): 無
;出口參數(shù): ACC--讀出的數(shù)據(jù),低4位有效
;***************************************
MT8880_RS:
ORL MT8880_DATA,#0FH ;D0~D3設(shè)置為輸入
CLR MT8880_CS
SETB MT8880_RS0 ;讀MT8880狀態(tài)寄存器
SETB MT8880_RW
SETB MT8880_CLK
MOV A,MT8880_DATA
ANL A,#0FH
CLR MT8880_CLK
SETB MT8880_CS
RET
;**********************************************************
;名稱: HC595_SENDDAT
;功能: 發(fā)送數(shù)據(jù)到L1~L8進行顯示。
;入口參數(shù): ACC--要顯示的數(shù)據(jù),(ACC.0--L1;ACC.7--L8)。
;出口參數(shù): 無
;**********************************************************
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 + -