51串口通信的问题

[复制链接]
4136|6
 楼主| 6091820503 发表于 2011-8-26 16:30 | 显示全部楼层 |阅读模式
我写了一个串口通信的程序,里面有数码管显示数字和串口收发程序,其中数码管显示逐个数字测试过,都没问题,串口收发在串口调试助手上接收到单片机回发的数字是对的,但是:::我把该数字在单片机数码管上显示出来确是错的~~是我十分费解啊~~各位高手帮帮忙啊,程序如下
#include <REG52.H>
#include <intrins.h>
#define  NOP() _nop_()  /* 定义空指令 */

void delay(unsigned int i);      //函数声名
void display(unsigned int i);

// 此表为 LED 的字模         
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};

sbit BEEP = P1^4;
bit Flag;
unsigned int ReData,SenData;
//void delay(void);

void main (void) {
   
     P2 = 2 ;
        SCON = 0x50;      //REN=1允许串行接受状态,串口工作模式1               
     TMOD = 0x20;      //定时器工作方式2                    
  PCON = 0x80;                                                         
  //TH1  = 0xFD;     //baud*2  /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
  TH1 = 0xF3;     // //baud*2  /*  波特率4800、数据位8、停止位1。效验位无 (12M)
     TL1 = 0xF3;         
  TR1  = 1;                                                            
  ES   = 1;        //开串口中断                  
  EA   = 1;        // 开总中断
  BEEP=1;
    // IE = 0x0;
   
while(1)
    {

   if (Flag==1)
   {
      SBUF=SenData;              //SUBF接受/发送缓冲器
     while(TI==0);
         TI=0;
   Flag=0;
   }
   display(SenData);
}

}
/****************************************************
               串口中断程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{

if(RI == 1)        //RI接受中断标志
{
  RI = 0;      //清除RI接受中断标志
ReData = SBUF;  //SUBF接受/发送缓冲器
SenData=ReData;
  display(SenData);
  Flag=1;
   
}
}
void display(unsigned char i){
unsigned int LedNumVal=1 ,C ;  //定义变量
unsigned int j = 10;
   
  while(j--)
  {  
     
    // 将字模送到P0口显示  
  P0 = LED7Code[i%10]&0x7f;     //LED7 0x7f为小数点 共阴和共阳此处也是不一样;
   
        
  delay(150);   //调用延时程序
  
  }   

}
ayb_ice 发表于 2011-8-26 16:47 | 显示全部楼层
void ser_int (void) interrupt 4 // using 1
joyme 发表于 2011-8-27 09:19 | 显示全部楼层
串口发送接收的是ASCII码吧,display(SenData); 改为display(SenData-0x30);
ayb_ice 发表于 2011-8-27 09:23 | 显示全部楼层
串口发送接收的是ASCII码吧,display(SenData); 改为display(SenData-0x30);
joyme 发表于 2011-8-27 09:19

不懂不要乱说
xm1187201357 发表于 2011-8-28 16:30 | 显示全部楼层
delay(150);   //调用延时程序
延时时间太长了
 楼主| 6091820503 发表于 2011-8-29 18:10 | 显示全部楼层
的确是ACSII码的问题,改完之后就解决了~谢谢大侠了
xiangyi0801 发表于 2013-1-18 14:03 | 显示全部楼层
学到了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

91

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部