找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3354|回復: 3
收起左側(cè)

關(guān)于串口收發(fā)多字節(jié)

[復制鏈接]
ID:305998 發(fā)表于 2018-6-6 15:16 | 顯示全部樓層 |閱讀模式

我想把它改成 我在串口助手發(fā)多少個字節(jié) 它就接收多少個字節(jié)并返回到串口助手上 返回的格式為
發(fā)送 1 2 3  返回 31 32 33
現(xiàn)在這個程序是必須要每次發(fā)送四個字節(jié)才行,如果每次發(fā)送一個字節(jié) 則要發(fā)送四次才能接收

回復

使用道具 舉報

ID:305998 發(fā)表于 2018-6-6 15:17 | 顯示全部樓層
程序如下  麻煩大神幫我想想


#include <stc12c5a32s2.h>
#include "usart.h"
#include "delay.h"

#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int


uchar num = 0;
uchar flag=0;
uchar i;
uchar n;
uchar RBuf[4];

/*------------------主程序--------------------*/
void main(void)
{        
//        uchar key ;
        Delay1ms();
        
        ConfigUART();
        lcd_init();
        lcd_clr();
//        key = Key_Scan();
        dprintf(16,0,"歡 迎 光 臨",0);
        

        while(1)
        {        

                if(flag == 1)//當接收到數(shù)據(jù)
                {
                        ES = 0;//關(guān)閉串口中斷
                        for(i=0;i<4;i++)
                        {
                                SBUF = RBuf[i];
                                while(!TI); TI = 0;
                        }                                                        
                        ES = 1;
                        flag = 0;
                        num = 0;

                }


}




void Uart_Isr() interrupt 4 using 1
{        
        if(RI)
        {        
          RBuf[num] = SBUF;
                while(!RI);
                RI = 0;
                num++;
        }
        if(num == 4)  flag = 1;

        

}
回復

使用道具 舉報

ID:346225 發(fā)表于 2018-6-6 16:17 | 顯示全部樓層
串口接收,必須把緩存的數(shù)據(jù)讀出,然后下個數(shù)據(jù)才能發(fā)送, 你可以有數(shù)據(jù)發(fā)送過來就直接接收,然后數(shù)據(jù)滿4個再進行數(shù)據(jù)處理
回復

使用道具 舉報

ID:213173 發(fā)表于 2018-6-6 21:11 | 顯示全部樓層
yzcook 發(fā)表于 2018-6-6 15:17
程序如下  麻煩大神幫我想想

#include <AT89X52.H>
#define uint unsigned int
#define uchar unsigned char
uchar flag;                //接收完成標志,
uchar a;                //收發(fā)變量
void main()                                                       
{
        TMOD=0x20;//定時器1方式2(8位重載)
        TH1=0xfd; //波特率9600
        TL1=0xfd; //波特率9600
        TR1=1;        //開定時器1
        REN=1;        //允許串行接收
        SM0=0;        //設置串口方式1(8位UART波特率可變)
        SM1=1;        //設置串口方式1(8位UART波特率可變)
//        PCON=0x80;        //波特率加倍9600*2
        EA=1;        //總中斷開
        ES=1;        //串口中斷開
        while(1)
        {
                if(flag==1)                //接收完成標志為1
                {
                        ES=0;                //關(guān)串口中斷
                        flag=0;                //接收完成標志清0
                        SBUF=a+'0';                //發(fā)送數(shù)據(jù)
                        while(!TI);        //等待發(fā)送中斷請求標志位為1
                        TI=0;                //發(fā)送中斷請求標志位清0
                        ES=1;                //開串口中斷
                }
        }
}

void ser() interrupt 4
{                                //當接收完成發(fā)生中斷請求RI由硬件置1
                RI=0;        //接收中斷請求標志位清0,必須軟件清0
                a=SBUF;//獲取SBUF接收到的數(shù)據(jù)
                flag=1;//接收完成標志置1
}


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表