打印
[技术问答]

关于ML51的串口中断的问题

[复制链接]
575|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 新塘初级用户 于 2020-8-1 10:57 编辑

ML51的串口中断是否是一次接收信号就可以进入一次,为什么我这边的程序里面只有一个串口中断,但是要好几次接收,才进入一次中断?

ML51uart0BC26.zip

410.57 KB

使用特权

评论回复
沙发
huangcunxiake| | 2020-8-2 15:47 | 只看该作者
不知道啊,我看看去。

使用特权

评论回复
板凳
huangcunxiake| | 2020-8-2 16:23 | 只看该作者
刚才试了一下,一次中断进入一次。

使用特权

评论回复
地板
huangcunxiake| | 2020-8-2 16:26 | 只看该作者
是接收一个字符中断一次。

使用特权

评论回复
评论
新塘初级用户 2020-8-3 10:03 回复TA
那就奇怪了,我这里是发一串中断一次? 
5
jasontu| | 2020-8-3 08:54 | 只看该作者
RI 裡面嵌一大堆,收一個byte送一個byte就可以了。
不需要調整任何24MHz的精準度比16.588 還好

**********************************************************************************************************

#include "ML51.h"
#include "BC26.h"

/**
* @brief       UART0 Transfer and receive with interrupt subroutine.
* @param       None
* @return      None
* @Details     Result stroage in XRAM UIDBuffer[0:8];
*/

unsigned char uart_receive_data,bufhead;
bit receiveFlag,bufOverFlag;
unsigned        char temp;


void Uart0_Init(void);

void Uart0_SendChar(unsigned char Udat);
void Uart0_SendString(unsigned char *PBuf);





void USART2_IRQHandler()   interrupt 4  
{  
        if (RI)
        {
                 RI=0;
temp=SBUF;
//nbiot_receive_process_event(temp);
//BC26_Init();
                //Uart0_SendString("ATLNSOLNB\n");
        Uart0_SendChar(temp);
        }
if (TI)
    {  
                       
     TI=0;                                         // Clear TI (Transmit Interrupt).
    }
}








void Uart0_SendChar(unsigned char Udat)
{
        DISABLE_UART0_INTERRUPT;
        SBUF=Udat;                //蔚猁楷冞腔杅擂溫揹諳杅擂遣喳
        while(!TI);                //脹渾楷冞俇傖
  TI=0;         //錨TI楷冞俇傖梓暮               
  ENABLE_UART0_INTERRUPT;
}

void Uart0_SendString(unsigned char *PBuf)
{
  while(*PBuf!='\0')            //帤善趼睫揹藺帣
  {
          Uart0_SendChar(*PBuf);//楷冞趼睫
          PBuf++;                                                          //痄雄硌渀
  }
}





void main (void)
{
    MFP_P46_GPIO;
    P46_PUSHPULL_MODE;
/**
For UART0 P0.5 asTXD output setting
* include uart.c in Common Setting for UART0
*/
    MFP_P31_UART0_TXD;                              /* set P3.1 and P3.0 as Quasi mode for UART0 trasnfer */
    MFP_P30_UART0_RXD;
    P31_QUASI_MODE;                                 
    P30_QUASI_MODE;

        UART_Open(24000000,UART0_Timer1,115200);        // Open UART0 use timer1 as baudrate generate and baud rate = 115200en(24000000,UART0_Timer1,115200);        // Open UART0 use timer1 as baudrate generate and baud rate = 115200
  UART_Interrupt_Enable(UART0,Enable);       
        ENABLE_GLOBAL_INTERRUPT;
       
while(1)
                       
                {
                //Uart0_SendString("AT\n");
                 Delay_ms(10000);
                //BC26_Init();
                         Clear_Buffer();
                }   


}



使用特权

评论回复
评论
新塘初级用户 2020-8-3 10:03 回复TA
这个代码我移植进去,串口接收之后发不出任何数据 
6
xuanhuanzi| | 2020-8-4 20:59 | 只看该作者
有人发了个贴,只有在中断的判断函数里才执行。。好奇怪。

使用特权

评论回复
评论
新塘初级用户 2020-8-7 09:14 回复TA
是的,帖子是我发的 
7
yiyigirl2014| | 2020-8-4 22:30 | 只看该作者
不太明白这种情况。

使用特权

评论回复
评论
新塘初级用户 2020-8-7 09:15 回复TA
没办法解决,只好换个思路 
8
新塘初级用户|  楼主 | 2020-8-7 09:13 | 只看该作者
之前忘了说了,我没有解决这个问题,直接在加了一个中断接收标志,再在发指令的时候等待这个中断标志响应,才判断接收

使用特权

评论回复
评论
新塘初级用户 2020-8-7 09:16 回复TA
while(1) { receiveFLAG=0; break; } 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

36

帖子

0

粉丝