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

📄 receivedata.asm

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*******************************************************************
;*                                                                 *
;* ME500单片机开发系统演示程序 - 接收 DTMF 编码                    *
;*                                                                 *
;* LCD1602显示                                                     *
;*                                                                 *
;*                                                                 *
;* 版本: V1.0 (2006/11/20)                                        *
;* 作者: gguoqing (Email: gguoqing@willar.com)                    *
;* 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界) *
;* 邮箱: support@willar.com                                       *
;*                                                                 *
;*【版权】Copyright(C)伟纳电子 www.willar.com  All Rights Reserved *
;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!       *
;*                                                                 *
;*******************************************************************

         MT_RS   EQU  P2.3
         MT_RW   EQU  P2.4
         MT_CS   EQU  P2.5
         MT_CK   EQU  P2.6
         TEL     EQU  P2.7

         LCD_RS  EQU  P2.0     ;LCD控制端口
         LCD_RW  EQU  P2.1
         LCD_EN  EQU  P2.2
         LCD_X   EQU  27H      ;LCD 地址变量
         BEEP    BIT  P3.7

         COUNT   EQU  2FH
         TEMP    EQU  2EH
         
;**********************************************************

         ORG   0000H
         AJMP  MAIN
         ORG   0003H
         LJMP  EX_T0
         ORG   0013H
         LJMP  EX_T1
         ORG   0030H

;**********************************************************
MAIN:
        MOV  SP,#60H
        MOV  P1,#0FFH
        MOV  P0,#0FFH
        MOV  P2,#0FFH
        MOV  P3,#0FFH

        CALL  INIT_LCD        ;初始化LCD
        CALL  SET_LCD1        ;第一行显示信息
        CALL  SET_LCD2        ;第二行显示信息

        SETB IT1              ;设置中断触发方式:下降沿触发
        SETB EA               ;总的中断允许
        SETB EX1              ;允许外部中断EX1中断


        MOV  R0,#30H
        MOV  20H,#00H
        MOV  COUNT,#00H
CLR1:
        MOV  @R0,#00H
        INC  R0
        CJNE  R0,#3FH,CLR1
        MOV  R0,#30H

;-------------------------------------------------------
MAIN1:
        JB  20H.0,MAIN2     ;振铃信号有效
        JMP  MAIN1
MAIN2:
        CLR  EX1              ;关闭外部T1中断
        CLR  20H.0
        MOV  COUNT,#00H
        CLR  TEL             ;摘机
        ACALL  DELAY50MS     ;延时150ms
        ACALL  DELAY50MS     ;等待电话线路稳定
        ACALL  DELAY50MS

        ACALL  MT_INIT
        ACALL  MT_IRQ_INIT
        MOV  LCD_X,#04H       ;设定显示初始位
        MOV  TEMP,#00H       
MAIN3:
        MOV  A,TEMP
        CJNE  A,#0BH,MAIN4    ;"*"
        CLR  EX0              
        MOV  TEMP,#00H
        CALL  BEEP_BL
        CALL  BEEP_BL                 
        SETB  EX0
MAIN4:
        MOV  A,TEMP
        CJNE  A,#0CH,MAIN3    ;"#"
        CLR  EX0
        CALL  BEEP_BL         ;挂机提示音
        CALL  BEEP_BL
        CALL  BEEP_BL
        CALL  BEEP_BL        
        SETB  TEL             ;挂机
        AJMP  MAIN

;-------------------------------------------------------------
;MT8880 初始化
;RS=1,RW=0,写状态寄存器
;-------------------------------------------------------------
MT_INIT:
        MOV    A,#10H
        CLR    MT_CS
        NOP
        NOP
        SETB   MT_RS
        CLR    MT_RW
        CLR    MT_CK
        MOV    P1,A            ;写 8880CRA,CRA=0000.
        LCALL  W_CP

        MOV    P1,A            ;写 8880CRA,CRA=0000.
        LCALL  W_CP

        MOV    A,#18H
        SETB   MT_RS
        CLR    MT_RW
        CLR    MT_CK
        MOV    P1,A            ;写 8880CRA,CRA=1000,允许选择CRB.
        LCALL  W_CP

        MOV    A,#10H
        SETB   MT_RS
        CLR    MT_RW
        CLR    MT_CK
        MOV    P1,A            ;写 8880CRB,CRB=0000
        LCALL  W_CP
        RET
;---------------------------------------------------------------
;MT8880中断初始化子程序
;RS=1,RW=0,写状态寄存器
;---------------------------------------------------------------
MT_IRQ_INIT:
        MOV    A,#14H
        CLR    MT_CS
        NOP
        NOP
        SETB   MT_RS
        CLR    MT_RW
        CLR    MT_CK
        MOV    P1,A        ;写8880CRA,8880模式1为DTMF,IRQ
        LCALL  W_CP
        SETB IT0           ;设置中断触发方式:下降沿触发
        SETB EA            ;总的中断允许
        SETB EX0           ;允许外部中断EX0中断
        ACALL  DELAY50MS
        ACALL  DELAY50MS
        RET

;**********************************************************
;MT8880中断接收DTMF子程序

;RS=1,RW=1,读状态寄存器
;RS=0,RW=1,读接收数据寄存器.
;**********************************************************
EX_T0:
        CLR  EA
        LCALL  R_STATUS      ;读状态寄存器(SR)
        MOV  A,#0FFH
        MOV  P1,A
        NOP
        NOP
        CLR  MT_RS           ;读接收数据寄存器
        SETB  MT_RW
        NOP
        NOP
        LCALL  R_CP           ;读 8880 接收数据寄存器
        NOP
        NOP
        ANL  A,#0FH           ;屏蔽高四位
        NOP
        NOP
        MOV  TEMP,A
        MOV  @R0,A            ;低四位为有效数据
        
        CJNE  A,#0FH,EX_T01   ;去除蜂鸣器干扰值
        JMP  T0_END
EX_T01:        
        ACALL  CONV1
        INC  LCD_X
        INC  R0
        MOV  A,LCD_X
        CJNE  A,#10H,T0_END
        CALL  SET_LCD2        ;第二行显示信息
        MOV  R0,#30H
        MOV  @R0,TEMP
        MOV  LCD_X,#04H
        ACALL  CONV1
        INC  LCD_X
        INC  R0
T0_END:
        SETB  EA
        RETI
;========================================================
;振铃信号中断子程序
;========================================================
EX_T1:
        CLR  EX1
        INC  COUNT
        MOV  A,COUNT
        CJNE  A,#03H,EX_END
        SETB  20H.0          ;振铃次数标记
        CLR  COUNT
EX_END:
        SETB  EX1
        RETI
;-------------------------------------------------------
;读状态寄存器
;RS=1,RW=1,读状态寄存器。
;-------------------------------------------------------
R_STATUS:
         MOV  A,#0FFH
         MOV  P1,A
         SETB  MT_RS       ;读状态寄存器
         SETB  MT_RW
         SETB  MT_CK
         NOP
         NOP
         LCALL  R_CP
         RET
;-------------------------------------------------------
;写MT8880的Φ2脉冲子程序
;-------------------------------------------------------
W_CP:
         SETB  MT_CK
         NOP
         NOP
         NOP
         NOP
         CLR   MT_CK
         RET
;-------------------------------------------------------
;读MT8880的Φ2脉冲子程序
;-------------------------------------------------------
R_CP:

         SETB  MT_CK
         NOP
         NOP
         MOV   A,P1
         NOP
         NOP

⌨️ 快捷键说明

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