让SBUF接收的数据存到外部RAM定义的数组时发现数组里很多...

2020-02-05 09:03发布

如题,紧急求解。我让SBUF接收的数据存到外部RAM定义的数组时发现数组里很多数接收的不对为什么?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
nydns
1楼-- · 2020-02-06 09:29
eduhf_123 发表于 2012-6-14 11:49
这个不一定的,要看中断服务程序是怎么写的。

如果中断服务程序中是读完SBUF就清空RI标志并退出,那么就 ...

void main(void)
{
InitUART();//初使化串口
while(1)
{
  if(flag==1)//接收到的数据发到电脑PC串口上.
  {
   ES=0;//串口中断 关了
   flag=0;//标位清0
   SendOneByte(a);//把接收到的数据发送到PC机串口上
   ES=1;//串口中断 手动打开
   
  }
}
}

void UARTInterrupt(void) interrupt 4 //串口中断号为4
{
    if(RI)
    {
         t[j]=SBUF;
         //a=t[j];//反回PC串口
         j++;
         if(j >= 64)j=0;   
        RI = 0;        //手动清0 退出
         flag=1;//标质位等于1,说明接收到数据
   }
    else
        TI = 0;
}
我的代码
那我想产生一次中断接收所有数据.应该如何写呢...
eduhf_123
2楼-- · 2020-02-06 13:43
本帖最后由 eduhf_123 于 2012-6-14 19:49 编辑
nydns 发表于 2012-6-14 13:24
void main(void)
{
InitUART();//初使化串口
while(1)
{
  if(flag==1)//接收到的数据发到电脑PC串口上.
  {
   ES=0;//串口中断 关了
   flag=0;//标位清0
   SendOneByte(a);//把接收到的数据发送到PC机串口上
   ES=1;//串口中断 手动打开
   
  }
}
}void UARTInterrupt(void) interrupt 4 //串口中断号为4
{
    if(RI)
    {
         t[j]=SBUF;
         //a=t[j];//反回PC串口
         j++;
         if(j >= 64)j=0;   
        RI = 0;        //手动清0 退出
         flag=1;//标质位等于1,说明接收到数据
   }
    else
        TI = 0;
}
我的代码
那我想产生一次中断接收所有数据.应该如何写呢...
  1. {
  2.         if(RI)
  3.         {
  4.                 unsigned char i = 3;
  5.                 do
  6.                 {
  7.                         t[j++]=SBUF;
  8.                         RI = 0;
  9.                         if(j >= 64)
  10.                         {
  11.                                 j=0;   
  12.                         }
  13.                 }while(--i);
  14.                 flag=1;
  15.         }
  16.         else
  17.         {
  18.                 TI = 0;
  19.         }
  20. }
复制代码
nydns
3楼-- · 2020-02-06 16:30
eduhf_123 发表于 2012-6-14 19:47

while(--i);
这个是 循环3次吧.
我试了一下 一个字节被输出了3次啊.

SBUF长度不固定呢.

eduhf_123
4楼-- · 2020-02-06 20:54
 精彩回答 2  元偷偷看……
nydns
5楼-- · 2020-02-06 21:21
eduhf_123 发表于 2012-6-14 11:49
这个不一定的,要看中断服务程序是怎么写的。

如果中断服务程序中是读完SBUF就清空RI标志并退出,那么就 ...

buf[j++]=SBUF;
PC串口发送A,1,22(字符型)

buf[0]为A
buf[1]为,(豆号)
buf[2]为1
buf[3]为,(豆号)
buf[4]为2
buf[5]为2
现在接收了6个字节的数据在buf[]数组中.但这不是我要的数组
我要的是
buf[0]为A
buf[1]为1
buf[2]为22
应该如何处理好呢?
这个代码咋写啊

一周热门 更多>