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

📄 dtmf-test.asm

📁 LPC900 FLASH单片机实现电话远程遥控
💻 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 + -