×
嵌入式 > 技术百科 > 详情

STC单片机精确延时参数测定方法

发布时间:2020-06-03 发布时间:
|
    在使用STC单片机的时候,大家是不是会遇见一个问题:延时往往很难把握。当然可以使用延时函数产生波形输出到示波器观察来修改延时参数,但是没有示波器时有没有方法来确定延时参数呢。我这里自创了个办法,发到这与大家分享一下。

   其方法是这样,首先设置好定时器的定时时间,在调用延时函数前打开定时器,定时器中断函数中读取出延时参数,然后通过串口将延时参数输出。具体代码如下:

//程序说明:测试stc单片机延时常数,串口输出
//作者:mjx
//注:程序测量精度高,适用stc这种指令不固定的单片机
#include "STC12C5A60S2.h"
#include 
int i,j,ii,jj;//ii,jj作为定时器定时结束时暂存数,用于延时结束后串口输出


void Uart1_Send(unsigned char Data)	  //向控制器发送数据	
{
   ES=0;
   TI=0;
   SBUF=Data;
   while(TI==0);
   TI=0;
   ES=1;
}
//延时函数
void delay(int k)
{		
	for(i = 0; i < k; i++)
	{
		for(j = 0; j < 30000; j++)
		{
			_nop_();_nop_();_nop_();_nop_();_nop_();
		}
	}
}

void Uart1_init(void)		// 使用定时器1作为波特率发生器
{
	PCON=0x00; 				//SMOD=0
 	SCON=0x50;   			//0101,0000 8位可变波特率,无奇偶校验位
	TMOD|=0x20;   			//0011,0001 设置顶时器1为8位自动重装计数器
	AUXR=0x00; 				//设置定时器1工作在1T模式下

	TH1=0xfd; 		//设置定时器1自动重装数
	TL1=0xfd;
	TR1=1;    				//开定时器1
  //  ES=1;    				//允许串口1中断
    EA=1;    				//开总中断
}
void main()
{
	TMOD=0x01;//T0定时器
    TH0 = 0xdC;	 //11.0592MHz--10ms	设置不同的时间,可以测试stc单片机内部延时参数				
    TL0 = 0x00;
    ET0 = 1;			
	EA=1;
	Uart1_init();//初始化uart1,波特率9600,其他默认

	TR0 = 1;//开启定时
	delay(100);//延时
    Uart1_Send(0x30+jj/10000);
	Uart1_Send(0x30+(jj%10000)/1000);
	Uart1_Send(0x30+(jj%1000)/100);
	Uart1_Send(0x30+(jj%100)/10);
	Uart1_Send(0x30+jj%10);

	Uart1_Send(0x2e);
	Uart1_Send(0x30+ii/10000);
	Uart1_Send(0x30+(ii%10000)/1000);
	Uart1_Send(0x30+(ii%1000)/100);
	Uart1_Send(0x30+(ii%100)/10);
	Uart1_Send(0x30+ii%10);
	while(1);
}

void Timer0(void) interrupt 1 using 3
{
	 ii=i; //  暂存延时函数的i和j 
	 jj=j; //
	 TR0=0;
}


 

 

 

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
iPhone将是质的飞跃:苹果A14处理器+高通X55基带