搜索
bottom↓
回复: 23

m16的SPI控制ISD4004的程序---不知阿莫会不会给个酷字

[复制链接]

出0入0汤圆

发表于 2007-7-19 11:29:11 | 显示全部楼层 |阅读模式
这是我刚学AVR时用了三天时间用示波器加英文Datasheet调出来的,拿来共享一下。不知阿莫会不会给个"酷"字



ISD4004基本程序 ICC的



/********************************************************************

                ISD4004 基本程序               AVR meag16

    Pafone                         SPI 端口 1M内部晶振

                13th April 2007                It took me about 3 days



********************************************************************/

#i nclude<iom16v.h>

#i nclude<macros.h>

#define uchar unsigned char

#define DDR_SPI DDRB

#define DD_MOSI 5

#define DD_SCK 7

#define DD_SS 4

//*******************************延时100ms*****************************

void delay100ms()

{

unsigned char i,j;

for(j = 0;j<316;j++)

for(i = 0;i<316;i++);//1MHz的晶振

}

//************************初始化SPI***********************************

void SPI_MasterInit()

{

DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SS);//设置MOSI,SCK,SS 为OUTPUT,其它为INPUT

SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|BIT(SPR1)|BIT(DORD);//SPI使能,主机方式,设置SCK为fosc/128,上升沿,LSB First

}

//****************************数据传送函数**********************************

void SpiTransmit(unsigned char data)

{

SPDR = (unsigned char)data;

while(!(SPSR&(1<<SPIF)));//Wait for transmission finish

}

//****************cmdSend*********************************

void cmdSend(unsigned int Addr,unsigned char cmd)

{

PORTB = PORTB&(~(1<<DD_SS));//变低SS

NOP();//为保证那个500ns

SpiTransmit(Addr);          //传地址低位

SpiTransmit(Addr>>8);  //传地址高字节

SpiTransmit(cmd);   //传命令

PORTB = PORTB|(1<<DD_SS);//变高SS

NOP();//为保证那个500ns

}

//*************************放音函数**********************

void play(unsigned int addrs)

{

cmdSend(0x0000,0x20);//Power up

delay100ms();//上电延时

cmdSend(addrs,0xe0);//发地址值为addr的Setplay命令

cmdSend(0x0000,0xf0);//发Play命令

}

//************录音函数*******************************

void rec(unsigned int addrs)

{

cmdSend(0x0000,0x20);// 发POWER UP命令;

delay100ms();// 等待TPUD(上电延时);

cmdSend(0x0000,0x20);// 发POWER UP命令

cmdSend(addrs,0xa0);// 发地址值为00的SETREC命令;

cmdSend(0x0000,0xb0);// 发REC命令。

}

//**************停止当前操作函数*****************************

void stop(void)

{

cmdSend(0x0000,0x30);

}

///////////////////////////

void delay(uchar k)

{

unsigned char a,b;

for(a = k;a>0;a--)

for(b = 1;b;b++);

}

////////////////////////

void main()

{unsigned int j = 0;

DDRA = 0xff;

PORTB = PORTB|(1<<DD_SS);//变高SS

// PORTB &= ~BIT(DD_MOSI);//这个没用的?控制不了---在SPI下?

SPI_MasterInit();

delay(255);

rec(0);

PORTA = 0xff;//开始录音,灯亮

for(;j<100;j++)

{

  delay(255);

}

stop();

delay(255);

PORTA = 0x00;//停止录音,灯灭

play(0);

}

出0入0汤圆

发表于 2007-7-19 12:39:03 | 显示全部楼层
替需要的朋友谢谢你了

出0入0汤圆

发表于 2007-11-9 10:06:19 | 显示全部楼层
很好,这几天正好用的着。谢谢。
楼上的AVR猎手很眼熟啊,什么帖子里都有啊,不过这张非主流头像有点嫩啊,
头像被屏蔽

出0入0汤圆

发表于 2007-11-9 11:13:57 | 显示全部楼层
谢谢楼主共享。如果能上传线路图就更好了。

出0入0汤圆

发表于 2007-11-9 11:22:24 | 显示全部楼层
回 【2楼】 yulutong 纯金属

哈哈,看来改天也要搞张成熟、深沉的,像阿莫那样的照片了`~~~

出0入0汤圆

发表于 2007-11-14 09:25:14 | 显示全部楼层
能否搞个电路图参考一下??

出0入0汤圆

发表于 2008-9-3 09:07:10 | 显示全部楼层
学习了 谢谢!!!

出0入0汤圆

发表于 2008-9-3 09:45:53 | 显示全部楼层
上个电路图 啊莫就给裤子

出0入0汤圆

发表于 2009-2-27 10:51:20 | 显示全部楼层
我想问一下,具体怎么分段录音和分段播放?
上面的代码我验证过了,但是不清楚怎么分段处理,请指教,谢谢!

出0入0汤圆

发表于 2009-6-7 11:05:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-20 23:00:34 | 显示全部楼层
帅呆了

出0入0汤圆

发表于 2009-7-20 23:07:46 | 显示全部楼层
void delay100ms()
{
unsigned char i,j;
for(j = 0;j<316;j++)
for(i = 0;i<316;i++);//1MHz的晶振
}

j和i都小于316?永远都跳不出去呀

出0入0汤圆

发表于 2009-7-22 01:07:08 | 显示全部楼层
研究下~~

出0入0汤圆

发表于 2009-8-24 09:31:55 | 显示全部楼层
mark!

出0入0汤圆

发表于 2009-10-12 17:10:26 | 显示全部楼层
MARK

出10入10汤圆

发表于 2009-10-12 20:41:39 | 显示全部楼层
没有电路图啊?

出0入0汤圆

发表于 2010-5-9 13:34:43 | 显示全部楼层
uchar 类型似乎只是0~~255吧~~~

出0入0汤圆

发表于 2010-5-9 17:32:43 | 显示全部楼层

出0入0汤圆

发表于 2010-5-22 06:00:44 | 显示全部楼层
程序有问题!

出0入0汤圆

发表于 2010-7-24 10:56:55 | 显示全部楼层
谢谢啦!正在做

出0入0汤圆

发表于 2010-11-20 16:44:26 | 显示全部楼层
m16的SPI控制ISD4004的程序

出0入0汤圆

发表于 2010-11-20 21:57:54 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-7-15 17:26:59 | 显示全部楼层
没楼主厉害,我一个星期做的


(原文件名:ISD4004-8.JPG)

点击此处下载 ourdev_658167M2M6G8.rar(文件大小:5.36M) (原文件名:ISD4004-8语音录放模块.rar)

一个 51的程序 一个Mega16的 不过不是用SPI!

出0入4汤圆

发表于 2011-8-9 19:02:13 | 显示全部楼层
非常感谢啊,哈哈哈,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 10:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表