[技术问答] 关于ML51的串口中断的问题

[复制链接]
926|12
 楼主| 新塘初级用户 发表于 2020-8-1 10:44 | 显示全部楼层 |阅读模式
本帖最后由 新塘初级用户 于 2020-8-1 10:57 编辑

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

ML51uart0BC26.zip

410.57 KB, 下载次数: 2

huangcunxiake 发表于 2020-8-2 15:47 | 显示全部楼层
不知道啊,我看看去。
huangcunxiake 发表于 2020-8-2 16:23 | 显示全部楼层
刚才试了一下,一次中断进入一次。
huangcunxiake 发表于 2020-8-2 16:26 | 显示全部楼层
是接收一个字符中断一次。

评论

那就奇怪了,我这里是发一串中断一次?  发表于 2020-8-3 10:03
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
xuanhuanzi 发表于 2020-8-4 20:59 | 显示全部楼层
有人发了个贴,只有在中断的判断函数里才执行。。好奇怪。

评论

是的,帖子是我发的  发表于 2020-8-7 09:14
yiyigirl2014 发表于 2020-8-4 22:30 | 显示全部楼层
不太明白这种情况。

评论

没办法解决,只好换个思路  发表于 2020-8-7 09:15
 楼主| 新塘初级用户 发表于 2020-8-7 09:13 | 显示全部楼层
之前忘了说了,我没有解决这个问题,直接在加了一个中断接收标志,再在发指令的时候等待这个中断标志响应,才判断接收

评论

while(1) { receiveFLAG=0; break; }  发表于 2020-8-7 09:16
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

36

帖子

0

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