找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10144|回复: 11
打印 上一主题 下一主题
收起左侧

STC15F2K60S2单片机PWM模块做呼吸灯,求助

  [复制链接]
跳转到指定楼层
楼主
ID:63752 发表于 2014-8-22 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机是STC15F2K60S2,用里面的PWM模块做一个呼吸灯,定时器0中断做占空比增加或减少,定时器0,500MS中断,占空比加1,下面是我的程序,但是不工作,求指导,谢谢~~
#include"reg51.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
sfr AUXR=0x8e;
sfr P_SW1=0xA2;
sfr CCON=0xD8;
sfr CMOD=0xD9;
sfr CL=0xE9;
sfr CH=0xF9;
sfr CCAPM0=0xDA;
sfr CCAP0L=0xEA;
sfr CCAP0H=0xFA;
sfr PCA_PWM0=0xF2;
sbit CR=CCON^6;
sbit LED=P3^3;
sbit key=P2^6;
sbit PWM=P1^1;
unsigned int counter;
unsigned char flag;
unsigned char PWMduty=0;
unsigned char code DutyDC[] = {
5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,
145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255
};//占空比数值//
void Delay(uint x)
{
    uint a,b;
    for(a=x;a>0;a--)
       for(b=110;b>0;b--);
}   
void main()
{   
   
   AUXR&=0x7f;    //定时器0为12T模式//
   TMOD=0x00;   //设置定时器0为模式0//
   TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;   //定时值初值//
   EA=1;  //开总中断//
    ET0=1; //开启内部定时器中断0//
   TR0=1;  //打开定时器0//
   P_SW1=0x00;
   CCON=0;
   CL=0;
   CH=0;
   CMOD=0x00;//系统时钟,SYS/12,禁止中断//
   PCA_PWM0=0x00;
   PWMduty=0;
   //CCAP0H=DutyDC[PWMduty];
   //CCAP0L=CCAP0H;//可变占空比//
   CCAPM0=0x42;
   CR=1;//运行PWM//
while(1);
   
}

void KEYtime2() interrupt 1
{
   
TF0=0;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;   //定时值初值
counter++;
if(counter>=10)//500ms//
  {
   counter=0;
      
     CCAP0H=DutyDC[PWMduty++];
  CCAP0H=CCAP0L;
   
   
  }
   
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:63752 发表于 2014-8-25 22:48 来自手机 | 只看该作者
无人帮忙吗?
回复

使用道具 举报

板凳
ID:67377 发表于 2014-10-14 16:56 | 只看该作者
IO输出配置了不

评分

参与人数 1威望 +50 黑币 +50 收起 理由
admin + 50 + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:44262 发表于 2014-10-22 12:19 来自手机 | 只看该作者
可惜这样的程序无法进行软件仿真,楼主现在搞定了吗,上面的程序存在什么问题
回复

使用道具 举报

5#
ID:63752 发表于 2014-10-22 12:46 | 只看该作者
a110 发表于 2014-10-22 12:19
可惜这样的程序无法进行软件仿真,楼主现在搞定了吗,上面的程序存在什么问题

不是很理想,现在还在研究着。
回复

使用道具 举报

6#
ID:67992 发表于 2014-11-2 16:48 | 只看该作者
CCAP0H=DutyDC[PWMduty++];
PWMduty++超出数组怎办?要加范围啊
回复

使用道具 举报

7#
ID:67992 发表于 2014-11-2 16:51 | 只看该作者
void KEYtime2() interrupt 1
{
   
    TF0=0;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;   //定时值初值
    counter++;
        if(counter==10)//500ms//
          {
             counter=0;
             
             CCAP0H=DutyDC[PWMduty++];
             CCAP0L=CCAP0H;
            
          
                if(PWMduty==50)
                  PWMduty=0;
          }
   
}
       

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:36868 发表于 2014-11-2 21:04 | 只看该作者
用示波器看一下PWM波形

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:36868 发表于 2014-11-2 21:04 | 只看该作者
采用示波器观测PWM,看是否可以改变占空比

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

10#
ID:184049 发表于 2017-4-8 18:55 | 只看该作者
请问这个程序研究出来了吗,想参考一下
回复

使用道具 举报

11#
ID:296147 发表于 2018-4-30 14:08 | 只看该作者
你这不是用的内部的pwm,芯片内部是自带两路pwm输出的,不是使用定时器0和1产生pwm.
回复

使用道具 举报

12#
ID:583839 发表于 2019-10-24 15:55 | 只看该作者
这也没有采用内部的SFR呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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