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++;
}
|