怎么用延时实现输出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仿真的,是哪里出问题了,为什么没波形输出呢?请各位大侠看看应该怎么改呢?小妹是个菜鸟,求高手指点迷津。
...全文
1144 6 打赏 收藏 转发到动态 举报
写回复
用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开始计数至你设置的计数值
PWM调光,脉宽与光的亮度成正比 /*----------------------------------------------- 名称:PWM 调光 日期:2009.5 修改:无 内容:1、学习目的:利用定时器产生PWM,了解原理和使用方法 2、硬件要求:LED灯 定时器 3、试验现象:LED灯由亮到灭,由灭到亮逐步变化,也就是调光现象 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit LED = P1^2; sbit LED2 = P1^1; //定义LED灯,通过LED显示调光效果 unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms unsigned char PWM_ON, PWM_ON2;//定义高电平时间 /******************************************************************/ /* 延时函数 */ /******************************************************************/ void delay(unsigned int cnt) { while(--cnt); } void Init0() {TMOD |=0x01; //定时器设置 0.1ms in 12M crystal 16位工作模式 TH0=(65536-100)/256; TL0=(65536-100)%256; IE= 0x82; //打开中断 TR0=1;} void Init1() {TMOD |=0x10; //定时器设置 0.1ms in 12M crystal 16位工作模式 TH1=(65536-100)/256; TL1=(65536-100)%256; IE= 0x82; ET1=1; } /******************************************************************/ /* 主函数 */ /******************************************************************/ main() { bit Flag; Init0(); Init1(); if((TH0=(65536-6)/256 )&&(TL0=(65536-6)%256))//与定时器1初值相差100,则相位改变1/10T,相差500,相位改变1/2T TR1=1;//打开中断 CYCLE =10; // 时间可以调整 这个是10调整 8位PWM就是256步 pwm周期=CYCLE*定时时间 while(!Flag) { delay(20000); //延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效果 PWM_ON=6; PWM_ON2=6; //这个使用较长延时,以便能看清楚变化过程 控制占空比q=(CYCLE-PWM_ON-1)/CYCLE if(PWM_ON ==PWM_ON2== CYCLE) { //这个里可以添加其他程序 如到最亮时候控制设备 Flag=1; } } while(Flag) //亮度递减 同上,是个相反的过程 { delay(20000); PWM_ON--; PWM_ON2--; if(PWM_ON == 0||PWM_ON2==0) { Flag=0; } } } /******************************************************************/ /* 定时器中断函数
目 录 前言………………………………………………………………………………5 第一章 系统硬件电路的设计…………………………………………………6 第一节 系统总体设计框图及单片机系统的设计……………………………6 1.1.1 系统总体设计框图……………………………………………………6 1.1.2 8051单片机简介…………………………………………………… 6 1.1.3 单片机系统中所用其他芯片简介 …………………………………8 1.1.4 8051单片机扩展电路及分析………………………………………10 第二节 PWM信号发生电路设计………………………………………………13 1.2.1 PWM的基本原理……………………………………………………13 1.2.2 PWM信号发生电路设计……………………………………………14 1.2.3 PWM发生电路主要芯片的工作原理………………………………15 第三节 功率放大驱动电路设计………………………………………………17 1.3.1 芯片IR2110性能及特点……………………………………………17 1.3.2 芯片IR2110引脚图及功能…………………………………………18 第四节 主电路设计…………………………………………………………20 1.4.1 延时保护电路………………………………………………………20 1.4.2 主电路………………………………………………………………20 1.4.3 输出电压形………………………………………………………22 第五节 测速发电机…………………………………………………………22 第六节 滤电路……………………………………………………………23 第七节 A/D转换……………………………………………………………23 1.7.1 芯片ADC0809介绍…………………………………………………23 1.7.2 ADC0809的引脚及其功能…………………………………………23 第二章 系统软件程序的设计………………………………………………24 第一节 PI转速调节器原理图及参数计算…………………………………24 第二节 系统中部分程序的设计……………………………………………25 2.2.1单片机资源分配……………………………………………………25 2.2.2程序流程图…………………………………………………………29 结论…………………………………………………………………………30 结束语………………………………………………………………………30 参考文献……………………………………………………………………30

27,383

社区成员

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

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