本帖最后由 fover 于 2009-10-24 15:27 编辑
各位大哥大姐,小弟最近在搞语音,遇到了点问题,用的是WTV080
下面是它的时序图:
一线串口模式可以利用MCU 通过DATA 线给WTV 诧音芯片发送数据以达到控制的目的。可以实现控制诧音播放、停止、循环等。
数据以电平占空比的形式计算,高电平与低电平数据占空比1:3 即代表数据位0,高电平与低电平数据位占空比为3:1 代表数据位1,高电平在前,低电平在后。数据信号先发低位再发高位。在发送数据旪,无需先发送命令码再发送指令.
小弟我根据他的说明书提供的程序,再加上自己对芯片的理解,编了完整的程序,但出来的声音就是和以前的电报机那样“嘟嘟....嘟嘟嘟.....”一样
不知道是不是我把程序编错了
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P1^0;
sbit rst=P1^1;
sbit LED=P1^7;
/* 延时1ms */
void delayms(uint x)
{ uint i;
while(x--)
{
for(i=0;i<74;i++);
}
}
void delayus(uint x)
{
uint i;
for(i=0;i<x;i++)
{
_nop_();
}
}
unsigned char SendData(unsigned char sda)
{ uint i;
rst=0;
delayms(5);
rst=1;
delayms(7);
sda=0;
delayms(5);
for(i=0;i<8;i++)
{
sda=1;
if(sda&0x01)
{
delayus(20); //延时300us (299)
sda=0;
delayus(6);//延时100us (102)
}
else
{
delayus(6);
sda=0;
delayus(20);
}
sda>>=1;
}
sda=1;
// return(sda);
}
void main()
{
sda=1;
rst=1;
LED=1;
while(1)
{
delayms(1000);
LED=0;
SendData(0xf1);
SendData(0x00);
delayms(1000);
SendData(0x01);
}
} |