求助各位大神,关于PWM波的程序
#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);多了一个分号。