怎么用C写一个让51单片机发生一个频率40K标准的方波

来源:百度知道 编辑:UC知道 时间:2024/05/29 14:32:57
写一个出来,知道很简单的,我写了很多了,都没有发生的很标准的,这和C进入中断,等等占用的时间有关系,希望帮我写一个。我再到示波器上测一下。。。

汇编语言可以很准的,准确率可以达到百分百。
40K的频率,一周期就是25us,高电平才12.5us,换句话说12.5us在中断程序里面取反。但是中断服务程序的一些语句占用的时间可能就超过了12.5us,这样的话,频率肯定远远小于40K,即便中断服务程序正好是12.5us,那你的中断也没有意义了,因为中断结束了马上就来中断了,做不了别的事情。

两种方式解决:
一、主循环一直停留在产生方波那几句,这样的方式频率可以调到很准,但是要做别的事情必须用中断了。
程序很简单,假如p1.0口产生方波:
while(1)
{
i=3;
while(i--!=0);
p1^0=!p1^0;
}
可以调i的值来调频率。
二、利用硬件来产生。
如果你的晶振是6M,ALE就是6M/6=1M,需要二十五分频,得到40K脉冲。

#include<reg52.h>
sbit led=P1^3;
unsigned char time=0;
void main()
{
time=0;
TMOD=0x01;
TH0=(65536-12)/256;
TL0=(65536-12)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
time++;
if(time==20)
{

time=0;
}
}
}
void timer0() interrupt 1
{

led=!led; //方波输出
TH0=(65536-12)/256;
TL0=(65536-12)%256;

}

试试了