[求助]为什么运行到这一行会死循环?
/*---------------------------------------------------------------
功能:让单片机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;
}
}
}
发表时间:2008年1月25日21:10:51