本帖最后由 张衍波 于 2014-8-14 16:57 编辑
我今天看到了一个关于音频的程序,不过没看懂哎。。它是使用定时器T0的模式1(13位计数器),其中有几个数据我不明白?
1、C=460830/f; ,,其中的460830是什么东西?这个数据是怎么来的?这条指令的作用是什么?
2、TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法。。。这里为什么是32??怎么算的?
程序如下,,只是重要的一部分;;
EA=1; //开总中断
ET0=1; //定时器T0中断允许 TMOD=0x00; // 使用定时器T0的模式1(13位计数器) while(1) //无限循环 { i=0; //从第1个音符f[0]开始播放 while(f!=0xff) //只要没有读到结束标志就继续播放 {
C=460830/f; TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法
TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法 TR0=1; //启动定时器T0 for(j=0;j<JP;j++) //控制节拍数 delay(); //延时1个节拍单位
TR0=0; //关闭定时器T0 i++; //播放下一个音符 } } }
|