|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
只用I/O产生双音多频DTMF信号 |
作者:leiwei77 栏目:单片机 |
//---------------如何只用I/O产生双音多频DTMF信号--------- 1。直接用2个I/O输出不同的高低音频方波,再用运放做加法,滤波,勉强可以; 2。在一段时间内分别对高/低频群取样,得到不同的时间点上各个频率幅度(可以用4位或8 位),编成8个表。分别抽取高频和低频表中某一时刻的幅值,做或运算,将得到的结果从4 位I/O口(8位就更精确)输出,在I/O口上在按8421的权重来输入到运放做加法,滤波,这 个办法效果比较好,需要CPU跑的比较快。 3。上面两种办法,第一种其实是1位取样,第二种是多位的取样,关键还是要频偏要小。 /////////////////////////////////////////////////////////// 我想用你的第二种方法,用6 I/O来作,可是不知怎么计算频率的表格,好像不用定时器也可以。我附以PIC的程序,她好像没用定时器这样频率是怎么得来的??还请指教如计算频 率的表格。多谢!! ////////////////////////////////////////////////////////// 《单片机技术选编7》的259页有计算方法,它的采样频率相同吗?可采样点数??N=M/Tf。式中T及f。是已知,M怎么定呢?M代表的周期又是谁的周期呢?两个频率如何产生(不用两个 定时器)?还请各路高人发表高见或讲出你的计算方法,小弟万分着急! 再谢各位多多帮忙! (只用6 I/O产生双音多频DTMF信号方法已定,不能更改,并已选定用EMC的PIC16C57A或EMC的78P447来做) //-------------------------------------------------------- 《单片机技术选编7》可到本站去下,也可来信 leiwei77@163.com 取 pdf 档 //////////////////////////////////////////////////////////// ; Filename: DTMF.ASM ; ********************************************** ; * Author: John Day * ; * Sr. Field Applications ENGINEER * ; * MICROCHIP TECHNOLOGY * ; * Revision: 1.1 * ; * Date December 20, 1995 * ; * PART: PIC16C54 * ; * Compiled using MPASM V1.40 * ; ********************************************** ; * Include files: * ; * NONE (used by DTMF.ASM) * ; ********************************************** ; * Fuses: OSC: XT (3.579545 Mhz XTAL) * ; * WDT: OFF * ; * CP: OFF * ; **************************************************************************** ; * This program uses and external R2R ladder network to generate complete * ; * DTMF dial tones used for telphone dialing. * ; **************************************************************************** ; * Program MEMORY: * ; * 220 Words - sine wave look-up table (7 sine waves total) * ; * 25 Words - keypad sine address MATRIX look-up * ; * 37 Words - DTMF sine wave base initialization/generation * ; * 3 Words - Initialization * ; * 25 Words - TEST SAMPLE code * ; * RAM MEMORY: * ; * 8 Bytes * ; **************************************************************************** ; list p=16C54, r=dec ; #include <p16c5x.inc> ; __CONFIG _XT_OSC&_WDT_OFF&_CP_OFF sinecolumnb_sineoffset equ 00 WAVEABASE EQU 10h ; Base address of sine A waveform POINTERA EQU 11h ; Pointer to current position in sine A WAVEBBASE EQU 12h ; Base address of sine B waveform POINTERB EQU 13h ; Pointer to current position in sine B NEXTVALUE EQU 14h ; Sum register to store Sine A + Sine B SINECOUNT EQU 15h ; LSB counter for time to OUTPUT DTMF SINECOUNTH EQU 16h ; MSB counter for time to OUTPUT DTMF TEMP EQU 17h ; Temporary storage ENDSINE EQU 127 ; VALUE to show the end of a sine table ; **************************************************************************** ; * sinelookup * ; * This is the look-up table for the (4 X 3) keypad MATRIX sine wave table. * ; * There are (7) sine waves stored here and adding any two from the * ; * MATRIX will PRODUCT a DTMF signal for the appropriate key * ; * CRYSTAL Frequency: 3.579545 Mhz & |
2楼: | >>参与讨论 |
作者: sch_l 于 2003/3/29 13:50:00 发布:
你说的这个法有点复杂,如果没有dtmf测试仪就不要 你说的这个法有点复杂,如果没有dtmf测试仪就不要作乐,HT9200不贵的,这样一个法:16个频率分别取样,利用表格组合起来16个代码,两个去养殖在发出之前相加即可. |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |