打印

新手问题:不同指令周期mcu通信疑问

[复制链接]
1643|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zzaqtf|  楼主 | 2007-10-23 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果我用2个11.0592mhz的mcu,1个6分频,1个12分频。
6分频执行
for(i = 0;i<1000;i++)
{
TI = 0;
SBUF = 0x01;
while(!TI);
TI = 0;
}

12分频执行
for(i = 0;i<1000;i++)
{
RI = 0;
while(!RI);
buf=SBUF;
RI = 0;
}

这样可以正确接收吗?是否需要在指令较快的发送段2字节之间加入空指令周期.

相关帖子

沙发
xwj| | 2007-10-23 11:43 | 只看该作者

首先保证波特率一直,然后留点间隙作为处理时间,

就可以自己同步了


LZ还没入门哦,加油学习吧

使用特权

评论回复
板凳
zzaqtf|  楼主 | 2007-10-23 12:12 | 只看该作者

我主要不搞这个但是偶尔会用到~~了解不多

波特率肯定设置的一样,我只是怀疑指令周期不同会造成什么影响。
慢速机中断响应接收第1个字节的时候,快速机可能已经发出2个字节了;
慢速机中断响应接收第2个字节的时候,快速机可能已经发出4个字节了……
这样只有双字节缓冲的串口怎么处理呢?

实际情况(30字节连续发),貌似没影响通信正确,自己没想通,所以来问问~~~~~~~~~~~~~~

自己留间隙好麻烦,那不是降低字符串的传输速度了么,对时序要求严格和周期要求短的程序感觉不好处理

使用特权

评论回复
地板
chunyang| | 2007-10-23 13:46 | 只看该作者

只要波特率设置正确就不会有问题

任何带串口的MCU,不论速度快慢,都有串口速率的极限,而内核速度与这个极限的串行帧速率相比则要快的多,只要这时不进行复杂的处理、运算,是不会有任何问题的。楼主自己计算并比较一下指令周期和串行帧周期吧,一切证据说话,不要想当然。

使用特权

评论回复
5
zzaqtf|  楼主 | 2007-10-23 23:07 | 只看该作者

请斑竹再解释各简单问题吧,没人讨论好闷头啊

那置标志位的串口中断程序怎么解释。简单举例问下..
如果在function1函数中响应中断,经过function2后才开始接受,这段时间用9600bps能发50-60字节吧。为什么很多例题或者说驱动程序,都这样搞。(我是直接在串口中断内接受的。。)难道中断跳出来自动优先寻找所置位的位变量?
main()
{ init();
  EA = 1;ES = 1;
while(1)
{
  function1(); //大概2ms
  function2(); //大概50ms
 if(flag)
  { ES = 0;
    recv();   /收若干字节
    ES = 1;
  }
 }
}

void abc() interrupt 4
{
  if(RI)
  {RI = 0;flag = 1;}
  if(TI)
  {TI = 0;}
}

使用特权

评论回复
6
xwj| | 2007-10-23 23:18 | 只看该作者

你5楼的程序结构是错误的,没法连续接收

把串口程序写成这样的可以说根本没入门,
如果哪本书上有这样的例程,那么,扔了它!!!

使用特权

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

本版积分规则

5

主题

20

帖子

1

粉丝