89c52能产生25khz频率方波吗

2020-01-30 14:16发布

本帖最后由 mey 于 2013-2-8 16:18 编辑
  1. #include"reg52.h"
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit out=P3^0;
  5. void main()
  6. {
  7.         TMOD=0x20;
  8.         TH1=236;
  9.         TL1=236;
  10.         EA=1;
  11.         ET1=1;
  12.         TR1=1;
  13.         while(1);
  14. }
  15. void timer()interrupt 3
  16. {
  17.         out=~out;
  18. }
复制代码用这段代码产生了25KHZ的方波 请教一下怎么调节占空比 20%~99%
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
cu_ice
1楼-- · 2020-02-01 01:59
本帖的关键在于占空比调节的步进要求:
25kHz的频率,也就是说周期为40μs,从LZ位“20%~99%”的这个要求来看,占空比调节步进应该至少是1%。
40μs的1%是400ns,也就是2.5MHz;LZ提到是用89C52来做,因为89C52是12分频的,所以需要2.5MHz*12=30MHz的时钟,而Atmel公司的AT89C52最大只支持24MHz的时钟,所以无法实现1%的步进调整,理论上最多只能支持25kHz/(24MHz/12)=1/80=1.25%的步进调整细粒度。
再考虑到89C52没有硬件PWM功能,必须通过定时器+中断服务程序的方式来实现,因为中断服务程序中保存及恢复现场需要花费一定时间,所以对PWM波形中高、低电平的最小时间还有限制。
eduhf_123
2楼-- · 2020-02-01 06:02
ls高人,分析清晰

一周热门 更多>