HT9200A驱动程序(MCU采用12MHZ主频)代码

  • 名称:HT9200A驱动程序(MCU采用12MHZ主频)代码
  • 类型:单片机学习
  • 授权方式:免费版
  • 更新时间:09-10 22:57:14
  • 下载要求:无需注册
  • 下载次数:6910
  • 语言简体中文
  • 大小:561 KB
  • 推荐度:4 星级
《HT9200A驱动程序(MCU采用12MHZ主频)代码》简介

标签:单片机开发,单片机原理,
HT9200A驱动程序(MCU采用12MHZ主频)代码
向HT9200发送一串BCD码的数据(以FF结束)
;入口:        R0->要传送的数据的存放首地址
;出口:        R0->刚才传送的数据的存放首地址
;说明:        该程序会自动将BCD码或数字ASCII码转换为相应的串行拨号码后再进行发送(注:*用0EH表示,#用0FH表示)
;        这样的话,存放电话号码时就不必人为转换了,只需直接输入16进制的电话号码就可以了
;        如:        TEL1:        DB        01H,03H,05H,07H,08H,01H,02H,01H,09H,02H,04H,0FFH        (13578121924)
;                TEL2:        DB        '13578121924',0FFH                                        (13578121924)
;                TEL3:        DB        06H,06H,04H,00H,01H,08H,01H,0FFH                        (6640181)

高速下载


;                TEL4:        DB        01H,01H,00H,0FFH                                        (110)
;------------------------------
HT9200BYTES:
        PUSH        00H
        PUSH        07H
        PUSH        ACC
        PUSH        DPH
        PUSH        DPL
        SETB        HT9200_CE
        SETB        HT9200_DATA        ;D4位使终为0
        SETB        HT9200_CLK        ;将时钟线拉为高电平,为下降沿做准备 无需注册
        CLR        HT9200_CE        ;选中HT9200,使其开始进入工作状态
        MOV        R7,#0AH                ;0AH=10,延时10MS,等待HT9200启振完毕
        LCALL        DELAY1                ;
HT9200BYTES1:
        MOV        A,@R0                ;取出一个要发送的数据
        CJNE        A,#0FFH,HT9200BYTES2        ;是结束码FF吗,不是则转
        SETB        HT9200_CE        ;要发的数据已发完,取消对HT9200的控制
        POP        DPL
        POP        DPH
        POP        ACC PCB下载站
        POP        07H                ;
        POP        00H
        RET
HT9200BYTES2:
        ANL        A,#0FH                ;去除无用的高4位(见0出0,全1则1)
        MOV        DPTR,#DTMFTAB        ;串行拔号码的存放首地址
        MOVC        A,@A+DPTR        ;取出对应的串行拨号码
        LCALL        HT9200BYTE        ;向HT9200发送一个DTMF码的数据
        INC        R0                ;指向下一个要发送的数据
        AJMP        HT9200BYTES1 字串9
;对应十六进制数:0   1   2   3   4   5   6   7   8   9   A   B   C   D  E   F     
;对应DTMF编码:         0   1   2   3   4   5   6   7   8   9   A   B   C   D  *   #     
DTMFTABB        0AH,01H,02H,03H,04H,05H,06H,07H,08H,09H,0DH,0EH,0FH,00H,0BH,0CH   
;====================================================
;
;====================================================
;向HT9200发送一个DTMF码的数据(共5位,D4、D3、D2、D1、D0,先发送D0位,最后发送D4位,其中D4位均为0)
;入口:        A->要传送的数据 专业软件下载
;出口:        A->刚才传送的数据
;------------------------------
;说明:如果要直接调用该子程序的话,需在调用前启动HT9200A,即加上如下的代码段:
;        CLR        HT9200_CE        ;选中HT9200,使其开始进入工作状态
;        MOV        R7,#0AH                ;0AH=10,延时10MS,等待HT9200启振完毕
;        LCALL        DELAY1                ;
;------------------------------
HT9200BYTE:
        PUSH        07H
        PUSH        PSW
        PUSH        ACC
        SETB        HT9200_DATA
        SETB        HT9200_CLK

高速下载


        ANL        A,#0FH                ;去除无用的高4位(见0出0,全1则1),有效数中,D4位使终为0
        MOV        R7,#05H                ;发送5位
HT9200BY1:
        RRC        A                ;取出一个位在C中(先发送最低有效位)
        SETB        HT9200_CLK        ;将时钟线拉为高电平,为下降沿做准备
        LCALL        DL10US                ;延时10微秒
        MOV        HT9200_DATA,C        ;将要发的位放在数据线上       
        LCALL        DL10US                ;延时10微秒 字串7
        CLR        HT9200_CLK        ;形成下降沿
        LCALL        DL10US                ;延时10微秒
        DJNZ        R7,HT9200BY1        ;是否发完5位
        SETB        HT9200_DATA        ;放开总线后HT9200A才开始发送DTMF编码
        SETB        HT9200_CLK
;此时,HT9200A开始向外发送对应的DTMF编码
        MOV        R7,#3CH                ;延时60MS,以维持DTMF编码的发送
        LCALL        DELAY1                ;即,每个数字的DTMF编码的发送必须>50MS
;到此,刚才的DTMF编码已成功的向外发送出去,可以停止HT9200A向外发送刚才的DTMF编码了 字串8
        MOV        R7,#05H                ;DTMF停止发送指令为5位,且全是1
HT9200BY2:
        SETB        HT9200_CLK        ;将时钟线拉为高电平,为下降沿做准备
        LCALL        DL10US                ;延时10微秒
        SETB        HT9200_DATA        ;将要发的位放在数据线上,5位全是1       
        LCALL        DL10US                ;延时10微秒
        CLR        HT9200_CLK        ;形成下降沿
        LCALL        DL10US                ;延时10微秒
        DJNZ        R7,HT9200BY2        ;是否发完5位 无插件,无病毒
;到此,HT9200A已经停止了刚才的DTMF编码的发送
        SETB        HT9200_DATA        ;放开数据线
        SETB        HT9200_CLK        ;放开时钟线
        MOV        R7,#32H                ;延时50MS,为下个数字的发送留出间隔时间
        LCALL        DELAY1                ;即,每两个数字的DTMF编码的间隔时间必须>50MS
        POP        ACC
        POP        PSW
        POP        07H
        RET
;====================================================
;====================================================
;控制HT9200A发送一个单音频信号 高速下载
;入口:        A->要发出的一个单音频信号的代码,代码表如下
;        10H        ->        697HZ
;        11H        ->        770HZ       
;        12H        ->        852HZ       
;        13H        ->        941HZ       
;        14H        ->        1209HZ
;        15H        ->        1336HZ       
;        16H        ->        1477HZ       
;        17H        ->        1633HZ        专业软件下载
;出口:        无
HT9200DY:
        PUSH        07H
        PUSH        PSW
        PUSH        ACC
        SETB        HT9200_DATA
        SETB        HT9200_CLK
        CLR        HT9200_CE        ;选中HT9200,使其开始进入工作状态
        MOV        R7,#0AH                ;0AH=10,延时10MS,等待HT9200启振完毕
        LCALL        DELAY1                ;
        ORL        A,#10H                ;必须保证D4位为1
        MOV        R7,#05H                ;发送5位 字串6
HT9200DY1:
        RRC        A                ;取出一个位在C中(先发送最低有效位)
        SETB        HT9200_CLK        ;将时钟线拉为高电平,为下降沿做准备
        LCALL        DL10US                ;延时10微秒
        MOV        HT9200_DATA,C        ;将要发的位放在数据线上       
        LCALL        DL10US                ;延时10微秒
        CLR        HT9200_CLK        ;形成下降沿
        LCALL        DL10US                ;延时10微秒
        DJNZ        R7,HT9200DY1        ;是否发完5位 高速下载
        SETB        HT9200_DATA
        SETB        HT9200_CLK
;此时,HT9200A开始向外发送对应的单音频信号
        MOV        R7,#0C8H        ;延时200MS,以维持DTMF编码的发送
        LCALL        DELAY1                ;
;到此,刚才的DTMF编码已成功的向外发送出去,可以停止HT9200A向外发送刚才的DTMF编码了
        MOV        R7,#05H                ;DTMF停止发送指令为5位,且全是1
HT9200DY2:
        SETB        HT9200_CLK        ;将时钟线拉为高电平,为下降沿做准备
        LCALL        DL10US                ;延时10微秒
        SETB        HT9200_DATA        ;将要发的位放在数据线上,5位全是1        字串9
        LCALL        DL10US                ;延时10微秒
        CLR        HT9200_CLK        ;形成下降沿
        LCALL        DL10US                ;延时10微秒
        DJNZ        R7,HT9200DY2        ;是否发完5位
;到此,HT9200A已经停止了DTMF编码的发送
        SETB        HT9200_DATA        ;放开数据线
        SETB        HT9200_CLK        ;放开时钟线
        POP        ACC
        POP        PSW
        POP        07H
        RET 无需注册
;====================================================
;
;====================================================
;延时10微秒@12MHZ
;入口:无
;出口:无
;------------------------------
DL10US:        PUSH        03H
        MOV        R3,#05H                ;5*2=10US
DL10US0JNZ        R3,DL10US0
        POP        03H
        RET
;====================================================
;
;====================================================
;延时@R7个1MS @12MHZ
;入口:无
;出口:无
;------------------------------
DELAY1: PUSH    00H
        CJNE    R7,#00H,DL11 字串9
        SJMP    DL13
DL11:        MOV     R0,#64H
DL12:        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        DJNZ    R0,DL12   ;1.0 US X 10 X 100
        DJNZ    R7,DL11
DL13:        POP     00H
        RET
;====================================================, 大小:561 KB
Tag:单片机学习单片机开发,单片机原理单片机学习

《HT9200A驱动程序(MCU采用12MHZ主频)代码》相关下载