Hi 各位大神,
我的程序有定時器,工作方式為8位自動重裝;用while延時誤差太大了,我的想法是:定時器13us溢出一次,tt加1,用while(tt <692)延時,即延時時長13us*692 = 8996us ,設置兩個斷點,軟件仿真時間為16秒!!!求解,謝謝!
詳細程序如下:
#include <REG52.H>
#include <intrins.H>
#define uint unsigned int
#define uchar unsigned char
/*****************************************************************************************************
函數功能:定時器初始化
說明:定時器1工作方式2(8位自動重裝模式)
******************************************************************************************************/
void Timer_Init()
{
TMOD = 0x20; //定時器1工作方式2
TH1 = 0xF3; //裝初值,13us溢出一次,產生約38KHz的方波/紅外載波
TL1 = 0xF3;
EA = 1;
}
void main()
{
Timer_Init();
while(1)
{
TR1 = 1;
【斷點1】 ET1 = 1;
while(tt != 692); //開定時器的期間,要用定時器延時,若用軟件延時,處理中斷服務程序占用的時候導致延時出錯
【斷點2】 tt = 0;
。。。。。。。。。。。。。。。
}
/*****************************************************************************************************
定時器1中斷服務程序:產生38KHz的方波
******************************************************************************************************/
void Timer1_IRQ() interrupt 3 //13us中斷一次
{
IR_Si = ~IR_Si;
tt++;
}
|