智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3338|回复: 5
打印 上一主题 下一主题

求助:怎么用51单片机的定时器产生1kHZ的PWM波?

[复制链接]

9

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
327
QQ
威望
257
贡献
64
兑换币
0
注册时间
2010-10-15
在线时间
3 小时
跳转到指定楼层
1#
发表于 2011-10-18 02:20:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
怎么用51单片机的定时器产生1kHZ的PWM波?

7

主题

125

帖子

0

精华

等待验证会员

积分
417

活跃会员奖章优秀会员奖章论坛元老奖章

威望
23
贡献
18
兑换币
18
注册时间
2011-9-30
在线时间
188 小时
2#
发表于 2011-10-18 08:52:59 | 只看该作者
定时0.5MS 一旦时间到 反转高低电平 就有占空比50%的1KHZ了
回复 支持 反对

使用道具 举报

137

主题

2197

帖子

1

精华

知名人物

广州穗佳电子科技有限公司飞思卡尔专业店

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
23283

特殊贡献奖章资源大师奖章优秀版主奖章热心会员奖章论坛元老奖章活跃会员奖章优秀会员奖章在线王奖章论坛骨干奖章

QQ
威望
6807
贡献
12964
兑换币
9459
注册时间
2011-6-24
在线时间
1756 小时
3#
发表于 2011-10-18 11:11:08 | 只看该作者
楼上正解...
a++;
switch(a)
{
     case 1: P0^0=1;
                  break;
     case2:  P0^0=0;
                  a=0;
                  break;
}
放进定时中断就行了...P0口就能输出这个波形了
回复 支持 反对

使用道具 举报

9

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
327
QQ
威望
257
贡献
64
兑换币
0
注册时间
2010-10-15
在线时间
3 小时
4#
 楼主| 发表于 2011-10-18 12:36:49 | 只看该作者
谢谢!不过关键问题是如何赋初值定时0.5ms
回复 支持 反对

使用道具 举报

68

主题

807

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
12168

优秀会员奖章活跃会员奖章在线王奖章论坛骨干奖章论坛元老奖章

QQ
威望
7954
贡献
2434
兑换币
496
注册时间
2011-10-4
在线时间
890 小时
5#
发表于 2011-10-23 10:32:34 | 只看该作者
51来说定时0.5ms,12M的晶振初始值是(65536-500)
回复 支持 反对

使用道具 举报

203

主题

1964

帖子

2

精华

超级版主

平凡的小人物

Rank: 10Rank: 10Rank: 10

积分
211964

特殊贡献奖章论坛骨干奖章推广达人奖章热心会员奖章优秀版主奖章论坛元老奖章优秀会员奖章资源大师奖章活跃会员奖章在线王奖章

QQ
威望
115527
贡献
90111
兑换币
4298
注册时间
2010-9-29
在线时间
3163 小时
6#
发表于 2011-10-23 11:09:33 | 只看该作者
本帖最后由 翔宇 于 2011-10-23 13:51 编辑

回复 1# duxingshiweione

试一下这个程序吧,没错的话就是你所需要的
#include<reg52.h>
sbit out_pwm=P0^1;
char temp;
void main()
{
TMOD=0X01;                       // 设置定时器0为工作方式(M1M0为01)
TH0=(65536-500)/256;         //自动赋初值 最高位 定时0.5ms
TL0=(65536-500)%256;        //              最低位
EA=1;                                //开总中断
ET0=1;                              //开定时器0中断
TR0=1;                              //启动定时器0 out_pwm=0;
out_pwm=0;                       //先给低电平,(高低电平的初值会影响中断中的PWM值的设置)
while(1);
}
void int_0(void) interrupt 1
{
TH0=(65535-500)/256;//重新装入初值
TL0=(65355-500)%256;
out_pwm=!out_pwm;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-6-24 21:21 , Processed in 0.066521 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表