打印
[其它应用]

软件中打开振荡器2才能输出PWM波形

[复制链接]
466|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhanglli|  楼主 | 2016-1-17 18:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
测试的时候采用了,此程序
但是发现只有在选择12M内部RC为振荡器1时,关闭振荡器2,或者是选择128K内部RC
为震荡器1.12MRC为振荡器2.且要在软件中打开振荡器2才能输出PWM波形,请问这是为什么?
沙发
lium| | 2016-1-17 18:27 | 只看该作者
内部128K振荡器?

使用特权

评论回复
板凳
zhanglli|  楼主 | 2016-1-17 18:27 | 只看该作者
出于低功耗考虑

使用特权

评论回复
地板
guoyt| | 2016-1-17 18:27 | 只看该作者
程序看看

使用特权

评论回复
5
zhanglli|  楼主 | 2016-1-17 18:28 | 只看该作者
/******************************************************
                MCU:                SH79F166A
                CRYSTEL:        4MHz
                FUNCTION:        PWM0
******************************************************/
#include<SH79F166A.h>

#define uchar unsigned char
#define uint unsigned int

/******************************************************
                延时程序
******************************************************/
void Delay(uint ms)                           
{                                                                                                                                                                                                                                                                           
    uint a,b,c;
    for(c=ms;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}

/******************************************************
                PWM0 Init
******************************************************/
void PWM0_30Duty()
{
        PWMLO        =        0X55;                //保护寄存器,允许配置
        
        PWM0C        =        0X01;                // PWM CLK=SYS CLK/4
        PWM0PL        =        0XE8;
        PWM0PH        =        0X03;                //约 1KHz
        PWM0DL        =        0X2C;
        PWM0DH        =        0X01;                //占空比 30%
        PWMEN        =        0X01;                //0000 0001 ,PWM0 OPEN

        PWMLO        =~        0X55;                //保护寄存器,不允许配置
}
//--------------------------------
void PWM0_40Duty()
{
        PWMLO        =        0X55;                //保护寄存器,允许配置
        
        PWM0C        =        0X01;                // PWM CLK=SYS CLK/4
        PWM0PL        =        0XE8;
        PWM0PH        =        0X03;                //约 1KHz
        PWM0DL        =        0X90;
        PWM0DH        =        0X01;                //占空比 40%
        PWMEN        =        0X01;                //0000 0001 ,PWM0 OPEN

        PWMLO        =~        0X55;                //保护寄存器,不允许配置
}
//--------------------------------
void PWM0_50Duty()
{
        PWMLO        =        0X55;                //保护寄存器,允许配置
        
        PWM0C        =        0X01;                // PWM CLK=SYS CLK/4
        PWM0PL        =        0XE8;
        PWM0PH        =        0X03;                //约 1KHz
        PWM0DL        =        0XF4;
        PWM0DH        =        0X01;                //占空比 50%
        PWMEN        =        0X01;                //0000 0001 ,PWM0 OPEN

        PWMLO        =~        0X55;                //保护寄存器,不允许配置
}

/******************************************************
                main
******************************************************/
void main()
{
        CLKCON=0X00;
        Delay(100);
        
        while(1)
        {
                PWM0_30Duty();
                Delay(800);
                PWM0_40Duty();
                Delay(800);
                PWM0_50Duty();
                Delay(800);
        }        
}

使用特权

评论回复
6
hanwe| | 2016-1-17 18:28 | 只看该作者
碰到的问题更郁闷,PWM01居然没法输出PWM波来

PWMEN = 0xbf;                        // PWM使能
        PWMEN1 = 0x00;                        // PWM输出
        PWMLO = 0x55;                        // 全程运行允许修改占空比
        PWM0C = 0x00;                        // 低        PWM0PL = 0xff;                        // 周期4096
        PWM0PH = 0x0f;
        PWM0DL = 0xff;                        //         PWM0DH = 0x07;
        PWM0DT = 0x00;

P0                = 0xfd;
        P0CR        = 0x2f;
        P0PCR        = 0xc0;

使用特权

评论回复
7
yufe| | 2016-1-17 18:28 | 只看该作者
设置顺序错误,PWMLO应该在开始和结尾出现。看看规格书吧

使用特权

评论回复
8
hanwe| | 2016-1-17 18:28 | 只看该作者


PWMLO = 0x55;
这句话仅影响对占空比寄存器的保护,也就是写新的占空比数据,才需要去掉锁,跟我的问题没有关系,我的程序可以修改PWM0的占空比输出,但是PWM01引脚无任何输出!!!!

使用特权

评论回复
9
llia| | 2016-1-17 18:29 | 只看该作者
你们讨论的和楼主。。。

使用特权

评论回复
10
hanwe| | 2016-1-17 18:29 | 只看该作者
把这句放到最顶上,没有改变效果,PWM0照样正常输出,PWM01只受IO口驱动,可以输出0或1的固定电平

使用特权

评论回复
11
zhanglli|  楼主 | 2016-1-17 18:29 | 只看该作者
我也不知道,算了,结贴了

使用特权

评论回复
12
sourceInsight| | 2016-2-5 12:07 | 只看该作者
看看,写代码格式很规范啊,不错不错,值得学习!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1016

主题

9386

帖子

1

粉丝