打印

AT89S52串口发送字符串,总是丢失第一个字符

[复制链接]
2844|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
moqi816|  楼主 | 2013-5-10 14:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<stdio.h>

unsigned char se_data[8] = {"LOVE"};
unsigned int k = 0 ;

void init_serial_port()//初始化串口,用T1做波特率发生器
{

         TMOD = 0x20;//计数器1工作方式2,自动填充
         PCON = 0X80;//0x80波特率加倍(加倍可以缩小误差)
         PS = 1;
         TH1 = 256-6;
         TL1 = 256-6;
         TR1 = 1;////启动T1,这里溢出信号不仅给中断,也给串口
         REN = 1;
         SCON = 0x50;//串行方式1,允许串行接收
         EA=1;
         ES = 1;//允许串行通信中断
          
}



void USART_Sendchar(unsigned char ch) //发送一个字符
{
        SBUF = ch;
        while(!TI);
        TI = 0;
}


void send_string_com( unsigned char *str, unsigned int strlen)
{        
        //EA = 0;
        ES = 0;
        do
        {
                USART_Sendchar(*(str + k));
                k++;
        }
        while (k < strlen);
    //EA=1;
        ES = 1;
}


extern void delayms(unsigned int ms)   //延时程序
{
        unsigned char i;
        while(ms--)
        {
                for (i=0;i<125;i++);
        }
}


void main()
{
        init_serial_port();
        delayms(10);
        send_string_com(se_data,0x08);
       
        while(1)
        {
        }

}


在串口调试工具收到的是OVE,无论发什么字符串都丢失第一个字符,求教各位,这是怎么回事

相关帖子

沙发
moqi816|  楼主 | 2013-5-10 14:23 | 只看该作者
用16进制显示时发现字符“L”被FF占据了

使用特权

评论回复
板凳
xy382940931| | 2013-5-10 14:40 | 只看该作者
我拿你的程序测试了下,可以输出LOVE,只是去掉PCON = 0X80,然后TH1,TL1=0xfd(9600)

使用特权

评论回复
地板
followme001| | 2013-5-10 15:15 | 只看该作者
你的晶振用多少?波特率算得对不对?

使用特权

评论回复
5
黄向忠| | 2017-3-14 14:08 | 只看该作者
后面怎么解决了?

使用特权

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

本版积分规则

58

主题

350

帖子

2

粉丝