打印

关于一个串口自发字收的问题

[复制链接]
2140|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ic666|  楼主 | 2007-3-2 14:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾,谁能帮我看一下这个程序。谢谢了!!!!!!我将RXD和TXD短接,在P1.0口加一个发光二极管,如果发送和接受正确,可观察到二极管一闪一闪发亮,如果断开RXD和TXD,二极管就不会闪烁。可是现在二极管没反映。谢谢各位大哥大姐了。
 #include <reg51.h>
#define  uchar  unsigned char
uchar j,k;
  void delay()
      {
       for(j=0;j<=20;j++)
       for(k=0;k<=248;k++)
         {;;};
      }

  void main()
{
   uchar z;
   TMOD=0x20;
   TL1=0xcc;
   TH1=0xcc;
   TR1=1;
   SCON=0x50;
   while(1)
   {
    TI=0;
    P0=0xff;
    delay();
    z=0xfe;
    SBUF=z;
    while(RI==1);
    RI=0;
    z=SBUF;
    P0=z;
    while(TI==1);
    delay();
   }
 }







相关帖子

沙发
原野之狼| | 2007-3-3 12:25 | 只看该作者

应该是很简单的东西。。。

修改一部分:

 while(1)
   {
    TI=0;
    P0=0xff;
    delay();
    z=0xfe;
    SBUF=z;
    //while(RI==1);
    while(!TI);
    TI=0;
    while(!RI);
    RI=0;
    z=SBUF;
    P0=z;
    //while(TI==1);
    delay();
   }

使用特权

评论回复
板凳
ic666|  楼主 | 2007-3-5 16:52 | 只看该作者

谢谢2楼了

谢谢2楼这位大哥(姐)了。可还是不行啊,我的变量Z设的是不是有问题啊!我的串口和波特率设置是不是有问题啊。这个问题困扰了我几天了。能不能把整个的这个程序编写一下啊?拜托了。谢谢!!!!!!

使用特权

评论回复
地板
bb文| | 2007-3-5 23:12 | 只看该作者

希望帮到你

下面是我的程序,实现一样的功能,希望能帮到你。如果用在你的单片机上不行的话,要核对下硬件。程序是建立在硬件的基础的。
#include<reg51.h>
main()
{
 unsigned int i;
 TMOD=0x20;TH1=0xcc;TL1=0xcc;
 TR1=1;
 SCON=0x50;
 while(1)
 {
  TI=0;
  P1=0xfe;
  for(i=0;i<10000;i++);
  SBUF=0xff;
  while(RI==0);
  RI=0;
    while(TI==0);
  P1=SBUF;
  for(i=0;i<10000;i++);
  }
}

使用特权

评论回复
5
bb文| | 2007-3-5 23:18 | 只看该作者

对比了一下

对比了一下,程序主要的区别是我的对P1赋值,而你的是对P0口赋值。对P0口赋值,只能传送数据,并没有选通连接P1的发光二极管,所以没反应。

我只是略懂皮毛,说错了希望谅解。

使用特权

评论回复
6
ic666|  楼主 | 2007-3-8 11:07 | 只看该作者

回复

谢谢4楼了!!!!!

使用特权

评论回复
7
小小学者| | 2007-3-10 20:08 | 只看该作者

请教!

  看楼主用delay()延时用得这么精确,请问,这里面程序延时时间是怎么计算的?执行一条语句要用多长时间,与晶镇有关系吗?怎么去计算?

使用特权

评论回复
8
ic666|  楼主 | 2007-3-13 11:45 | 只看该作者

回复7楼

我这个延时是在网上找的,我的理解:具体的计算是把C转换成汇编,然后看执行这些汇编语句需要多少机械周期,晶振越高,机械周期越小,所用时间越短。不知道说的对不对,仅供参考。

使用特权

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

本版积分规则

9

主题

19

帖子

0

粉丝