微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机,想要输出PWM。但是好像没有什么用,大神们看看有什么问题

51单片机,想要输出PWM。但是好像没有什么用,大神们看看有什么问题

时间:10-02 整理:3721RD 点击:
#include<reg51.h>
sbit a=P1^0;
sbit b=P1^1;
unsigned char speed0;
void zz();
void speed();
void model1(unsigned char a);
void main()                                                                     
{
TMOD|=0x10;
TH0=0xfe;
TL0=0x0c;
EA=1;
ET0=1;//′ò?a?¨ê±?÷0
TR0=1;
        zz();
}
void zz()               
     {
                        model1(a);
                        b=0;                                                                                                                0;
                       
                        }
void model1(unsigned char a)
{
        while(1)
        {
                if(speed0>=100)  //PWM?ü?ú?a100*0.5ms
                {
                        speed0=0;
                }
        else        if(speed0< 50)        //??±?30?a???μ?éò???±??±á÷μ??úμ??ù?è
                {
                        a=1;
//                b=1;
                }
                else
                {
                        a=0;
//          b=0;
                }
        }
       
}
void speed(void) interrupt 1
{
    TH0 = 0xfe;  
        TL0 = 0x0c;
        speed0++;
}

如果是占空比50%的,定时器取反就可以了

不懂 期待小编搞好后能分享一下经验

可以直接用延时写pwm,但是不准确

你用的什么芯片?如果你这么输出占空比的话很费资源的,现在好多的都带这个功能的,

51

那个while(1)不应该写在那里,会进入死循环,出不来

哎 我也练习过一些非常基本的程序 但是感觉程序模式死板 稍微错一点就不行  

#include<reg51.h>
#define uint unsigned int
sbit a=P1^0;
sbit b=P1^1;
unsigned char speed0;
void zz();
void speed();
void model1(uint a);
void main()                                                                     
{
TMOD|=0x01;
TH0=0xfe;
TL0=0x0c;
EA=1;
ET0=1;//′ò?a?¨ê±?÷0
TR0=1;
        b=1;
        while(1)
        {
                        model1(80);
        }
}
void model1(uint )
{
                if(speed0>=100)  //PWM?ü?ú?a100*0.5ms
                {
                        speed0=0;
                }
                else       
                        if(speed0< a)        //??±?30?a???μ?éò???±??±á÷μ??úμ??ù?è
                        {
                                P1&=0xfe;
//                b=1;
                        }
                        else
                        {
                                P1|=0x01;
//          b=0;
                        }       
       
}
void speed(void) interrupt 1
{
    TH0 = 0xfe;  
        TL0 = 0x0c;
        speed0++;
}

这是改好的程序,可以正常使用了

是这样的==想了好久

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

网站地图

Top