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

2019-07-15 12:51发布

我用的是定时器写的,没用中断。用两个按键控制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;
                }
        }       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
零tot
1楼-- · 2019-07-15 13:49
先不添加按键,给个固定值看看波是否正常,先确定是问题大概是出在哪里
wujun1204sc
2楼-- · 2019-07-15 17:09
没开总中断,EA=1漏写了吧
珍惜你我1994
3楼-- · 2019-07-15 22:21
总中断没开,而且我没有记错的话,51单片机定时器设置时间到了应该是进该定时器中断的吧,单纯的依靠一个TF中断标志,不知道行不行,我没有试过

一周热门 更多>