打印

串口通信问题

[复制链接]
977|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yybj|  楼主 | 2013-9-25 14:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
设计了一个发送五位字符的程序,通信时串口调试助手向单片机发送五个字符例如“12345”单片机第一次接收并回显到调试助手时只有前四位“1234”只有在第二次发送后才能收到第五位例如再次发送“12345”会收到“51234”以后每次收到的第一位都是上一次发送的最后一位,这是为什么,波特率4800.
#include<reg52.h>
sbit LED0=P0^0;
int i=4,j,flag=0;
unsigned int T=0,temp=1,start=0;
unsigned char buf,d[5];
void init();               
void main()
{
    unsigned char a,b;
    unsigned int c;
    TMOD=0x20;//设定定时器1为工作方式2,8位自装填
    TH1=0xf3;
    TL1=0xf3;//4800
    REN=1;
    SM0=0;
    SM1=1;//10位异步收发波特率计算公式波特率=(2^SMOD/32)*(T1溢出率)
    EA=1;
    ES=1;
    TR1=1;
    while(1)
    {
        if(start==1)
        {
                ES=0;
                SBUF=d[0];
                while(!TI);
                TI=0;
                SBUF=d[1];
                while(!TI);
                TI=0;
                SBUF=d[2];
                while(!TI);
                TI=0;
                SBUF=d[3];
                while(!TI);
                TI=0;
                SBUF=d[4];
                while(!TI);
                TI=0;
                ES=1;
        for(c=T;c>0;c--)//T为脉冲个数
           {
            for(b=12;b>0;b--)
                for(a=248;a>0;a--);
            LED0=1;  //延时一个机器周期
                for(b=12;b>0;b--)
                for(a=248;a>0;a--);
            LED0=0;  //延时一个机器周期
        }
        start=0;
        T=0;   
        }
    }
}
void UART(void) interrupt 4
{
            buf=SBUF;
            for(j=0;j<i;j++)
                temp=temp*10;
            T=T+((buf-48)*temp);
            d[4-i]=buf;
            i--;
            temp=1;
            if(i==-1)
            {
            i=4;
            start=1;
            }
            RI = 0;
}

相关帖子

沙发
秋天落叶| | 2013-9-25 15:07 | 只看该作者
代码的问题,缓冲区是怎么处理的,仔细看看。

使用特权

评论回复
板凳
hsbjb| | 2013-9-25 15:32 | 只看该作者
数据时对的,但是显示的不对,应该不是缓冲区没清的问题。
看了下你void UART(void) interrupt 4这个函数。
第一次就少了一个数据,应该就是这里的处理错了
条件不对。

使用特权

评论回复
地板
火箭球迷| | 2013-9-25 15:36 | 只看该作者
void UART(void) interrupt 4 {   
buf=SBUF;            
for(j=0;j<i;j++)
i=4;
j=0,1,2,3,?      
是不是少了呢?

使用特权

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

本版积分规则

175

主题

2496

帖子

1

粉丝