求一个c51产生500khz方波的程序

如题所述

#include <reg51.h>//用单片机产生方波
void InitTimer0(void)
{
TMOD = 0x01;// 改变方波周其
TH0=(65536-1)/256; //对TH0 TL0赋值1us
TL0=(65536-1)%256;

EA = 1;
ET0 = 1;
TR0 = 1;
}

void main(void)
{
InitTimer0();

while(1); //无限循环 }
void Timer0Interrupt(void) interrupt 1{
TH0=(65536-1)/256; //对TH0 TL0赋值1us
TL0=(65536-1)%256;
P1=~P1; //每1US电平变一次,周期2US F=500khz

}

仿真正常 记得给分啰
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-05-07
51要产生500K的方波,一定要把晶振的频率调高。12M的晶振很难用定时器的方式产生500K方波,它的指令频率才1M。可以试下如下方法:
#include <reg51.h>//用单片机产生方波
sbit fangbo=P1.1;
void main(void)
{
while(1)

fangbo=~fangbo;
// fangbo=fangbo; //如果输出频率错过500K,可以把这句加上

}
第2个回答  2012-09-11
产生500kHz方波,每隔一微秒,取反即可。

使用12MHz的晶振时,一条取反指令CPL P1.0,就正好是一微秒。
这种条件下,什么中断、循环、重新送入初始值等等,什么都没有时间干了。
时间,已经来不及了。

如果使用48MHz的晶振,程序如下:

ORG 0000H
START:
CPL P1.0
NOP
SJMP START

END

这就可以了。一个循环,正好是一微秒。
第3个回答  2018-06-14
用Stc15W系列PWM0输出,主频30M,PCA_PWM_1T,PWM(6)/6位模式
相似回答