打印

求助串口问题

[复制链接]
1751|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 gongmaomao 于 2011-3-6 17:37 编辑

我是一个新手,刚刚学习串口。
思考出一道题,但是弄不出来了。
题目,用串口发送一个数据,MCU接到后,在该数据前加个序号,在发送至计算机,序号达到255清零。
我写的程序如下
#include <reg52.h>
char a;
int num=0;
bit flag;
main()
{
TMOD=0x20;
TH1=0xf3;
TL1=0xf3;
REN=1;
PCON=0x80;
TR1=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
  if(flag==1)
  {
   num=0;
   flag=0;
   SBUF=num;
   SBUF=a;
   while(TI==0);
   TI=0;
  }
}
}
void cerial() interrupt 4
{
if(RI==1)
{
  RI=0;
  a=SBUF;
  flag=1;
}
num++;   
if(num>255)
num=0;

}
每次返回的值只有计算机发送的值,没有序号啊
虽然这个不是什么难题,但是····求教

相关帖子

沙发
zdhlixiang2006| | 2011-3-6 17:51 | 只看该作者
你的num好像永远是0吧
还有  SBUF=num;
         SBUF=a;
         while(TI==0);
         TI=0;
你这样写也不合理 你本意是想一个一个发送但是有可能后来赋得a会把Num覆盖掉 所以你收不到序号

使用特权

评论回复
板凳
zdhlixiang2006| | 2011-3-6 17:52 | 只看该作者
你的num好像永远是0吧
还有  SBUF=num;
         SBUF=a;
         while(TI==0);
         TI=0;
你这样写也不合理 你本意是想一个一个发送但是有可能后来赋得a会把Num覆盖掉 所以你收不到序号

使用特权

评论回复
地板
gongmaomao|  楼主 | 2011-3-6 18:41 | 只看该作者
3# zdhlixiang2006
那个nun=0,是个意外,你说的确实对,a确实把num覆盖了,我在后面加了个10ms的延时就好了。

使用特权

评论回复
5
gongmaomao|  楼主 | 2011-3-6 18:47 | 只看该作者
3# zdhlixiang2006
但是我的序号不安顺序显示

未命名.jpg (86.26 KB )

未命名.jpg

使用特权

评论回复
6
joyme| | 2011-3-7 18:25 | 只看该作者
你的
num++;   
if(num>255)
num=0;
应该放在if(RI==1)条件里执行,TI置位一样会触发中断

使用特权

评论回复
7
zdhlixiang2006| | 2011-3-7 21:45 | 只看该作者
除了要将中断里处理Num的那3行放到接收中断里面之外,主函数里面不要清零num,你那里面清零干什么
除外,你要写为SBUF=num;
                     while(TI==0);
                     TI=0;
                     SBUF=a;
                     while(TI==0);
                     TI=0;
按照这样试试  还有你片子设定的波特率和串口的应该一致  祝你好运!

使用特权

评论回复
8
gongmaomao|  楼主 | 2011-3-9 18:38 | 只看该作者
7# zdhlixiang2006
我的好运来了。我调出来了···

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:不懂理论的开发者永远只能是一个拼装师···

0

主题

107

帖子

1

粉丝