STC单片机精确延时参数测定方法
2011-10-27 23:53
246 查看
在使用STC单片机的时候,大家是不是会遇见一个问题:延时往往很难把握。当然可以使用延时函数产生波形输出到示波器观察来修改延时参数,但是没有示波器时有没有方法来确定延时参数呢。我这里自创了个办法,发到这与大家分享一下。 其方法是这样,首先设置好定时器的定时时间,在调用延时函数前打开定时器,定时器中断函数中读取出延时参数,然后通过串口将延时参数输出。具体代码如下:
//程序说明:测试stc单片机延时常数,串口输出 //作者:mjx //注:程序测量精度高,适用stc这种指令不固定的单片机 #include "STC12C5A60S2.h" #include <intrins.h> 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; }
相关文章推荐
- Keil C51程序设计中几种精确延时方法
- 单片机的延时与中断问题及解决方法
- 在进行C51程序设计时如何精确延时的常见方法介绍
- Keil C51程序设计中几种精确延时方法
- STC15单片机外部中断仅上升沿触发的方法
- 宏晶STC单片机使用STC-ISP串口烧录失败的解决方法及实例汇总 (Ver0.99.16)
- 单片机精确延时几种方式
- STC51系列ms级较精确的长延时函数
- Keil C51程序设计中几种精确延时方法
- 单片机延时方法总结
- STC单片机的延时
- 51单片机 精确 延时子 程序 通用算法
- STC单片机不需要按电源开关下载的方法!
- 宏晶STC单片机使用STC-ISP串口烧录失败的原因与解决方法汇总
- IAR FOR AVR中精确软件延时方法
- Keil C51程序设计中几种精确延时方法
- 在keil_C51设计中几种精确延时的方法
- Keil C51程序设计中几种精确延时方法
- STC 1T单片机实现精确到 0.004微秒级同步信号输出
- 单片机嵌入式产生精确延时的一种方法