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