51单片机输出方波问题

一:NOTE

今天分享一个题目,有关51单片机输出方波的问题,好了,进入正题

二:题目

已知8051单片机的时钟频率为6MHZ,通过定时器1的工作方式1在P1^1引脚输出一个1KHZ占空比为60%的矩形波。

三:分析题目

1、首先第一个条件,时钟频率6MHZ,从这里我们可以得出它的时钟周期为1/f=2us
2、第二个条件,定时器1,工作方式1,那么对应TMOD寄存器也就是0x10。
3、第三个条件,输出一个1KHZ占空比60%,这里其实有两个条件,第一个输出1KHZ,他告诉我们输出的波形周期是1/f=1ms,然后是占空比,推出高电平为1ms*60%=600us,那么低电平就是400us,到这里,题目所有条件都分析完毕

四:理论储备

1、机器周期=时钟周期*12;
2、定时器工作方式1:定时时间=(65536-初值)*机器周期(知道为什么要算机器周期了吧)这里带入值可以算出初值是50
3、拓展:定时器方式0:定时时间=(8192-初值)*机器周期
定时器方式2:定时时间=(256-初值)*机器周期

五:编程思路

我的思路是定时器初值设100us,然后开始的时候开启定时器并且给高电平,然后给一个标志tt,当tt加到6的时候,给低电平,这样就实现方波的形成,下面给出程序。

六:程序演示

#include
sbit wave=P1^1;
sbit temp=P1^0;
int tt=0;

void main()
{
	TMOD=0x10;//定时器1,工作方式1
	EA=1; //总中断
	ET1=1;//定时器1中断
	TH1=(65536-50)/256;
	TL1=(65536-50)%256;
	TR1=1;
	wave=1;
	while(1);
	
	
}

void exter3() interrupt 3
{
	TH1=(65536-50)/256;
	TL1=(65536-50)%256;
	tt++;
	if(tt==6)			 
		wave=0;
	if(tt==10)
	{
	 	tt=0;
		wave=1;
//		TR1=0;
	}
} 

七:仿真演示

51单片机输出方波问题_第1张图片

八:没有啦,拜拜!

你可能感兴趣的:(51单片机输出方波问题)