51單片機(jī)學(xué)習(xí)筆記:串口接收和發(fā)送數(shù)據(jù)
芯片STC89C52RC
在PC端向單片機(jī)發(fā)送任意數(shù)據(jù)后, 單片機(jī)向PC端發(fā)送4行文本,
由于在windos下,回車換行用rn
C代碼
#include
#include"MY51.h"
voidinitSer();//串口初始化
ucharsendFlag=0;//未發(fā)送數(shù)據(jù)時
ucharreceFlag=0;//未接受到數(shù)據(jù)時
codeucharTEXT0[]="****************************rn";//rn是回車換行
codeucharTEXT1[]="單片機(jī)串口通訊測試rn";
codeucharTEXT2[]="http://xouou.iteye.comrn";
codeucharTEXT3[]="****************************rnrn";//回車換行并空1行
voidsendChar(ucharsendValue);//發(fā)送一字節(jié)數(shù)據(jù)
voidsendAll(uchar*pValue);//發(fā)送一組數(shù)據(jù)
voidmain(void)
{
initSer();
while(1)
{
while(receFlag)//單片機(jī)串口收到任意數(shù)據(jù)后,開始向PC發(fā)送數(shù)據(jù)
{
sendAll(TEXT0);//發(fā)送數(shù)據(jù)
sendAll(TEXT1);
sendAll(TEXT2);
sendAll(TEXT3);
receFlag=0;//發(fā)完了清標(biāo)志
}
}
}
voidserInt()interrupt4//中斷函數(shù)
{
if(RI)//如果收到任意數(shù)據(jù)
{
RI=0;
P1=SBUF;//數(shù)據(jù)的變化讓led燈直觀反應(yīng)出來
receFlag=1;//修改接受標(biāo)志,便于主函數(shù)進(jìn)入while中發(fā)數(shù)據(jù)
}
if(TI)
{
TI=0;//發(fā)送完一個數(shù)據(jù)
sendFlag=0;//清標(biāo)志位
}
}
voidsendChar(ucharValue)//發(fā)送一個字節(jié)數(shù)據(jù)
{
SBUF=Value;
sendFlag=1;//設(shè)置發(fā)送標(biāo)志位,發(fā)一字節(jié)就置位
while(sendFlag);//直到發(fā)完數(shù)據(jù),將sendFlag清零后,才退出sendChar函數(shù)
}
voidsendAll(uchar*pValue)//發(fā)送一組數(shù)據(jù)
{
while((*pValue)!='