打印

51串口通信的问题

[复制链接]
3136|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

不懂不要乱说

使用特权

评论回复
5
xm1187201357| | 2011-8-28 16:30 | 只看该作者
delay(150);   //调用延时程序
延时时间太长了

使用特权

评论回复
6
6091820503|  楼主 | 2011-8-29 18:10 | 只看该作者
的确是ACSII码的问题,改完之后就解决了~谢谢大侠了

使用特权

评论回复
7
xiangyi0801| | 2013-1-18 14:03 | 只看该作者
学到了!

使用特权

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

本版积分规则

0

主题

91

帖子

1

粉丝