修改我下面的单片机程序,能产生1000hz的方波信号

2024-12-13 02:18:38
推荐回答(3个)
回答1:

每计一次为一个机器周期,如果振荡频率为12MHz,则一个机器周期为1us,一般采用方法,是设计一基本延时,然后通过一参数来实现不同的延时要求,象你程序中的NUM.
按12MHz来算,如果要产生1000Hz的方波信号,也就是周期为1ms的方波,则要计数1000次就好,所以我认为,最好固定X,然后改变NUM实现.
比如固定X为1000,当NUM=1时,表示为1000Hz,当NUM=10就为100Hz了,而当NUM=100就为10Hz,当NUM=5就为200Hz.按照这个思路,以振荡频率为12MHz来算,程序可更改为:
#include "reg51.h"
#define uint unsigned int
uint num,x;
sbit a=P0^6;
sbit b=P1^0;
sbit c=P1^1;
sbit d=P1^2;
sbit e=P1^3;
main()
{
while(1)
{
if(b==0) num=100; //10hz
else if(c==0) num=10; //100hz
else if(d==0) num=5; //200hz
else num=1; //1000hz
TMOD=0x10;
EA=1;
ET1=1;
TR1=1;
x=0;
}}
void T1_time()interrupt 3
{
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
x++;
if(x==num) {x=0;a=~a;}
}

回答2:

#include

sbit P10=P1^0;

void gr()interrupt 1 using 3

{TH0=(65536-500)/256;

TL0=(65536-500)%256;

TL0=0x17;

P10=!P10;

}

main()

{ET0=1;

EA=1;

TMOD=0x01;

TH0=(65536-500)/256;

TL0=(65536-500)%256;

TR0=1;

while(1);

}

回答3:

试试~将250赋值给X~你用的是12M晶振?
在中断函数中将
if(x==num) {x=0;a=~a;}

改为:
a=~a