搜索
bottom↓
回复: 15

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

[复制链接]

出0入0汤圆

发表于 2013-2-8 10:00:39 | 显示全部楼层 |阅读模式
本帖最后由 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%

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2013-2-8 10:03:08 | 显示全部楼层
这个频率,可以的
最简单用时钟。

出0入0汤圆

 楼主| 发表于 2013-2-8 10:11:35 | 显示全部楼层
devcang 发表于 2013-2-8 10:03
这个频率,可以的
最简单用时钟。

请问怎么用软件产生呢..

出0入0汤圆

发表于 2013-2-8 10:43:51 | 显示全部楼层
25K=40us周期,你用定时器20us翻一次,12M晶体,定时器8位重装模式

出0入0汤圆

发表于 2013-2-8 10:44:10 | 显示全部楼层
直接用T2的可编程时钟输出

出0入0汤圆

发表于 2013-2-8 10:47:45 | 显示全部楼层
BXAK 发表于 2013-2-8 10:44
直接用T2的可编程时钟输出

这个好,好久不用51了没想到

出0入20汤圆

发表于 2013-2-8 11:14:56 | 显示全部楼层
NJ8888 发表于 2013-2-8 10:43
25K=40us周期,你用定时器20us翻一次,12M晶体,定时器8位重装模式

必须考虑中断响应的时间。要把它们补偿进去。20us的延时是大了,要减少!
头像被屏蔽

出0入0汤圆

发表于 2013-2-8 11:19:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入84汤圆

发表于 2013-2-8 11:42:01 | 显示全部楼层
很多方法,实在感觉困难,可以选用增强型的51,有6分频的,有四分频的

出0入0汤圆

 楼主| 发表于 2013-2-8 16:18:46 | 显示全部楼层
木兮木有枝 发表于 2013-2-8 11:19
可以的。。用计数器的模式2,自动重装初值,不用考虑那个重载时间

求教一下怎么调节占空比

出0入0汤圆

发表于 2013-2-14 21:53:10 | 显示全部楼层
能,直接用T2就自动产生了

出0入0汤圆

发表于 2013-2-14 23:09:05 | 显示全部楼层
要调占空比,你得能生成更高频率的方波才行,比如你分辨率是10%,那你得到250KHZ的方波才能做到以分辨率10%来调节占空比。
放一个数组甚至更绝点,用个移位计数器来记录一下。
比如你能生成250K的方波,利用定时中断来的话,就是大概4US中断一次开更新端口的0/1状态,那么,你要占空比20%的方波,你需要控制输出端在一个周期内的状态是 (2进制)1100000000 如此反复,当然,还有些具体的涉及到延迟补偿之类的还得推导一下。
如果你的程序只跑这个功能,不会有其他中断或者功能要跑,直接用汇编写,计算好一个NOP以及跳转需要的时间,通过控制NOP的循环数量来精确延时,从而利用延时来控制占空比,这样在旧的51来说,会比定时器方式要容易以及精确以及分辨率更高。
这是大概原理有错误请包涵,51 有10多年没碰过了,早忘光光怎么控制具体的定时了。
这个东西好像资料不少,书上写的也不少,GOOGLE也能查到不少。

出0入0汤圆

发表于 2013-2-14 23:17:06 | 显示全部楼层
我弄过定时中断20k的,结果不行。

出0入0汤圆

发表于 2013-2-15 00:14:11 来自手机 | 显示全部楼层
标记一下,用电脑再看

出0入0汤圆

发表于 2013-2-15 01:10:04 | 显示全部楼层
本帖的关键在于占空比调节的步进要求:
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波形中高、低电平的最小时间还有限制。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 12:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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