yusukepud 发表于 2012-12-3 19:11:23

关于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语句的常数值,是否在蜂鸣器中听到的是噪声频率?


谢谢马老师!

yusukepud 发表于 2012-12-4 10:43:41

查找资料之后发现,开发板上的蜂鸣器应该属于无源的电磁式蜂鸣器
占空比控制的是发声响度
也即以上代码的作用应是控制同一频率的声音从低到高的变化
蜂鸣器发出的哒哒哒声应是高频噪声

可是除了哒哒哒的噪声外,为何听不到其他声音呢?

machao 发表于 2012-12-4 21:31:36

把   if( i == 0x00ff ) 里的0x00ff 改成0xffff试试,如果有不同,自己想一下为什么。
页: [1]
查看完整版本: 关于12C5160S2的PWM波形发生器的问题