微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请问这个控制PWM占空比的程序错在哪?

请问这个控制PWM占空比的程序错在哪?

时间:10-02 整理:3721RD 点击:
我用的是定时器写的,没用中断。用两个按键控制PWM的占空比变大变小。PWM连接P2^0输出的。但是用示波器没有出现PWM波形。望有大神解惑。初学多问,无怪!
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar count ,z;
sbit key_1 = P3^7;
sbit key_2 = P3^6;
sbit PWM = P2^0;
void key_control();    //这是两个按键控制变量,变化,从而控制占空比曾加减少的函数
void init ();               //这是个定时器装初值函数
void create_PWM(uchar);   //这是用IF语句写的,生成0,1信号的函数
void delay(uint);       //这是简单的延时函数
void main ()
{
        init ();
        while(1);
        {
                key_control();
                create_PWM(count);
        }
}
void delay(uint z)
{
        uint x,y;
        for(x = z;x>0;x--)
                for(y = 110;y>0;y--);
}
void init()
{
        TMOD = 0x10;
        TH1 = (65536-4608)/256;//50sm
        TL1 = (65536-4608)%256;
        TR1 = 1;
}
void create_PWM(uchar count)
{
        static i;
        if(TF1 == 1)
        {
                TF1 = 0;
                TH1 = (65536-4608)/256;//50sm
          TL1 = (65536-4608)%256;
                i++;
                if(i == 100) i=0;
                if(i <= count)        PWM = 1;
                else PWM = 0;
        }
}
void key_control()
{
       
        if(key_1 ==0)
        {
                delay(10);
                if(key_1 == 0)
                {
                        count+= 5;
                        if(count >= 100)count = 0;
                }
        }
        if(key_2 ==0)
        {
                delay(10);
                if(key_2 ==0)
                {
                        count-= 5;
                        if(count <= 0)count =100;
                }
        }       
}

先不添加按键,给个固定值看看波是否正常,先确定是问题大概是出在哪里

没开总中断,EA=1漏写了吧

总中断没开,而且我没有记错的话,51单片机定时器设置时间到了应该是进该定时器中断的吧,单纯的依靠一个TF中断标志,不知道行不行,我没有试过

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

网站地图

Top