找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2350|回复: 0
收起左侧

串口总是丢失一部分的数据怎么破输入的123456789时当多次输入就会出现少一两个数字...

[复制链接]
ID:114742 发表于 2016-5-7 21:02 | 显示全部楼层 |阅读模式
  1. /**********************TF-51实验开发板例程************************
  2. *  平台:TF-51开发板 + Keil V4 + STC89C52RC单片机
  3. *  功能:串口初始化和收发测试程序,接收使用中断。
  4. *  晶振:11.0592MHZ
  5. *  设计:天府电子
  6. ******************************************************************/
  7. #include <reg52.h>
  8. unsigned char string[]={" uart test for TF-51 board\r\n"}; //要发送的字符串

  9. void send_string(unsigned char str[]) ;           //函数申明

  10. void  main(void)
  11. {
  12.                 SCON = 0x50;           //串口方式1,允许接收
  13.                 TMOD = 0x20;           //定时器1定时方式2,初值自动重装
  14.                  TH1  = 0xfd;      //波特率9600bps  @ 11,0592M
  15.                   TL1  = 0xfd;
  16.                 TR1  = 1;                     //启动定时器
  17.         IE   =0X90 ;          //使能总中断和UART中断 10010000
  18. //             EA=1;
  19. //                ES=1;
  20.                 TI=0;                           //清TI
  21.                 SBUF='A';                   //发送一个字符A
  22.                 while(!TI);                  //查询字符A是否已经发送完,TI=0时没有发送完,发送完后TI将自动被置1

  23.                 TI=0;                           //清TI
  24.                 SBUF=0X30;                  //发送一个数字0x30
  25.                 while(!TI);                  //查询数字0x30是否已经发送完,TI=0时没有发送完,发送完后TI将自动被置1

  26.                 send_string(string);    //发送字符串

  27.                 while(1)
  28.                 {
  29.                 }              
  30.                
  31. }

  32. void uart() interrupt 4
  33. {
  34.            unsigned char dat;
  35.            if(RI)
  36.           {
  37.                    dat = SBUF;            //接收到的数据暂存在dat中
  38.                    SBUF = dat+1;                //接收到的数据发送给PC机
  39.                   while(TI==0) ;        //等待发送完成,发送使用的查询方式
  40.                    TI = 0;                        //清除发送结束标志
  41.                   RI = 0;                        //清除接收中断标志
  42.           }
  43. }

  44. void send_string(unsigned char str[])
  45. {
  46.     unsigned char i;
  47.         for(i=0;str[i]!='\0';i++)        //若数组str没有结束,则继续发送直到遇到'\0'
  48.          {
  49.                  SBUF = str[i];                         //发送字符
  50.                 while(!TI);                         //空语句判断字符是否发完 (等价while(TI==0); )
  51.                 TI=0;                                         //清TI                        
  52.           }


  53. }


复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表