[DemoCode下载] ML51串口中断使用方法

[复制链接]
1677|10
 楼主| 598330983 发表于 2019-9-29 23:32 | 显示全部楼层 |阅读模式
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Website: http://www.nuvoton.com
  8. //  E-Mail : MicroC-8bit@nuvoton.com
  9. //***********************************************************************************************************

  10. //***********************************************************************************************************
  11. //  File Function: ML51 simple GPIO toggle out demo code
  12. //***********************************************************************************************************

  13. #include "ML51.h"
  14. bit uart2rvflag=0;
  15. unsigned char TXtemp=0x30;

  16. void SMC0_ISR(void) interrupt 19          // Vector [url=home.php?mod=space&uid=72445]@[/url]  0x9B
  17. {
  18.    SFRS=0;
  19.    if((SC0IS&SET_BIT0)==SET_BIT0)
  20.    {
  21.       TXtemp = SC0DR;
  22.       clr_SC0IS_RDAIF;
  23.        uart2rvflag = 1;
  24.    }
  25. }

  26. /**
  27. * [url=home.php?mod=space&uid=247401]@brief[/url]       UART2 TXD output demo
  28. * @param       None
  29. * [url=home.php?mod=space&uid=266161]@return[/url]      None
  30. * [url=home.php?mod=space&uid=1543424]@Details[/url]     conned UART2 and UART0 to loop check.
  31. */

  32. void main (void)
  33. {
  34.      MFP_P31_UART0_TXD;
  35.     P31_QUASI_MODE;
  36.     UART_Open(24000000,UART0_Timer1,115200);        /* Open UART0 use timer1 as baudrate generate and baud rate = 115200 */
  37.   
  38.      MFP_P55_UART2_RXD;
  39.     P55_INPUT_MODE;
  40.     UART_Open(24000000,UART2,115200);                /* Open UART2 use timer1 as baudrate generate and baud rate = 115200*/
  41.     UART_Interrupt_Enable(UART2,Enable);
  42.     ENABLE_GLOBAL_INTERRUPT;

  43. /* Connect P5.5 and P3.1 to check loop  from UART0 to UART2*/
  44.     UART_Send_Data(UART0,TXtemp);  
  45.     while(1)
  46.     {
  47.       if (uart2rvflag)
  48.       {
  49.           TXtemp++;
  50.           uart2rvflag=0;
  51.           Timer3_Delay(24000000,4,300,1000);
  52.           UART_Send_Data(UART0,TXtemp);  
  53.       }
  54.     }

  55. }





 楼主| 598330983 发表于 2019-9-29 23:33 | 显示全部楼层
这个例子展示了如何使用串口中断接收数据,如何在主函数读取串口中断接收的数据。
wahahaheihei 发表于 2019-9-30 11:49 | 显示全部楼层
会不会漏掉,比如主函数没处理到呢,就被新的覆盖了。
wahahaheihei 发表于 2019-9-30 11:49 | 显示全部楼层
会不会漏掉,比如主函数没处理到呢,就被新的覆盖了。
yiy 发表于 2019-11-9 17:19 | 显示全部楼层
接收到触发。
xuanhuanzi 发表于 2019-11-10 16:17 | 显示全部楼层
这个操作思路可以。
643757107 发表于 2019-11-11 22:25 | 显示全部楼层
这个方式比扫描的更好吗
tianxj01 发表于 2019-11-12 09:37 | 显示全部楼层
643757107 发表于 2019-11-11 22:25
这个方式比扫描的更好吗

在已知的大多数情况下,中断处理都比查询出色,最关键的就在于资源的占用和实时时效。
对于串口中断,只发生在接受一个完整的数据或者数据发送完成这2个节点。由于采用中断,当级别足够高时候,则会在动作的第一时间相应中断。中断函数只需要在该2节点让程序干涉一下就行,比如及时的处理收到的数据,或者可以发起再一次发送。
如果采用查询,则为了保证不漏掉接受数据,查询密度就得很高,势必大量占用单片机运行时间资源。而对于发送,非中断则一般采用等待,就必须在发出发送指令后,一直等待数据发送完成,中间为了避免出错误,一般什么都别干了。
在这样对比,你觉得那种方式更好很合理呢?
643757107 发表于 2019-11-12 12:42 | 显示全部楼层
tianxj01 发表于 2019-11-12 09:37
在已知的大多数情况下,中断处理都比查询出色,最关键的就在于资源的占用和实时时效。
对于串口中断,只 ...

总结的到位,牛。
monitoring 发表于 2019-11-17 18:20 | 显示全部楼层
一般都是中断接收放BUFF,查询处理帧协议
xixi2017 发表于 2019-11-17 23:50 | 显示全部楼层
楼上说的好像是的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

267

主题

5575

帖子

22

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