怎么用延时实现输出pwm波

sammy2010baby 2011-09-09 03:20:18
我想用延时方法实现输出pwm波,在一个IO口分别输出的占空比为80%,50%,20%的波形。有3个按键,按下按键1输出80%的方波,按下按键2输出50%的方波,按下按键3输出20%的方波,用的芯片为at89c51,程序如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit anjian=P1^1;
sbit anjian1=P1^2;
sbit anjian2=P1^3;
sbit zhankongbi=P0^0;
void delay();
void delay(int z)
{
uint x,y;
for(x=z;x>0;x++)
for(y=110;y>0;y--);
}

void main()
{


while(1)
{

if(anjian==0)


{ while(anjian==0)

{
zhankongbi=1;
delay(100);
zhankongbi=0;
delay(400);
}

}

else if(anjian1==0)

{
while(anjian1==0)
{
zhankongbi=1;
delay(250);
zhankongbi=0;
delay(250);

}
}
else if(anjian2==0)

{
while(anjian2==0)
{
zhankongbi=1;
delay(400);
zhankongbi=0;
delay(100);

}
}
}
}
现在出现的问题是,没有波形输出,我使用protues仿真的,是哪里出问题了,为什么没波形输出呢?请各位大侠看看应该怎么改呢?小妹是个菜鸟,求高手指点迷津。
...全文
1237 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿能(Allen) 2011-09-11
  • 打赏
  • 举报
回复
用定时期做
sammy2010baby 2011-09-10
  • 打赏
  • 举报
回复
貌似还是不行呢,大家过来帮帮忙吧
woshi_ziyu 2011-09-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 sammy2010baby 的回复:]
我想用延时方法实现输出pwm波,在一个IO口分别输出的占空比为80%,50%,20%的波形。有3个按键,按下按键1输出80%的方波,按下按键2输出50%的方波,按下按键3输出20%的方波,用的芯片为at89c51,程序如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit anjian……
[/Quote]
使用KEIL没有问题

延时
uint x,y;
for(x=z;x>0;x++)
for(y=110;y>0;y--);

当x++溢出时,大概=0x0001 0000的时候才退出循环

按键时一直按下的。。。
qq297021227 2011-09-10
  • 打赏
  • 举报
回复
void delay();应该不用声明吧,可以删掉
  • 打赏
  • 举报
回复
void delay(int z)
{
uint x,y;
for(x=z;x>0;x++)
for(y=110;y>0;y--);
}

这里边应该是x--吧!姐你看看吧
lixianghua0428 2011-09-09
  • 打赏
  • 举报
回复
你试试将按键一直拉低为低电平,看看是否有波形输出?用软件模拟PWM波的话,建议LZ用定时器,AT89C51有两个定时器1,2。定时器1做周期,定时器2做占空比,定时器2每到一次定时中断就将IO取反或置低,只是要注意定时器计数是从你要装入的数计数到最大值溢出然后才处罚中断的,而不是从0开始计数至你设置的计数值

27,509

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧