导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→急!!!C8051单片机不能进入串口中断[fancyland]

 *第20888篇: 急!!!C8051单片机不能进入串口中断

  
楼 主:fancyland 2011年10月26日15:49
 急!!!C8051单片机不能进入串口中断
各位大侠,我用的C8051单片机串口0 能正常收发,但串口1只能发不能进入接收中断,请各位前辈帮我看看。
void UARTInit(void)
{
 PCON = 0x90;              // SMOD0 = 1禁止波特率/2
                              // PCON.0     IDLE   等待方式选择
         // PCON.1     STOP   停机方式选择
         // PCON.2     保留   必须写入0
         // PCON.3     SSTAT1 UART1增强状态方式选择
         // PCON.4     SMOD1  UART1波特率加倍允许
            // PCON.5     保留   必须写入0
                           // PCON.6     SSTAT0 UART0增强状态方式选择
                           // PCON.7     SMOD0  UART0波特率加倍允许
 SCON0 = 0x52;             //UART0方式1,8位UART,可变波特率,接收允许  
                           // SCON0.0     RI0     接收中断标志
               // SCON0.1     TI0     发送中断标志 
               // SCON0.2     RB80    第九位接送位
               // SCON0.3     TB80    第九位发送位
               // SCON0.4     REN0    接收允许
               // SCON0.5    SM20    多处理器通信允许
                           // SCON0.7-6  SM00:SM01   串口通信方式选择
 ES0 = 1;                  // 允许UART0中断  
 ET2 = 1;      //允许定时2溢出 
 TR2 = 1;                  // 启动定时2
 SCON1 = 0xD2;             //UART1方式3,9位UART,可变波特率,接收允许
                           // SCON1.0     RI1     接收中断标志
               // SCON1.1     TI1     发送中断标志 
               // SCON1.2     RB81    第九位发送位
               // SCON1.3     TB81    第九位发送位
               // SCON1.4     REN1    接收允许
               // SCON1.5    SM21    多处理器通信允许
                           // SCON1.7-6  SM01:SM11   串口通信方式选择
 T4CON |= 0x04;            // 启动定时4
 EIE2 |= 0x44;     // 允许UART1中断,定时器4溢出
              
 IP = 0x00;                // 采用默认中断优先级

}


/*****************************
Function: UART0接收中断
输入参数:无
输出参数:无
/*****************************/
void UART0_ISR() interrupt 4
{
 BYTE recvdata;
 if (RI0)
 {
  RI0=0;  
  recvdata = SBUF0;
  ComRecvTime = 0 ;  
  if (Recv0Len+1>  =RECVBUF0LEN) 
  Recv0Len=0;
  else
  Recv0Buf[Recv0Len++] = recvdata;  
 }
}

/*****************************
Function: UART1接收中断
输入参数:无
输出参数:无
/*****************************/
void UART1_ISR() interrupt 20
{
// BYTE recvdata;
 if ((SCON1 & 0x01) == 0x01)   //接收中断 
 {
  SCON1 &= ~0x01;
  ACC = SBUF1;
  if(SCON1^2 == P) 
  {
   if (Recv1Len+1>  =RECVBUF1LEN) 
   Recv1Len=0;
   else
   Recv1Buf[Recv1Len++] = SBUF1;
     }

 }

}

/*****************************
Function: UART0字节发送函数
输入参数:UART0串口发送数据、数据长度
输出参数:无
/*****************************/
void UART0SendData(BYTE* buf, UINT len)
{
 UINT i=0;
 for (i=0; i  <len; i++)
 {
  while(TI0 == 0);
  TI0 = 0;  
  SBUF0 = buf[i];
 }
 LedOpen();
}
/*****************************
Function: UART0字符串发送函数
输入参数:UART0串口需发送字符串
输出参数:无
/*****************************/
void UART0SendStr(char *str)   
{   
    while(*str != '\0')   
    {   
        UART0SendData(str,1);   
        str++;   
    }   
}   

/*****************************
Function: UART1发送函数
输入参数:UART1串口发送数据、数据长度
输出参数:无
/*****************************/
void UART1SendData(BYTE* buf, UINT len)
{
 UINT i=0;

 for(i = 0;i   < len;i++)
 {
  while((SCON1 & 0x02) == 0x00);    //等待串口前一次数据发送完成
  SCON1 &= ~0x02;  
  ACC = buf[i];
  if(P==1)
  SCON1 |= 0x08;
  else   
  SCON1 &= ~0x08;
        UART1_SEND = 1;          
  SBUF1 = buf[i];
 }
 Delayms(100);
 UART1_SEND = 0;

}


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:[分享]深圳PCB打样,顺易捷PCB打样厂家,24小时PCB打样

[下一篇主题]:深圳单片机培训Cortex-M3培训,实战教学再掀巨浪狂潮[原创]