找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2683|回复: 12
收起左侧

51单片机产生一个450khz,4.5V的pwm波的程序怎样设初值

[复制链接]
ID:367963 发表于 2018-7-17 23:40 | 显示全部楼层 |阅读模式

1.  #include<reg51.h>
2.  #define uint unsigned int//定义uint为无符号整形
3.  #define uchar unsigned char//宏定义,同上
4.   
5.  sbit PWM=P2^0;//  P2.0输出pwm
6.  uchar time;  // 定义占空比的变量
7.   
8.  void main()
9.  {
10.      TMOD=0x01;//定时器0工作方式1
11.      TH0=?                           这两个初值该怎样设置
12.      TL0=?      
13.      EA=1;//开总中断
14.      ET0=1;//开定时器0中断
15.      TR0=1;//启动定时器0
16.      while(1)
17.      {      
18.      }      
19. }
20.  
21. void tim0() interrupt 1
22. {
23.      TR0=0;//赋初值时,关闭定时器
24.      TH0=0xff;//(65536-100)/256;//赋初值定时
25.      TL0=0xf7;//(65536-100)%256;//0.01ms
26.      TR0=1;//打开定时器
27.  
28.      time++;
29.      if(time>=100)  //1khz
30.        time=0;  
31.      if(time<=30)   //占空比%30,可改
32.        PWM=1;  
33.      else PWM=0;
34. }

回复

使用道具 举报

ID:367369 发表于 2018-7-18 08:36 | 显示全部楼层
中断里的th0 tl0与主函数要一致,450KHZ周期只有几微妙吧,定时器指令时间都要耗费这么多,产生那么高的频率估计有够呛
回复

使用道具 举报

ID:373947 发表于 2018-7-18 11:33 | 显示全部楼层
TH0=?                            TL0=?
回复

使用道具 举报

ID:367963 发表于 2018-7-18 12:16 | 显示全部楼层
game灬boy 发表于 2018-7-18 08:36
中断里的th0 tl0与主函数要一致,450KHZ周期只有几微妙吧,定时器指令时间都要耗费这么多,产生那么高的频 ...

那个主函数里面的忘了删了,就是想知道频率和初值设置的一个关系
回复

使用道具 举报

ID:367963 发表于 2018-7-18 12:17 | 显示全部楼层
哈瑟 发表于 2018-7-18 11:33
TH0=?                            TL0=?

等于多少呢?
回复

使用道具 举报

ID:264446 发表于 2018-7-18 13:00 | 显示全部楼层
亲51单片机应该不能满足你450khz的要求
回复

使用道具 举报

ID:370041 发表于 2018-7-18 13:43 | 显示全部楼层
要和下面的一样        51单片机  正常一个定时器中断满时是65536us,  算一下你要定时的时间    就是你要减去的数字
回复

使用道具 举报

ID:373947 发表于 2018-7-18 14:16 | 显示全部楼层
TH0=(65536-1)/256;  TL0=(65536-1)%256; 这时应该把time>=100改为time>=2(这是时钟频率为12Mhz下,频率应该是500KHZ,要得到450KHZ,你可以换个更大的晶振,计算方式和这一样),表示中断两次如果要得到4.5V的PWM波需把占空比改为90%
回复

使用道具 举报

ID:373947 发表于 2018-7-18 14:40 | 显示全部楼层
换个21.6Mhz(或10.8Mhz)的晶振,TH0=(65536-4(2))/256;TL0=(65536-4(2))/256;PWM占空比改为90%
回复

使用道具 举报

10#
无效楼层,该帖已经被删除
ID:367963 发表于 2018-7-18 15:30 | 显示全部楼层
哈瑟 发表于 2018-7-18 14:40
换个21.6Mhz(或10.8Mhz)的晶振,TH0=(65536-4(2))/256;TL0=(65536-4(2))/256;PWM占空比改为90%

哇太感谢了
回复

使用道具 举报

ID:367963 发表于 2018-7-18 15:34 | 显示全部楼层
哈瑟 发表于 2018-7-18 14:40
换个21.6Mhz(或10.8Mhz)的晶振,TH0=(65536-4(2))/256;TL0=(65536-4(2))/256;PWM占空比改为90%

那么此时中断还是2次吗?
回复

使用道具 举报

ID:373947 发表于 2018-7-18 15:47 | 显示全部楼层
10.8Mhz是中断两次的,21.6Mhz是中断四次的
回复

使用道具 举报

ID:374171 发表于 2018-7-18 16:06 | 显示全部楼层
TH0=(65536-4(2))/256;TL0=(65536-4(2))/256
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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