|
大家好,新手小白。在做串口通信的時(shí)候,單獨(dú)的發(fā)送、接收能夠?qū)崿F(xiàn),在仿真的儀器上能看到確實(shí)接收到了數(shù)據(jù),但始終無法在接收完成后,向外發(fā)送接收到的數(shù)據(jù)或其他字符串,查詢或中斷方式都嘗試過,不知道問題到底出在哪兒了。麻煩大家?guī)兔饨饣螅x謝!
單片機(jī)源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- bit flag1=0;
- uchar Uart1R_Buf[]=0,point1=0;
- void Serial_Init();
- void Uart1_SendChar(uchar C);
- void Uart1_SendStr(uchar *s);
- // uchar Uart1_RecieveChar();
- void main()
- {
- // uchar Rev;
- Serial_Init();
- while(1)
- {
- /*以查詢方式接收數(shù)據(jù)
- Rev=Uart1_RecieveChar();
- Uart1_SendStr("Rev_Data:");
- Uart1_RecieveChar();
- */
- /*以中斷方式接收*/
- if(flag1)
- {
- flag1=0;
- if(Uart1R_Buf[0]=='O'&&Uart1R_Buf[1]=='K')
- Uart1_SendStr(Uart1R_Buf);
- }
- }
- }
- void Serial_Init()
- {
- PCON=0x00;
- SCON=0x50;
- TMOD=0x20;
- TH1=0xFD;
- TL1=0xFD;
- TR1=0;
- ES=1; //允許串口中斷;
- EA=1;
- }
- void Uart1_SendChar(uchar C)
- {
- SBUF=C; //將數(shù)據(jù)寫入發(fā)送緩沖器,啟動(dòng)發(fā)送
- while(!TI); //若沒有發(fā)送完畢,等待
- TI = 0;
- }
- void Uart1_SendStr(uchar *s)
- {
- while(*s!='\0')// \0 表示字符串結(jié)束標(biāo)志,檢測(cè)是否字符串末尾
- {
- Uart1_SendChar(*s);
- s++;
- }
- }
- /*以查詢方式接收數(shù)據(jù)
- uchar Uart1_RecieveChar()
- {
- uchar Rev;
- // R=SBUF;
- while(!RI); //若沒有接收完畢,等待
- Rev=SBUF;
- RI = 0;
- return Rev;
- }
- */
- void Uart1_Isr() interrupt 4
- {
- if(RI==1)
- {
- RI=0;
- Uart1R_Buf[point1]=SBUF;
- if(Uart1R_Buf[point1]=='\0')
- {
- point1=0;
- flag1=1;
- }
- else point1++;
- }
- }
復(fù)制代碼
|
|