[MCU] 请问RI置1串口还能接收数据吗

[复制链接]
1582|10
 楼主| 入门小生 发表于 2016-1-19 08:19 来自手机 | 显示全部楼层 |阅读模式
我写了个串口程序 单字节发送还能实现。但是一次发多字节就不行了
ningling_21 发表于 2016-1-19 08:27 | 显示全部楼层
明显程序有问题
NE5532 发表于 2016-1-19 10:10 | 显示全部楼层
肯定是程序问题啊。
 楼主| 入门小生 发表于 2016-1-19 11:49 来自手机 | 显示全部楼层
程序找半天没发现问题
 楼主| 入门小生 发表于 2016-1-19 13:36 | 显示全部楼层
void UART0_Interrupt (void) interrupt 4
{
        if (RI0 == 1)
        {       
                str1 = str0;
                str0 = SBUF0;
                if ((str0 == 0x09) && (str1 == 0x7e) && (biao == 0))                        //帧头判断
                {
                        str_IN[0] = str1;
                        str_IN[1] = str0;
                        biao = 1;
                        str_L = 1;
                }
                if (biao == 1) //&& (str_L < 7))
                {
                        str_IN[str_L] = str0;
                        str_L++;
                }
                if ((biao == 1)  && (str_L >= 6) && (str_IN[str_L-1] == 0x7e))        //接收结束完毕
                {
                        str_IN[str_L] = str0;
                        biao = 0;
                        str_L = 0;

                        TX_Ready = 1;//接收完毕标志位

                }
                if((biao == 1) && (str_L > 7))
                {
                        biao = 0;
                        str_L = 0;
                }
                RI0 = 0;                //接收中断标志位
        }
        TI0=0;
}
 楼主| 入门小生 发表于 2016-1-19 13:37 | 显示全部楼层
void PORT_Init (void)
{
   P0MDOUT |= 0x10;                    // Enable UTX as push-pull output
   XBR0    = 0x01;                     // Enable UART on P0.4(TX) and P0.5(RX)
   XBR1    = 0x40;                     // Enable crossbar and weak pull-ups
}
void Oscillator_Init (void)
{
   OSCICN = 0x83;                      // Set the internal oscillator to
                                       // 24.5 MHz
}

void UART0_Init (void)
{
   SCON0 = 0x10;                       // SCON0: 8-bit variable bit rate
                                       //        level of STOP bit is ignored
                                       //        RX enabled
                                       //        ninth bits are zeros
                                       //        clear RI0 and TI0 bits
   if (SYSCLK/BAUDRATE/2/256 < 1)
   {
      TH1 = -(SYSCLK/BAUDRATE/2);
      CKCON &= ~0x0B;                  // T1M = 1; SCA1:0 = xx
      CKCON |=  0x08;
   }
   else if (SYSCLK/BAUDRATE/2/256 < 4)
   {
      TH1 = -(SYSCLK/BAUDRATE/2/4);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01
      CKCON |=  0x01;
   }
   else if (SYSCLK/BAUDRATE/2/256 < 12)
   {
      TH1 = -(SYSCLK/BAUDRATE/2/12);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
   }
   else
   {
      TH1 = -(SYSCLK/BAUDRATE/2/48);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
      CKCON |=  0x02;
   }

   TL1 = TH1;                          // init Timer1
   TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
   TMOD |=  0x20;
   TR1 = 1;                            // START Timer1
   TX_Ready = 0;                      // Flag showing that UART can transmit
   IP |= 0x10;                         // Make UART high priority
   ES0 = 1;                            // Enable UART0 interrupts
}
ningling_21 发表于 2016-1-19 14:57 | 显示全部楼层
入门小生 发表于 2016-1-19 13:37
void PORT_Init (void)
{
   P0MDOUT |= 0x10;                    // Enable UTX as push-pull output

你进入调试模式运行程序,看看问题在哪里
 楼主| 入门小生 发表于 2016-1-19 15:16 来自手机 | 显示全部楼层
主程序错了
 楼主| 入门小生 发表于 2016-1-19 15:19 来自手机 | 显示全部楼层
我之前在主程序里加了个falsh存储程序。每次进入就会关中断。  循环一次关一次..后面的就进入不了了
 楼主| 入门小生 发表于 2016-1-19 15:19 来自手机 | 显示全部楼层
我之前在主程序里加了个falsh存储程序。每次进入就会关中断。  循环一次关一次..后面的就进入不了了
李不走寻常路 发表于 2016-1-20 09:19 | 显示全部楼层
这不是接收数据的程序吗,你提的问题不是发送数据吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

30

帖子

1

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