打印

用C8051F580做串口通信,SBUF接收的数据一直是0X00,希望各位大神帮忙看下程序

[复制链接]
1264|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhm0620|  楼主 | 2017-12-6 11:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
VOID uart1_init()  
{
           UINT8 SFRPAGE_save = SFRPAGE;
           SFRPAGE = ACTIVE2_PAGE;
        SCON1 = 0x10;                      // SCON1: 8-bit variable bit rate
                                       //        level of STOP bit is ignored
                                       //        RX enabled
                                       //        ninth bits are zeros
                                       //        clear RI1 and TI1 bits
        P3 &= 0xDF;       
   if (SYSCLK / BAUDRATE / 2 / 256 < 1)
   {
      TH1 = -(SYSCLK / BAUDRATE / 2);
      CKCON &= ~0x0B;                  // T1M = 1; SCA1:0 = 11
      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
//   TI1 = 1;                            // Indicate TX1 ready (SCON1)
//        EA = 1;
   EIE2 |= 0x08;

        SFRPAGE = SFRPAGE_save;       
}
INTERRUPT(UART1_ISR, INTERRUPT_UART1)
{
//       
//        EIE2 &= 0x00;
        if((SCON1 & 0x01)==0x01)   //如果接收中断标志RI1=1
        {
//                SCON1  &= ~0x01;  /*清接收标志位*/

                P3 &= 0xDF;                          //P3.5=0,低--接收
                  
                S_Uart1_Buffer[S_Uart1_Rx] = SBUF1&0xff;

                if( S_Uart1_Buffer[0] == 0x01)
                {
                        S_Uart1_Rx = S_Uart1_Rx+1;
                }
                else
                {
                        S_Uart1_Rx = 0;
                }
                if(S_Uart1_Rx == 8)     
                {   
                     
                        S_Uart1_Sta = 1; //
                       
                }       
        }
        SCON1  &= ~0x01;
//        SCON1  &= ~0x02;  
//        EIE2 |= 0x08;                 /*清发送标志位*/  
}
VOID c8051_port_init(VOID)
{
        UINT8 SFRPAGE_save = SFRPAGE;
           SFRPAGE = CONFIG_PAGE;

        P0MDIN    = 0xF2;
    P1MDIN    = 0xF9;
    P2MDIN    = 0xFC;
    P0MDOUT   = 0xF2;
    P1MDOUT   = 0xC9;
    P2MDOUT   = 0xF8;
    P3MDOUT   = 0xDF;
    P0SKIP    = 0xFF;
    P1SKIP    = 0xFF;
    P2SKIP    = 0xF3;
    XBR2      = 0x42;


           SFRPAGE = SFRPAGE_save;
}

相关帖子

沙发
menfiss| | 2017-12-6 11:58 | 只看该作者
这货有看门狗,默认打开。新手容易犯的错误是没关闭看门狗,所以一直重启

使用特权

评论回复
板凳
ningling_21| | 2017-12-6 14:16 | 只看该作者
注意交叉开关的配置

使用特权

评论回复
地板
zhm0620|  楼主 | 2017-12-6 14:43 | 只看该作者
menfiss 发表于 2017-12-6 11:58
这货有看门狗,默认打开。新手容易犯的错误是没关闭看门狗,所以一直重启 ...

嗯嗯,关闭了

使用特权

评论回复
5
zhm0620|  楼主 | 2017-12-6 14:44 | 只看该作者
ningling_21 发表于 2017-12-6 14:16
注意交叉开关的配置

P0MDIN    = 0xF2;
    P1MDIN    = 0xF9;
    P2MDIN    = 0xFC;
    P0MDOUT   = 0xF2;
    P1MDOUT   = 0xC9;
    P2MDOUT   = 0xF8;
    P3MDOUT   = 0xDF;
    P0SKIP    = 0xFF;
    P1SKIP    = 0xFF;
    P2SKIP    = 0xF3;
    XBR2      = 0x42;
我这样配置对吗?

使用特权

评论回复
6
ningling_21| | 2017-12-6 14:49 | 只看该作者
zhm0620 发表于 2017-12-6 14:44
P0MDIN    = 0xF2;
    P1MDIN    = 0xF9;
    P2MDIN    = 0xFC;

我没有这芯片的资料,可以对照资料检查一下程序

使用特权

评论回复
7
menfiss| | 2017-12-7 21:19 | 只看该作者
交叉开关和端口配置好像有问题,P0SKIP    = 0xFF;把串口都跳过去了,应该不行。
silicon有个配置工具你没用过吧?

使用特权

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

本版积分规则

1

主题

3

帖子

0

粉丝