芯片STC89C52RC
在PC端向單片機發(fā)送任意數(shù)據(jù)后, 單片機向PC端發(fā)送4行文本,
由于在windos下,回車換行用
e0b48f25-7abc-319c-9847-890e339e1c97.jpg (89.33 KB, 下載次數(shù): 38)
下載附件
2017-2-9 22:18 上傳
C代碼- #include <reg52.h>
- #include "MY51.h"
-
- void initSer(); //串口初始化
- uchar sendFlag = 0; //未發(fā)送數(shù)據(jù)時
- uchar receFlag =0; //未接受到數(shù)據(jù)時
-
- code uchar TEXT0[] = "****************************\r\n"; //\r\n是回車換行
- code uchar TEXT1[] = "單片機串口通訊測試\r\n";
- code uchar TEXT2[] = "http://xouou.iteye.com\r\n";
- code uchar TEXT3[] = "****************************\r\n\r\n";//回車換行并空1行
-
- void sendChar(uchar sendValue); //發(fā)送一字節(jié)數(shù)據(jù)
- void sendAll(uchar *pValue); //發(fā)送一組數(shù)據(jù)
-
- void main(void)
- {
- initSer();
- while(1)
- {
- while(receFlag) //單片機串口收到任意數(shù)據(jù)后,開始向PC發(fā)送數(shù)據(jù)
- {
- sendAll(TEXT0); //發(fā)送數(shù)據(jù)
- sendAll(TEXT1);
- sendAll(TEXT2);
- sendAll(TEXT3);
- receFlag=0; //發(fā)完了清標志
- }
- }
- }
-
- void serInt() interrupt 4 //中斷函數(shù)
- {
- if(RI) //如果收到任意數(shù)據(jù)
- {
- RI = 0;
- P1=SBUF; //數(shù)據(jù)的變化讓led燈直觀反應出來
- receFlag=1; //修改接受標志,便于主函數(shù)進入while中發(fā)數(shù)據(jù)
- }
-
- if(TI)
- {
- TI = 0; //發(fā)送完一個數(shù)據(jù)
- sendFlag = 0; //清標志位
- }
- }
-
-
- void sendChar(uchar Value) //發(fā)送一個字節(jié)數(shù)據(jù)
- {
- SBUF = Value;
- sendFlag = 1; //設置發(fā)送標志位,發(fā)一字節(jié)就置位
- while(sendFlag); //直到發(fā)完數(shù)據(jù),將sendFlag清零后,才退出sendChar函數(shù)
- }
-
- void sendAll(uchar *pValue) //發(fā)送一組數(shù)據(jù)
- {
- while((*pValue) != '\0') //如果沒有發(fā)送完畢就繼續(xù)發(fā)
- {
- sendChar(*pValue); //發(fā)送1字節(jié)數(shù)據(jù)
- pValue++; //指向下1個字節(jié)
- }
- }
-
- void initSer() //初始化
- {
- //注意:剛上電時,SCON是為0的
- TMOD=TMOD|0x20; //T1定時器模式,工作方式2
- TH1=0Xfd; // 256-(11059200/(32*12*9600))
- TL1=0xfd;
- SM0=0; //屬于SCON寄存器
- SM1=1; //串口工作方式1,10位異步,波特率可改
- REN=yes; //允許串口接收
- ES=open; //開串口中斷
- EA=open; //開總中斷
- TR1=start; //啟動定時器
- }
復制代碼
|