单片机用IO口产生方波的最大频率怎么几KHz呀?这是什么原因?

#include<reg52.h>

sbit m=P1^1;
void delay(unsigned int i)
{
while(i--);
}
void main()
{
while(1)
{
m=1;
delay(1);
m=0;
delay(9);
}
}

受到单片机主频和晶振的限制

如果你使用的是传统8051单片机,在12MHz的晶振下一个nop指令就是1us,你采用的delay里有while循环,汇编指令更长,一共10个delay,即一个周期的时间远大于10us,那当然你的方波频率只有几K了。即使最理想的情况下,输出的频率也不会大于1MHz。
一般最多用24MHz的晶振,也快不到哪里去。

想出更高的频率,只能想其他的办法(振荡源、锁相环、DDS)。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-28
这个延时输出方波的程序输出波形的频率和单片机的时钟频率和指令周期有关。追问

刚试过用单片机的空指令,最大的频率是150KHz的

追答

这个单片机,有些指令不是单周期的吧,本身用空指令才150KHz,还要调用delay函数,调用这个函数的时间开销就比单空指令高多了,当然输出才几K啊

第2个回答  2011-08-28
首先你产生的这不是标准方波。
其次你这么写的效率很低。
再次你需要检查一下外部晶振的频率。追问

是不是方波,我是想调整方波的占空比的?就这么写的,但是频率太低了

追答

外部晶振用的多少?
别用delay()函数进一步降低频率。
翻转管脚用m = ~m;,别用置1置0进一步降低效率。

本回答被网友采纳