我的目的是通过电脑给单片机发送一个字符串k+25,单片机接收到该字符串后,发送给电脑25这两个字符;单片机虽然接受到了该字符串,但是发送到电脑时总是+2
这两个字符。我在发送函数里已经用for(j=2;j<4;j++)来限制只发送25这两个字符了,可是现在一直发送+2这两个字符,麻烦各位大神帮我看一下吧,谢谢了
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char flag,a,i,j;
- uchar table[];
- void init()
- {
- TMOD=0x20;
- TH1=0xFD;
- TL1=0xFD;
- TR1=1;
- REN=1;
- SM0=0;
- SM1=1;
- EA=1;
- ES=1;
-
- }
- void main()
- {
- init();
- while(1)
- {
- if(flag==1)
- {
- // for(i=0;i<4;i++)
- // {
- // table=a;
- // }
- ES=0;
- // SBUF=table[2];
- // SBUF=table[3];
- for(j=2;j<4;j++)
- {
- SBUF=table[j];
- while(!TI);
- TI=0;
- flag=0;
- ES=1;
- }
- flag=0;
- ES=1;
- }
- // flag=0;
- // ES=1;
- // flag=0;
-
- // ES=1;
- // flag=0;
-
- }
- // SBUF=a;
- // while(!TI);
- // TI=0;
- // ES=1;
- // flag=0;
- //
- }
- void ser()interrupt 4
- {
- // RI=0;
- // a=SBUF;
- for(i=0;i<4;i++)
- { while(!RI);
- table=SBUF;
- // while(!RI);
- RI=0;
- }
- // table[0]=SBUF;
- // table[1]=SBUF;
- // table[2]=SBUF;
- // table[3]=SBUF;
- flag=1;
-
- }
复制代码
下面是串口助手调试情况:
此帖出自
小平头技术问答
删减版本,确实看着晕乎的
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char flag,a,i,j;
- uchar table[];
- void init()
- {
- TMOD=0x20;
- TH1=0xFD;
- TL1=0xFD;
- TR1=1;
- REN=1;
- SM0=0;
- SM1=1;
- EA=1;
- ES=1;
-
- }
- void main()
- {
- init();
- while(1)
- {
- if(flag==1)
- {
- for(j=2;j<4;j++)
- {
- SBUF=table[j];
- while(!TI);
- TI=0;
- flag=0;
- ES=1;
- }
- flag=0;
- ES=1;
- }
-
- }
- }
- void ser()interrupt 4
- {
- for(i=0;i<4;i++)
- { while(!RI);
- table=SBUF;
- RI=0;
- }
- flag=1;
-
- }
复制代码恩恩 好的 谢谢提醒
你先别想着只显示25,你先看把for哪里,j=0开始输出,看你能不能原封不动的输出k+25来。然后在根据想象判断是哪里的问题,我发现你的中断里面写法不对, while(!RI); table 【i】=SBUF;
一周热门 更多>