关于12C5160S2的PWM波形发生器的问题
马老师,您好,我在使用升级版51单片机做wave播放器实验的时候出了一个问题源代码如下
#include <reg51.h>
#define FOSC 12000000L
sfr CCON = 0xd8;
sbit CCF0 = CCON^0;
sbit CCF1 = CCON^1;
sbit CR = CCON^6;
sbit CF = CCON^7;
sfr CMOD = 0xd9;
sfr CL = 0xe9;
sfr CH = 0xf9;
sfr CCAPM0 = 0xda;
sfr CCAP0L = 0xea;
sfr CCAP0H = 0xfa;
sfr CCAPM1 = 0xd8;
sfr CCAP1L = 0xeb;
sfr CCAP1H = 0xfb;
sfr PCAPWM0 = 0xf2;
sfr PCAPWM1 = 0xf3;
void main()
{
int i = 0;
CCON = 0;
CL = 0;
CH = 0;
CMOD = 0x02;
CCAP0H = CCAP0L = 0x80;
CCAPM0 = 0x42;
CR = 1;
EA = 1;
while(1)
{
i++;
if( i == 0x00ff )
{
CCAP0H++;
i = 0;
}
}
}
while中代码的原意是想每隔一段时间修改PWM自动重装的初值寄存器
根据datasheet的理解,这样的结果应该在蜂鸣器上应该得到一个频率从低到高变化,再从低到高变化的一个声音
现在得到的结果是,如果修改if语句里面的常数值,则蜂鸣器声音的高低和该常数值有关
也即,0xXXXX数值较大的话,蜂鸣器得到声音频率较低,0xXXXX数值较小的话,蜂鸣器得到声音频率较高
对此,我有个疑问
1、PWM波形对于蜂鸣器而言,是占空比控制音高还是占空比控制声响?
2、修改if语句的常数值,是否在蜂鸣器中听到的是噪声频率?
谢谢马老师! 查找资料之后发现,开发板上的蜂鸣器应该属于无源的电磁式蜂鸣器
占空比控制的是发声响度
也即以上代码的作用应是控制同一频率的声音从低到高的变化
蜂鸣器发出的哒哒哒声应是高频噪声
可是除了哒哒哒的噪声外,为何听不到其他声音呢? 把 if( i == 0x00ff ) 里的0x00ff 改成0xffff试试,如果有不同,自己想一下为什么。
页:
[1]