单片机学习小组
直播中

小峰

12年用户 927经验值
私信 关注

N76E003串口接收字符串的代码该怎么写?

想要通过串口调试助手发送一串数据给单片机,但是不知道怎么写程序,只会写接收一个字符的

只找到了发字符串代码
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2017 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technoledge Corp.
//  Website: http://www.nuvoton.com
//  E-Mail :
//  Date   : Apr/21/2017
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: N76E003 UART-0 Mode1 demo code
//***********************************************************************************************************
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"

/******************************************************************************
* FUNCTION_PURPOSE: Serial interrupt, echo received data.
* FUNCTION_INPUTS : P0.7(RXD) serial input
* FUNCTION_OUTPUTS: P0.6(TXD) serial output
* Following setting in Common.c
******************************************************************************/
#if 0
//void InitialUART0_Timer1(UINT32 u32Baudrate)    //T1M = 1, SMOD = 1
//{
//                P06_Quasi_Mode;               
//                P07_Quasi_Mode;
//        
//    SCON = 0x52;     //UART0 Mode1,REN=1,TI=1
//    TMOD |= 0x20;    //Timer1 Mode1
//   
//    set_SMOD;        //UART0 Double Rate Enable
//    set_T1M;
//    clr_BRCK;        //Serial port 0 baud rate clock source = Timer1

//
//#ifdef FOSC_160000
//    TH1 = 256 - (1000000/u32Baudrate+1);               /*16 MHz */
//#endif            
//    set_TR1;
//}
////---------------------------------------------------------------
//void InitialUART0_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
//{
//                P06_Quasi_Mode;
//                P07_Quasi_Mode;        
//        
//    SCON = 0x52;     //UART0 Mode1,REN=1,TI=1
//    set_SMOD;        //UART0 Double Rate Enable
//    T3CON &= 0xF8;   //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1)
//    set_BRCK;        //UART0 baud rate clock source = Timer3

//#ifdef FOSC_160000
//        RH3    = HIBYTE(65536 - (1000000/u32Baudrate)-1);                  /*16 MHz */
//  RL3    = LOBYTE(65536 - (1000000/u32Baudrate)-1);                        /*16 MHz */
//#endif
//    set_TR3;         //Trigger Timer3
//}
#endif

/*******************************************************************************
* FUNCTION_PURPOSE: Main function
******************************************************************************/
void main (void)
{

#if 0        
    InitialUART0_Timer1(9600);           //UART0 Baudrate initial,T1M=0,SMOD=0
    while(1)
    Send_Data_To_UART0(0x55);
#else
                InitialUART0_Timer3(115200);
    while(1)
    Send_Data_To_UART0(0x55);
#endif
                        
        
               
}
  



回帖(1)

杨福林

2024-4-24 17:49:21
sp;<适合N76E003的代码>
* 功能说明:N76E003串口接收字符串的代码
* 作者:MindChirp
* 最后更新时间:2020-07-20
-----------------------------------------------------------------------------------------------------------*/
#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "Common.h"
#include "Delay.h"

#define RX_BUF_LEN 32
unsigned char rx_buf[RX_BUF_LEN];
unsigned char rx_idx = 0;
bit rx_complete = 0;

void UART_ISR() interrupt 4 using 1
{
    if (RI)
    {
        RI = 0;
        rx_buf[rx_idx++] = SBUF; // 把收到的数据存到接收缓冲区
        if (rx_idx >= RX_BUF_LEN) // 接收缓冲区满了
        {
            rx_idx = 0;
        }
        if (rx_buf[rx_idx-1] == 'n') // 收到换行符,认为是一条完整的命令
        {
            rx_buf[rx_idx-1] = ''; // 把换行符替换成字符串结束符
            rx_complete = 1; // 收到完整的字符串了,标志位置1
            rx_idx = 0; // 重置接收缓冲区
        }
    }
    if (TI)
    {
        TI = 0;
    }
}

void main()
{
    P06_QUASI_MODE; // 把P0.6设为推挽输出
    P06 = 0; // 把P0.6拉低
    UART_Open(9600); // 串口初始化
    ES = 1; // 使能串口中断
    EA = 1; // 使能全局中断
    while(1)
    {
        if (rx_complete) // 接收到完整的字符串了
        {
            uart_puts("Received String:");
            uart_puts(rx_buf); // 把接收到的字符串通过串口发送回去
            uart_puts("rn");
            rx_complete = 0; // 清除接收完成标志位
        }
    }
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分