[求助]为什么运行到这一行会死循环? /*--------------------------------------------------------------- 功能:让单片机P2_7脚连续输出从50Hz到600Hz的频率,间隔频率为10Hz 芯片:AT89S52 晶振:12MHz 日期:2008年1月24日 ---------------------------------------------------------------*/ #include <REGX52.H> long int timer_initial_value; float i = 0; void timer_0(void) interrupt 1 using 0 { TH0 = timer_initial_value / 256; TL0 = timer_initial_value % 256; P2_7 = ~P2_7; } long int timerInitialvalue(void) { /* 初值计算 */ long int initial_value_0; if(i < 600) { i = i + 10; initial_value_0 = 65536 - 1 / i / 2 * 1000000; //当i值为350的时候会死循环 return(initial_value_0); } } void main(void) { EA = 1; /* 总中断允许 */ ET0 = 1; /* 定时器0中断允许 */ TMOD = 0x01; /* 设置工作方式。TMOD工作方式寄存器,TCON控制寄存器 */ TCON = 0x00; while(1) { unsigned int j = 10000; timer_initial_value = timerInitialvalue(); TH0 = timer_initial_value / 256; /* 装入初值 */ TL0 = timer_initial_value % 256; TR0 = 1; /* 启动定时器 */ while(j) { j--; if(j == 0) TR0 = 0; } } } [详细内容] |