微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助各位大神,关于PWM波的程序

求助各位大神,关于PWM波的程序

时间:10-02 整理:3721RD 点击:
#include"STC12C5A60S2.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit dj1=P1^0;
uint tt;
uint cs;
void Timer0Init();
void Delay500ms();
void Delay500ms()                //@11.0592MHz
{
        unsigned char i, j, k;
        _nop_();
        _nop_();
        i = 22;
        j = 3;
        k = 227;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}
void main()
{
        Timer0Init();
       
        while(1);
        {
                cs=20;
                Delay500ms();                       
        }
}
void Timer0Init(void)                //50微秒@11.0592MHz
{
        AUXR |= 0x80;                //定时器时钟1T模式
        TMOD &= 0xF0;                //设置定时器模式
        TL0 = 0xD7;                //设置定时初值
        TH0 = 0xFD;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
}
void timer0() interrupt 1
{
        TH0=0XFD;
        TL0=0XD7;
        tt++;
        if(tt>=400)
        {
                tt=0;
        }
        if(tt<=cs)
        {
                dj1=1;
        }
        else
        {
                dj1=0;
        }
}
这样无法形成PWM波吗?

初步看了一下,是可以输出的,可能占空比太小,观察不到,你的P10接的是什么?

你好 我接的是舵机信号线   采用的是jx舵机  

你试一下把输出换成一个LED灯,然后主函数里CS从0到400然后400到0这样循环改变,每次隔5ms,看看LED灯是不是呼吸灯效果。
最好还是示波器看,最直观!

非常感谢 我这就是试试  
示波器很贵的吧。有软件可以模拟吗

没用示波器就试试LED灯那个把!

呜呜呜
试了
果然
亮不起来
void main()
{
        Timer0Init();
       
        while(1);
        {
                cs=20;
                Delay5ms();
                if(tt==0)
                {
                        tt=400;
                }
                                       
        }
}

你的有错,试试这样
void main()
{
        Timer0Init();
        uchar i=1;             cs=0;
        while(1);
        {
                cs=cs+i;                              if(cs>=400)
                    i=-1;
                if(cs<=0)
                    i=1;
                Delay5ms();
        }
}


补充内容 (2017-7-20 08:26):
while(1);多了;

刚才写错了 cs=cs+i才是  

while(1);多了一个分号。

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

网站地图

Top