问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

绝对高分求解!51单片机如何初始化DTMF的芯片MT8888和如何设置各种模式?

发布网友 发布时间:2022-04-23 12:35

我来回答

2个回答

热心网友 时间:2023-10-13 14:52

需要设置模式,是通过控制CRA的低4位来设置的,下面就是对它的说明:

控制寄存器和状态寄存器各个位的功能意义简述如下:
(1)控制寄存器CRA。

D0;把该位设置为“1”,则芯片被设置成DTMF模
式,允许收、发双音频信号。

D1:把该位设置为“1",则芯片被设置为信号音检测模式 (呼叫处理模式),
当D2也设为“1”时,引脚IRQ端能输出与各种信号音对应的方波。

D2:把该位设置为“1",则芯片被设置成中断模式,其具体功能见前述的
3种模式介绍。

D3:把该位设置为“1",表明允许选择控制寄存器CRB,因此应在写入控
制寄存器CRA后,接着写控制寄存器 CRB。

-----------------------------------------------------------------------------
(2)控制寄存器CRB。
D0:把该位设置为“0”时芯片工作于普通双音频模式
设置为“1"时芯片工作于突发模式,突发和暂停长度各为(51 土2)ms。

D2:把该位设置为“0”时允许产生双音频,否则只产生单音频。

D3:行/列音选择,当 D2=1(单音模式)时,D3 用于选择行音或列音(即
音频频率的选择)。

-------------------------------------------------------------------------
下面这些是我之前使用MT8880时写的,实践过,可以用的

///////////////// 初始化MT8880 /////////////////
void InitMT8880()
{
MT8880_read_state(); //从MT8880读状态寄存器
MT8880_write_com(0x00); //CRA=0000
MT8880_write_com(0x00); //CRB=0000
MT8880_write_com(0x08); //CRA=1000
MT8880_write_com(0x00); //CRB=0000
DelayMs(10);
}

///////////////// 写入初始化函数 /////////////////
void MT8880_write_init(void)
{
MT8880_write_com(0x0d); //CRA=1101
MT8880_write_com(0x00); //CRB=0000
}

//////////////// 写控制寄存器 /////////////////
void MT8880_write_com(uchar sdata)
{
MT8880_ABBA=1;
Delay10Us(1);
MT8880_CS=0;
MT8880_RSI=1;
MT8880_RW=0;
MT8880_SYNC=1;
Delay10Us(1);
MT_data=(MT_data & 0xf0)|(sdata & 0x0f);
Delay10Us(5);
MT8880_SYNC=0;
Delay10Us(5);
MT8880_RW=1;
MT8880_CS=1;
MT8880_RSI=0;
MT8880_SYNC=1;

DelayMs(5);
MT8880_ABBA=1;
Delay10Us(1);
}

//////////////// 从MT8880读状态寄存器 /////////////////
uchar MT8880_read_state()
{
uchar sdata=0x00;
MT8880_ABBA=0;
MT8880_SYNC=0;
Delay10Us(1);
MT8880_CS=0;
MT8880_RSI=1;
MT8880_RW=1;
Delay10Us(1);
MT8880_SYNC=1;
Delay10Us(1);
sdata=MT_data & 0x0f;
Delay10Us(5);
MT8880_SYNC=0;
Delay10Us(5);
MT8880_RW=0;
MT8880_CS=1;
MT8880_RSI=0;
MT8880_SYNC=1;
Delay10Us(1);
DelayMs(1);
MT8880_ABBA=1;
Delay10Us(1);
return sdata;
}

在此说明下,代码是自己写的,并经过了实践,希望给楼主一点帮助
如果需要更全面点的代码和资料,我可以发给你。

“单片机高手团”为您解答

热心网友 时间:2023-10-13 14:52

楼主 同求程序啊 ,怎么初始化和收发数据的?谢谢了QQ 1373975187@qq.com

热心网友 时间:2023-10-13 14:52

需要设置模式,是通过控制CRA的低4位来设置的,下面就是对它的说明:

控制寄存器和状态寄存器各个位的功能意义简述如下:
(1)控制寄存器CRA。

D0;把该位设置为“1”,则芯片被设置成DTMF模
式,允许收、发双音频信号。

D1:把该位设置为“1",则芯片被设置为信号音检测模式 (呼叫处理模式),
当D2也设为“1”时,引脚IRQ端能输出与各种信号音对应的方波。

D2:把该位设置为“1",则芯片被设置成中断模式,其具体功能见前述的
3种模式介绍。

D3:把该位设置为“1",表明允许选择控制寄存器CRB,因此应在写入控
制寄存器CRA后,接着写控制寄存器 CRB。

-----------------------------------------------------------------------------
(2)控制寄存器CRB。
D0:把该位设置为“0”时芯片工作于普通双音频模式
设置为“1"时芯片工作于突发模式,突发和暂停长度各为(51 土2)ms。

D2:把该位设置为“0”时允许产生双音频,否则只产生单音频。

D3:行/列音选择,当 D2=1(单音模式)时,D3 用于选择行音或列音(即
音频频率的选择)。

-------------------------------------------------------------------------
下面这些是我之前使用MT8880时写的,实践过,可以用的

///////////////// 初始化MT8880 /////////////////
void InitMT8880()
{
MT8880_read_state(); //从MT8880读状态寄存器
MT8880_write_com(0x00); //CRA=0000
MT8880_write_com(0x00); //CRB=0000
MT8880_write_com(0x08); //CRA=1000
MT8880_write_com(0x00); //CRB=0000
DelayMs(10);
}

///////////////// 写入初始化函数 /////////////////
void MT8880_write_init(void)
{
MT8880_write_com(0x0d); //CRA=1101
MT8880_write_com(0x00); //CRB=0000
}

//////////////// 写控制寄存器 /////////////////
void MT8880_write_com(uchar sdata)
{
MT8880_ABBA=1;
Delay10Us(1);
MT8880_CS=0;
MT8880_RSI=1;
MT8880_RW=0;
MT8880_SYNC=1;
Delay10Us(1);
MT_data=(MT_data & 0xf0)|(sdata & 0x0f);
Delay10Us(5);
MT8880_SYNC=0;
Delay10Us(5);
MT8880_RW=1;
MT8880_CS=1;
MT8880_RSI=0;
MT8880_SYNC=1;

DelayMs(5);
MT8880_ABBA=1;
Delay10Us(1);
}

//////////////// 从MT8880读状态寄存器 /////////////////
uchar MT8880_read_state()
{
uchar sdata=0x00;
MT8880_ABBA=0;
MT8880_SYNC=0;
Delay10Us(1);
MT8880_CS=0;
MT8880_RSI=1;
MT8880_RW=1;
Delay10Us(1);
MT8880_SYNC=1;
Delay10Us(1);
sdata=MT_data & 0x0f;
Delay10Us(5);
MT8880_SYNC=0;
Delay10Us(5);
MT8880_RW=0;
MT8880_CS=1;
MT8880_RSI=0;
MT8880_SYNC=1;
Delay10Us(1);
DelayMs(1);
MT8880_ABBA=1;
Delay10Us(1);
return sdata;
}

在此说明下,代码是自己写的,并经过了实践,希望给楼主一点帮助
如果需要更全面点的代码和资料,我可以发给你。

“单片机高手团”为您解答

热心网友 时间:2023-10-13 14:52

楼主 同求程序啊 ,怎么初始化和收发数据的?谢谢了QQ 1373975187@qq.com
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
三文鱼的保鲜秘诀有哪些? 二年级数学张明帮爸爸搬砖,每次搬4块,25块砖需要搬多少次? ...实际2小时后,有6人调走,余下的砖还需多少时间搬完? 江南饮碧螺春 一年轻级搬砖数学题半块算一块吗 碧螺春茶叶价格查询 两个人搬砖要9个小时.3个人要几个小时 求助:数学题,急急急! 碧螺春茶叶一斤多少钱? 碧螺春有很多绒毛能喝吗,碧螺春茶叶有绒毛正常吗(属于品质的体现) 微机的题目:求“8254初始化及其应用”的解答!谢谢! GPIO初始化奇怪的事 求psp10005.50-D3系统的全部设置 包皮包茎破裂,流血了,我该怎么办 三凌PLC M8002如何使用 包皮下裂口怎么办 电脑的d3键亮一下后就黑屏。 如何配置UEFI/GPT 包皮与龟头连接处破裂,怎么办 魔兽世界wow卡在正在初始化不动呀,好久了都不动怎么解决呢?? 包皮内侧破皮怎么办? 想修改bios的TPM,但是忘记surface uefi密码无法进入bios,求教怎么找回密码 PSP系统版本5.50GEN-D3 如何降级到5.05GEN-D3 l给inux中安装软件时,挂载的方式只能用于rpm格式的软件吗?其他格式怎 ... 本人初次使用HT1621B驱动4位8段LCD,请问高手用单片机怎样控制?其中的D0~D3,A0~A5各表示意思?谢谢 圣罗兰包皮包都磨破皮了该怎么修复? 之前用*连的一个wifi结果有一天就连不上了 但是系统中那个wufi还是在的 *怎么都搜 鬼泣4怎么就玩不了了..什么d3derr... 开机显SurfaceUEFI界面怎么办? 男人包皮破皮了很痛,怎么办 安装帝国时代3后出现 缺少d3-d9.dll文件 牙线是什么?有何作用? 什么是牙线? 水牙线是什么东东?怎么用呀? 牙线是什么 牙线有哪些类型 水牙线等于牙线? 什么叫牙线牙线怎么用? 什么叫牙线,那里能找到 水牙线与牙线有什么区别?哪个清洁效果好? 比牙签还牛的东西叫什么还有一根线? 牙线棒的介绍 牙签和牙线到底有什么区别,为何牙线这么贵? 牙线的组成 牙线价格及种类、优点介绍 牙线的选购技巧 牙线有哪些种类 牙签还是牙线知乎 牙线棒是一次性的还是可以多次使用 中国明星死于新冠名单有哪些? 结石姐JessieJ感染新冠,英国还有哪些艺人感染过新冠肺炎? 巨石强森录视频呼吁戴口罩?