[技术问答]

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

[复制链接]
765|4
手机看帖
扫描二维码
随时随地手机跟帖
hx87234317|  楼主 | 2019-8-5 17:28 | 显示全部楼层 |阅读模式
想要通过串口调试助手发送一串数据给单片机,但是不知道怎么写程序,只会写接收一个字符的

使用特权

评论回复
eddy2019| | 2019-8-5 18:01 | 显示全部楼层
只找到了发字符串代码
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2017 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technoledge Corp.
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//  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
                        
        
               
}
  

使用特权

评论回复
xixi2017| | 2019-8-5 21:03 | 显示全部楼层
连续接收就行了。当没有收到一个结束符号时候,就一直收。

使用特权

评论回复
xixi2017| | 2019-8-5 21:04 | 显示全部楼层
用指针接收,这样可以不用管每次的数据具体多长。

使用特权

评论回复
jasontu| | 2019-8-6 08:43 | 显示全部楼层
串口初始化
void UART0_ini_115200(void)
{

                SCON = 0x52;     //UART0 Mode1,REN=1,TI=1
                TMOD |= 0x22;    //Timer1 Mode1, TIMER 0 MODE2
                               
                set_SMOD;
                set_T1M;
                clr_BRCK;        //Serial port 0 baud rate clock source = Timer1
                TH1 = 256 - (1000000/115200+1);                                                                                                /*16 MHz to 115200 Baudrate*/\

                set_TR1;                                         //Start timer1
                ES=1;
                EA=1;
}

uart 中斷
void Serial_ISR (void) interrupt 4
{
    if (RI == 1)
    {   
                        uart_rcvbuf[bufhead++]=        SBUF;               
                        clr_RI;                                         // Clear RI (Receive Interrupt).
    }
    if (TI == 1)
    {      
        clr_TI;                                         // Clear TI (Transmit Interrupt).
    }
                if(bufhead ==1)
                {
                        g_timer1Over=0;
                        g_timer1Counter=90; //for check uart timeout using
                }
        if(bufhead == 64)
                {
                       
                        bUartDataReady = TRUE;
                        g_timer1Counter=0;
                        g_timer1Over=0;
                        bufhead = 0;
                }               
}

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝