大家好,新手小白。在做串口通信的时候,单独的发送、接收能够实现,在仿真的仪器上能看到确实接收到了数据,但始终无法在接收完成后,向外发送接收到的数据或其他字符串,查询或中断方式都尝试过,不知道问题到底出在哪儿了。麻烦大家帮忙解解惑,谢谢!
单片机源程序如下:
- #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)
- {
- /*以查询方式接收数据
- 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; //将数据写入发送缓冲器,启动发送
- while(!TI); //若没有发送完毕,等待
- TI = 0;
- }
- void Uart1_SendStr(uchar *s)
- {
- while(*s!='\0')// \0 表示字符串结束标志,检测是否字符串末尾
- {
- Uart1_SendChar(*s);
- s++;
- }
- }
- /*以查询方式接收数据
- 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++;
- }
- }
复制代码
|