我的目的是通过电脑给单片机发送一个字符串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;
-
- }
复制代码
下面是串口助手调试情况:
此帖出自
小平头技术问答
不能显示所有的字符,先是显示k,然后再一次发送数据时显示+;
当我把代码改成如下时,他竟然会全部显示,但是和我的目的不一样, 主函数中SBUF=table[2]和SBUF=table[3]这两个语句无论保留哪个,它竟然都会显示,如果把这两个语句都删了,就不会显示任何数据了。不明白为什么即使把 主函数中SBUF=table[2]和SBUF=table[3]这两个语句的条件限制的这么狠了,它竟然都会显示。
帮忙分析一下,谢谢了
- #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)
- {
- ES=0;
- SBUF=table[2];
- SBUF=table[3];
- while(!TI);
- TI=0;
- flag=0;
- ES=1;
- }
-
-
-
- }
-
- }
- void ser()interrupt 4
- {
- RI=0;
- table[0]=SBUF;
- table[1]=SBUF;
- table[2]=SBUF;
- table[3]=SBUF;
- flag=1;
-
-
- }
复制代码while(!RI);
for(i=0;i<4;i++)
{
table【i】=SBUF;
RI=0;
}
flag=1; 改成这样应该是可以的,你试试。 然后第2种,证明啥?证明你table[0]到table[4]里面都是k+25,你信不?不信你把前面发送的改成table[0]试试。肯定全部显示
成功了 谢谢了
一开始我问的那个实现了,但是现在出现了一个bug,如果我把主函数中改成(j=1;j<3;j++)按理说通过串口助手调试后应该显示+2两个字符,而现在并不是,呈现的是后两个字符25.即使我发送1234这两个字符,显示的不是23,而是34这两个字符,为什么呢?
一周热门 更多>