串口传输问题

2019-03-24 18:03发布

本帖最后由 helloTZ 于 2015-4-10 15:12 编辑

    串口传送Hello,在电脑的串口助手上只显示了H。而且影响到其他的I/O口的电平。
   串口发送函数sendIRdata2PC()单独拎出来放在switch前面是可以的,但是会影响外部中断。     不知道是什么原因,搞晕了,求解惑>0<
void main(void){        int i=0;       Init_clear();       mode= modeCheck();       while(1)       {            switch(mode)           {              case STUDYMODE:                                      //学习模式初始化              for(i=0;i<IR_CODE_BITS;i++)              {                  IRdata=0;              }              IRtime1=0;IRtime2=0;              part2flag=NOBEGIN;              bit_i=0;
              EA=1;              TMOD=0x02;                //定时器0工作方式8位自动重装              TH0=0X80;                //128us              TL0=0X80;              ET0=1;                                      IT0=1;                        //负跳变触发              EX0=1;
              while(1)              {                     if(IRtime2>MAX || IRtime1>MAX)//认为结束符                     {                            EA=0;                            ET0=0;                             EX0=0;                             TR0=0;                            IRdata[bit_i]=0;                            bit_i++;                            break;                             }              }                sendIRdata2PC();//发送给PC机查看接收到的红外数据              break;
              case REMOTEMODE:              led2=~led2;              sendIRCode();              break;
              default:break;             }         mode= modeCheck();      }}/******************************************************函数名:sendIRdata2PC()功能:把接收到的红外信号发送给串口******************************************************/void sendIRdata2PC(){      uchar i=0;      sendTOPCflag=1;                       SCON = 0x50;                            TMOD|= 0x20;      //定时器1工作方式2                             PCON|= 0x80;      //波特率提高一倍                                          TH1 = 0xF3;                 // //baud*2  /*  波特率4800、数据位8、停止位1。效验位无 (12M)             TL1 = 0xF3;       TR1  = 1;        //开启定时器1                                                            ES   = 1;        //开串口中断                        EA   = 1;        //开总中断       sendMessage("HELLO");      i=0;      if(IRdata!=0)      {         numToStr(IRdata);         sendMessage(MESSAGE);        i++;       sendMessage("  ;  ");      }       EA=0;      TR1=0;       sendTOPCflag=0;                 } 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。