微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助,stc12c5a60s2产生pwm用示波器没有波形输出

求助,stc12c5a60s2产生pwm用示波器没有波形输出

时间:10-02 整理:3721RD 点击:

/*********************************************************************************************
    两路PWM输出控制设置
/*********************************************************************************************/
#ifndef __SET_PWM_H__
#define __SET_PWM_H__
//***********************************************************************************/
//PWM模式设置
void Init_PWM()
{
   // set PWM mode
  CCON = 0;                  //Initial PCA control register(PCA timer stop,Clear CF flag,Clear all module interrupt flag)
  CL = 0;                    //Reset PCA base timer
  CH = 0;
  CMOD = 0x04;               //Set PCA timer clock source as timer0 overflow,Disable PCA timer overflow interrupt
  CCAP0H = CCAP0L =0x80;     //PWM0 port output X% duty cycle square wave
  CCAPM0 = 0x42;             //PCA module-0 work in 8-bit PWM mode and no PCA interrupt
  CCAP1H = CCAP1L = 0x80;     //PWM1 port output X% duty cycle square wave
  CCAPM1 = 0x42;             //PCA module-1 work in 8-bit PWM mode and no PCA interrupt
  CR = 1;                    //PCA timer start run
}
//***********************************************************************************/
//设置Timer0为8位自动重载模式,作为PWM时钟源
void Init_Timer0()
{
   
  AUXR = 0x00;               //timer0 work in 12T mode
  TMOD|= 0x02;       //set timer0 counter mode2 (8-bit auto-reload)
  TH0=TL0=130;     //PWM 50Hz
  TR0 = 1;      //timer0 start running(as PWM clk)
  }
#endif  头文件是直接用的stc12c5a60s2.h文件,就是没有波形输出,检查过很多次 寄存器配置也没发现问题,求大神帮忙看下

这个是我自己用的,你可以参考一下。你直接对CCAPXH和CCAPXL赋值,就可以直接在P12,P13,P14,P15产生PWM波了。
#include<STC12C5A60S2.H>
#include "pca.h"
void PWM_init (void)
{
        CCON=0;
        CMOD=0x02; //设置PCA定时器
        CL=0x00;
        CH=0x00;
        CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)
        CCAP0L=0x00; //设置PWM0初始值与CCAP0H相同
        CCAP0H=0x00; // PWM0初始时为0
       
        CCAPM1=0x42; //PWM1设置PCA工作方式为PWM方式(使用时删除//)
        CCAP1L=0x00; //设置PWM1初始值与CCAP0H相同
        CCAP1H=0x00; // PWM1初始时为0
       
        CR=1; //启动PCA定时器
}
void PWM0_set (unsigned char a)                //左轮
{
        CCAP0L= a; //设置值直接写入CCAP0L
        CCAP0H= a; //设置值直接写入CCAP0H
}
void PWM1_set (unsigned char a)                //右轮
{
        CCAP1L= a; //设置值直接写入CCAP1L
        CCAP1H= a; //设置值直接写入CCAP1H
}

芯片是正常供电的啊,也换过一个一样的芯片去试,但也一样,示波器没有波形

检查下单片机是否正常工作?

嗯嗯,谢啦,参考下

#include"stc12c5a60s2.h"
void main()
{
CCAPM0=0x42;//8位PWM模式
CCON=0x40;         //启动PWM计数
CMOD=0x04;//设置PWM时钟使用定时器0
TMOD=0x02;//定时器0工作方式2
TH0 =0;
TL0 =178;//定时78us * 256=20ms
TR0 =1;//启动定时器
CCAP0H=CCAP0L=230;//占空比调整至10%
}


我昨天实验的,有波形50hz。工作方式也和你的类似,据说TH0只能为0,TL0自己工作,我试了下,TH0赋值后,波形频率不对。而且我给TLO赋其他值,波形都不产生了,我现在还不知道怎么回事呢,你知道为啥不,讨论讨论。

#include"stc12c5a60s2.h"
void main()
{
CCAPM0=0x42;//8位PWM模式
CCON=0x40;         //启动PWM计数
CMOD=0x04;//设置PWM时钟使用定时器0
TMOD=0x02;//定时器0工作方式2
TH0 =178;
TL0 =178;//定时78us * 256=20ms
TR0 =1;//启动定时器
while(1)
{
CCAP0H=CCAP0L=230;//占空比调整至10%
}

}

我的问题解决了,这个频率可调,TH0,TL0都需要赋值。之前那个程序不成,可能是没加while (1),自身循环运行了,导致定时不准。

定时器的话TH0和TL0肯定都要重装初值啊。

恩恩,我发的第二个调整了,你产生的波形怎么样,我的波形显示单位为0.5mv的时候,上升沿有些抖动,是程序问题么,你的波形整齐么。

嗯嗯,还可以。要记得在主程序加while(1);

输出PWM后怎么在程序中调节占空比?例如中断中怎么赋值能改变输出PWM的占空比?

感谢啊!我也是这样写程序的,想用来驱动蜂鸣器

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top