打印
[牛人杂谈]

ML51的串口复合用法

[复制链接]
414|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mintspring|  楼主 | 2020-7-27 17:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
经过几位大佬的分享,实现了UART_Send_Data函数与printf函数同时在ML51工程中的使用方法。
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

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

#include "ML51.h"

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

unsigned char uart_receive_data,bufhead;
bit receiveFlag,bufOverFlag;

unsigned char my[10];
unsigned char i=0;


void Serial_ISR (void) interrupt 4
{
    if (RI)
    {   
        receiveFlag = 1;
        uart_receive_data = SBUF;
        clr_SCON_RI;                                         // Clear RI (Receive Interrupt).
    }
    if (TI)
    {      
        clr_SCON_TI;                                         // Clear TI (Transmit Interrupt).
    }
}


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 = 115200
    ENABLE_UART0_PRINTF;
#if 0
    UART_Interrupt_Enable(UART0,Enable);
   
    while(1);   

#else
/**
  UART0 loop test
  UART0 TXD send data received by RXD pin. Connect TXD pin and RXD pin check result.
*/  
    do{
      unsigned char temp;
      temp = UART_Receive_Data(UART0);
      UART_Send_Data(UART0,temp);
                       
                        my[i++]=temp;
                        if(i>=10)
                        {
                                UART_Send_Data(UART0,'a');
                                for(i=0;i<10;i++)
                                UART_Send_Data(UART0,my[i]);
                                for(i=0;i<10;i++)
                                my[i]=0;
                                i=0;
                               
                                ENABLE_UART0_PRINTF;
                                printf ("bbs.21ic.com" );
                                DISABLE_UART0_PRINTF;
                        }


                       
    }while(1);
#endif
}





使用特权

评论回复
沙发
mintspring|  楼主 | 2020-7-27 17:46 | 只看该作者
真有意思,多谢论坛的各位热心肠朋友。

使用特权

评论回复
板凳
643757107| | 2020-7-27 21:21 | 只看该作者
多谢分享经验。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

282

主题

4810

帖子

24

粉丝