打印

帮忙看一下该串口程序

[复制链接]
1956|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
juanyong|  楼主 | 2008-4-9 11:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  #include <reg52.h>

    unsigned char idata count_R; 
    unsigned char idata count_T;
    unsigned char idata TRANS_buffer[8];
    
void main()
{
    

  TMOD = 0x20;                                     
    TH1=0xfd;
    TL1=0xfd;                //设置定时器1 工作方式2; 
    TR1=1;                   //启动定时器1;           
                                                       
    SCON=0x50;               //串口方式1              
    ET1=0;                   //禁止T1中断                                                                       
    ES=1;  
    EA=1;                    //开中断  
    count_R=0; 
    count_T=0;
    while(1);
}


void communication_AURT (void) interrupt 4 //串口中断
{
    
    if(TI)
    {
       TI=0;
       if(count_T>=8) count_T=1;
           else
               {
               SBUF=TRANS_buffer[count_T];
               count_T++;   
            }
      }
      
    if(RI)
        {
              RI=0;
                TRANS_buffer[count_R]=SBUF;
                count_R++;
                if(count_R>=8)                //接收完8个字节后,回送
                    {
                        count_R=0;
                        count_T=1;
                        SBUF=TRANS_buffer[0];                        
                        }
          }
        }


/**************************************************************/
51串口程序
该程序在单独运行时,没有发现问题。
但是放在我的主程序里面,接收的数据总是顺序错乱。
主程序里面有一个T0中断,已经屏蔽,串口为高优先级。
请高手帮忙分析一下

相关帖子

沙发
juanyong|  楼主 | 2008-4-9 11:45 | 只看该作者

附图

发送数据为:00 11 22 33 44 55 66 77
/***************单独运行时的数据*****************/

00 11 22 33 44 55 66 77
00 11 22 33 44 55 66 77 
00 11 22 33 44 55 66 77 
00 11 22 33 44 55 66 77 
00 11 22 33 44 55 66 77 
00 11 22 33 44 55 66 77 
00 11 22 33 44 55 66 77 

/****************单独运行时的数据******************/



/****************在主程序中运行时的数据******************/

11 22 33 44 55 66 77 00 
11 22 33 55 66 77 77 00 
11 22 33 55 66 77 00 11 
22 33 44 55 66 77 00 11 
33 44 55 66 00 11 22 33 
44 55 66 77 00 11 22 33 
55 66 00 11 22 33 44 55 
66 77 00 44 55 66 00 11 
22 33 44 55 66 77 00 11 
55 00 11 22 33 44 55 66 
77 00 22 33 55 66 77 00 
11 22 33 44 55 66 77 00 
11 22 33 44 55 66 77 00 
11 44 55 00 11 22 33 44 
55 66 77 00 11 22 66 77 
00 11 22 33 44 55 66 77 
00 33 44 55 00 11 22 33 
44 55 66 77 22 22 33 44 
/****************在主程序中运行时的数据******************/




使用特权

评论回复
板凳
juanyong|  楼主 | 2008-4-9 13:13 | 只看该作者

谢谢

我的终端是被动的, 没有接收到任何命令是不进行发送的,我是想接收到命令处理后再发送,TI由接收中断处理完以后由SBUF=TRANS_buffer[0];语句引发。

使用特权

评论回复
地板
juanyong|  楼主 | 2008-4-9 15:08 | 只看该作者

问题找到了

问题找到了,我在读模拟量的时候,把中断给关了,造成数据的丢失。
谢谢3楼

使用特权

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

本版积分规则

11

主题

34

帖子

1

粉丝