搜索
bottom↓
回复: 2

关于12C5160S2的PWM波形发生器的问题

[复制链接]

出0入0汤圆

发表于 2012-12-3 19:11:23 | 显示全部楼层 |阅读模式
马老师,您好,我在使用升级版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语句的常数值,是否在蜂鸣器中听到的是噪声频率?


谢谢马老师!

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

 楼主| 发表于 2012-12-4 10:43:41 | 显示全部楼层
查找资料之后发现,开发板上的蜂鸣器应该属于无源的电磁式蜂鸣器
占空比控制的是发声响度
也即以上代码的作用应是控制同一频率的声音从低到高的变化
蜂鸣器发出的哒哒哒声应是高频噪声

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

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-3-28 18:23

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

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