微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 串口通信 向51单片机发送16bit数据 但不知道错哪,请指点下

串口通信 向51单片机发送16bit数据 但不知道错哪,请指点下

时间:10-02 整理:3721RD 点击:
#include <REG52.H>
#include <stdio.h>
sbit BEEP = P1^4;
unsigned char b,i,a[2],flag;
unsigned long int redate, sendate;
void uart_init(void)
{
      SCON = 0x50;      //REN=1允许串行接受状态,串口工作模式1               
    TMOD|= 0x20;      //定时器工作方式2                    
  PCON|= 0x80;                                                         
  //TH1  = 0xFD;     //baud*2  /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
  TH1 = 0xFA;  // //baud*2  /*  波特率9600、数据位8、停止位1。效验位无 (12M)
     TL1 = 0xFA;         
     
  TR1  = 1;                                                            
  ES   = 1;        //开串口中断                  
  EA   = 1;        // 开总中断
      // IE = 0x0;
}
/********串口发送数据中断******************/
void ser(char c)
{
SBUF=c;
while(!TI);
TI=0;
}
void delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--)
  for(j = 110; j > 0; j--) ;
}
/****************************************************
               串口中断程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{

if(RI == 1)        //RI接受中断标志
{
  
   for(i=0;i<2;i++)
{
    RI = 0;      //清除RI接受中断标志
    a[i] = SBUF;
     P1=~a[i];
     delay(1000);
     ser(a[i]);
      redate=(a[0]<<8)+a[1];
    //RI = 0;      //清除RI接受中断标志
    }  //SUBF接受/发送缓冲器

   /*  for(i=2;i>0;i--)
     {  
       //ser(a[i]);
      a[i]=0;
  }*/
  flag=1;
   
}
}

void main (void)
{
   uart_init();

   
while(1)
    {
   
   switch(redate)
   {
    case 0x0100:  P1=0x01;break;
    case 0x0200:  P1=0x03;break;
    case 0x0300:  P1=0x07;break;
    case 0x0400:  P1=0x0f;break;
            case 0x0101:  P1=0xff; break;
            case 0x0203:  P1=0x88;break;
            case 0x0fe1 :   P1=0xaa;break;
   }
   
  
}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top