while循环(或称while语句),也是条件循环,一般格式为:
while(条件表达式)
{
循环语句
}
程序运行时,首选判定条件表达式结果是否为true,如果为true,就执行循环语句;反之则跳过,去执行while循环后面的语句。
while 循环可以只有条件表达式,没有循环语句。如while(!TF0= 0);这个实际上是T0硬件延时,等待T0计数器溢出。
while循环非常有用,在单片机编程中最常见的是:while(1){语句或语句块},几乎每个main()函数中都有。这是一个死循环,用它可以避免因程序执行到最后,跳出main()函数,而出现系统频繁开关机。示例:
//*****************************
void main()
{
//***************init IO
STC_IOInit(0xFF, 0xFF, BI_IO);
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
P4 = 0xFF;
P5 = 0xFF;
P6 = 0xFF;
P7 = 0xFF;
idleFlag = 0;
reFlag = 0;
mRdata = 0;
CD4501_E = 1;
CD4501_Ea = 1;
P74H245 = 0;
E74H245_1 = 1;
E74H245_2 = 1;
//***********************init uart1
STC_PortPinsInit(GPIO_P3, GPIO_PIN7, PP_OUT);
mUartStruct.Pinsel = G2;
mUartStruct.MODE = VBAUD_8BITS;
mUartStruct.MCEN = 0;
mUartStruct.RDEN = 1;
mUartStruct.TimerSel = Timer2;
mUartStruct.priortiyHigh = 1;
mUartStruct.intEnable = 1;
mUartStruct.BaudRate = 9600;
UART1_Init(&mUartStruct);
//****************************************init CS1237
cs1237SCK0 = 0; //cs1237_1 normal working
cs1237SCK1 = 0; //cs1237_2 normal working
C1237_Init(0, C1237_REF_OFF,C1237_40HZ,C1237_PGA_1,C1237_CHA);
C1237_Init(1, C1237_REF_OFF,C1237_40HZ,C1237_PGA_1,C1237_CHA);
Delay10xms(1,8);
C1237_ReadReg(0);
C1237_ReadReg(1);
C1237_ReadResult(0);
C1237_ReadResult(1);
SundBuzzerx100ms(1);
Delay100xms(1,8);
SundBuzzerx100ms(2);
Delay100xms(1,8);
SundBuzzerx100ms(2);
EA = 1; //int enable
//subWayFlag = 'T';
while(1)
{
switch(subWayFlag)
{
case 0xB0:
MainInterface();
break;
case 'T':
ModularTest();
break;
case 0xA0:
SundBuzzerx100ms(2);
break;
case 0xAA:
McrTest(); //multiple channel contact resistance test
break;
case 0xAB:
SrTest();//single channel resistance test
break;
}
}
}
//End of main()
while语句是条件循环语句,当while后面圆括号中的条件表达式值为true时,循环体内的程序ji就一直循环执行下去,直到其条件表达式值变为false。我们可以用它来实现数据发送,数组操作等多种用途。 示例:
//*******************************************************
void UART1_SendString(ui8 *mString) //send tring
{
ui8 i = 0;
ui8 tem = ES;
ES = 0;
while(mString[i]!=0)
{
UART1_SendByte(mString[i]);
i++;
}
ES = tem;
}
//End of UART1_SendString(ui8 *mString)
与while语句相似的还有do while语句,该语句循环体在do的后面,while(条件表达式)放在最后。它的一般格式为:
do{
语句或语句块
}while(条件表达式);
不管条件表达式的值如何,先执行一次循环内的程序,然后再据条件表达式的值决定是否在进行下一个循环。示例: