[牛人杂谈] ML51的串口复合用法

[复制链接]
663|2
 楼主| mintspring 发表于 2020-7-27 17:45 | 显示全部楼层 |阅读模式
经过几位大佬的分享,实现了UART_Send_Data函数与printf函数同时在ML51工程中的使用方法。
  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. #include "ML51.h"

  11. /**
  12. * [url=home.php?mod=space&uid=247401]@brief[/url]       UART0 Transfer and receive with interrupt subroutine.
  13. * @param       None
  14. * [url=home.php?mod=space&uid=266161]@return[/url]      None
  15. * [url=home.php?mod=space&uid=1543424]@Details[/url]     Result stroage in XRAM UIDBuffer[0:8];
  16. */

  17. unsigned char uart_receive_data,bufhead;
  18. bit receiveFlag,bufOverFlag;

  19. unsigned char my[10];
  20. unsigned char i=0;


  21. void Serial_ISR (void) interrupt 4
  22. {
  23.     if (RI)
  24.     {   
  25.         receiveFlag = 1;
  26.         uart_receive_data = SBUF;
  27.         clr_SCON_RI;                                         // Clear RI (Receive Interrupt).
  28.     }
  29.     if (TI)
  30.     {      
  31.         clr_SCON_TI;                                         // Clear TI (Transmit Interrupt).
  32.     }
  33. }


  34. void main (void)
  35. {
  36.     MFP_P46_GPIO;
  37.     P46_PUSHPULL_MODE;
  38. /**
  39. For UART0 P0.5 asTXD output setting
  40. * include uart.c in Common Setting for UART0
  41. */
  42.     MFP_P31_UART0_TXD;                              /* set P3.1 and P3.0 as Quasi mode for UART0 trasnfer */
  43.     MFP_P30_UART0_RXD;
  44.     P31_QUASI_MODE;                                 
  45.     P30_QUASI_MODE;
  46.     UART_Open(24000000,UART0_Timer1,115200);      // Open UART0 use timer1 as baudrate generate and baud rate = 115200
  47.     ENABLE_UART0_PRINTF;
  48. #if 0
  49.     UART_Interrupt_Enable(UART0,Enable);
  50.    
  51.     while(1);   

  52. #else
  53. /**
  54.   UART0 loop test
  55.   UART0 TXD send data received by RXD pin. Connect TXD pin and RXD pin check result.
  56. */  
  57.     do{
  58.       unsigned char temp;
  59.       temp = UART_Receive_Data(UART0);
  60.       UART_Send_Data(UART0,temp);
  61.                        
  62.                         my[i++]=temp;
  63.                         if(i>=10)
  64.                         {
  65.                                 UART_Send_Data(UART0,'a');
  66.                                 for(i=0;i<10;i++)
  67.                                 UART_Send_Data(UART0,my[i]);
  68.                                 for(i=0;i<10;i++)
  69.                                 my[i]=0;
  70.                                 i=0;
  71.                                
  72.                                 ENABLE_UART0_PRINTF;
  73.                                 printf ("bbs.21ic.com" );
  74.                                 DISABLE_UART0_PRINTF;
  75.                         }


  76.                        
  77.     }while(1);
  78. #endif
  79. }





 楼主| mintspring 发表于 2020-7-27 17:46 | 显示全部楼层
真有意思,多谢论坛的各位热心肠朋友。
643757107 发表于 2020-7-27 21:21 | 显示全部楼层
多谢分享经验。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

303

主题

4972

帖子

24

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