为什么avr仿真时TIFR一开始的值是0x20?

2019-07-18 12:38发布


其他程序运行时不这样,求大神答疑。

程序

#include <mega16.h>
#define figuer 2
#include <NOKIA5110.h>
unsigned char disbuffer[2][figuer];
unsigned char num;

//数据送达缓冲区函数
void data_to_disbuffer(unsigned long data,unsigned char vaf)
{
unsigned char i;
for(i=0;i<figuer;i++)
{
  disbuffer[vaf][figuer-1-i]=data%10;
  data/=10;
  }
}

//显示函数
void display(void)
{
  LCD_write_english_string(0,0,"height:");
  LCD_write_data(0,1,disbuffer[0]);
}
//tiMER_0比较匹配中断
interrupt [TIM0_COMP] void Timer0 (void)
{
if(num++==7)
   TCCR0=0x00; //关闭Timer0,超声波发送完成
}

//TIMER_1事件触发中断
interrupt[TIM1_CAPT] void Timer1_capt_sir1 (void)
{
unsigned char time_l,time_h,height;
unsigned int time;
time_l=ICR1L;
time_h=ICR1H;  //收到超声波信号的时间
//TCCR1B=0x00; //关闭Timer1

time=(time_h<<8+time_l);//收发时间差
height=time*18/4000; //距离
data_to_disbuffer(height,0);//升高数据送达缓冲区
display();
}

void main (void)
{
DDRD=0x3F;
DDRB=0xFF;      
LCD_init();

TCCR1B|=(1<<ICNC1)|(1<<ICES1)|(1<<CS10);//timer1输入捕捉上升沿触发,启用噪声抑制器 、系统时钟源
TIMSK|=(1<<TICIE1);//允许输入捕捉中断     

TCCR0|=(1<<WGM01)|(1<<COM00)|(1<<CS00); //timer0 CTC模式、比较匹配时触发OC0、系统时钟
OCR0=0x32; //50个时钟翻转一次、40kHz
TIMSK|=(1<<OCIE0); //允许timer0比较匹配中断

#asm("sei")

}


新建位图图像.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。