本帖最后由 mey 于 2013-2-8 16:18 编辑
- #include"reg52.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit out=P3^0;
- void main()
- {
- TMOD=0x20;
- TH1=236;
- TL1=236;
- EA=1;
- ET1=1;
- TR1=1;
- while(1);
- }
- void timer()interrupt 3
- {
- out=~out;
- }
复制代码用这段代码产生了25KHZ的方波 请教一下怎么调节占空比 20%~99%
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波形中高、低电平的最小时间还有限制。
一周热门 更多>