久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 單片機(jī)串口通信接收與發(fā)送字符串問題 [打印本頁]

作者: FIGHLTDEAME    時間: 2017-4-9 14:35
標(biāo)題: 單片機(jī)串口通信接收與發(fā)送字符串問題
我的目的是通過電腦給單片機(jī)發(fā)送一個字符串k+25,單片機(jī)接收到該字符串后,發(fā)送給電腦25這兩個字符;單片機(jī)雖然接受到了該字符串,但是發(fā)送到電腦時總是+2
這兩個字符。我在發(fā)送函數(shù)里已經(jīng)用for(j=2;j<4;j++)來限制只發(fā)送25這兩個字符了,可是現(xiàn)在一直發(fā)送+2這兩個字符,麻煩各位大神幫我看一下吧,謝謝了
下面是我寫的程序

下面是串口助手調(diào)試情況:




作者: ahshmj    時間: 2017-4-9 18:16
本帖最后由 ahshmj 于 2017-4-9 18:21 編輯

感覺你的波特率設(shè)置不對。晶振是多少?
你電腦界面上選的是“STC89C/LE52RC”,但是STC官方給出的如下:
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        AUXR &= 0xBF;                //定時器1時鐘為Fosc/12,即12T
        AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器
        TMOD &= 0x0F;                //設(shè)定定時器1為16位自動重裝方式
        TL1 = 0xE8;                //設(shè)定定時初值
        TH1 = 0xFF;                //設(shè)定定時初值
        ET1 = 0;                //禁止定時器1中斷
        TR1 = 1;                //啟動定時器1

(11.0592晶振)


作者: imxuheng    時間: 2017-4-9 18:25
來,試試我這個
#include<reg52.h>

unsigned char cntRxd = 0;
unsigned char cmdArrived = 0;
unsigned char bufRxd[40]; //串口接收緩沖區(qū)

void ConfigUART(unsigned int baud)  //串口配置函數(shù),baud為波特率
{
    SCON = 0x50;   //配置串口為模式1
    TMOD &= 0x0F;  //清零T1的控制位
    TMOD |= 0x20;  //配置T1為模式2
    TH1 = 256 - (11059200/12/32) / baud;  //計算T1重載值
    TL1 = TH1;     //初值等于重載值
    ET1 = 0;       //禁止T1中斷
    ES  = 1;       //使能串口中斷
    TR1 = 1;       //啟動T1
}
void UartWrite(unsigned char *buf) //串口發(fā)送函數(shù)
{
        unsigned char i;
    for(i = 0;i<cntRxd;i++)   //發(fā)送數(shù)據(jù)
    {
        SBUF = *buf;
        buf++;
    }
}

void main ()
{
    EA = 1;           //開總中斷
    ConfigUART(9600); //配置波特率為9600
    while(1)
    {
             if (cmdArrived) //有命令到達(dá)時,讀取處理該命令
            {
                cmdArrived = 0;
                        UartWrite(bufRxd);
                        cntRxd = 0;
            }
        }
}

void InterruptUART() interrupt 4  //UART中斷服務(wù)函數(shù)
{
        if(RI)
        {
                bufRxd[cntRxd++] = SBUF; //保存接收字節(jié)
        while(!RI);
                RI = 0;   //手動清零接收中斷標(biāo)志位
                cmdArrived = 1;
    }
    if (TI)  //字節(jié)發(fā)送完畢
        {
              TI = 0;
        }
}

作者: FIGHLTDEAME    時間: 2017-4-9 19:48
imxuheng 發(fā)表于 2017-4-9 18:25
來,試試我這個
#include

恩恩  好的 謝謝了
作者: FIGHLTDEAME    時間: 2017-4-9 20:01
ahshmj 發(fā)表于 2017-4-9 18:16
感覺你的波特率設(shè)置不對。晶振是多少?
你電腦界面上選的是“STC89C/LE52RC”,但是STC官方給出的如下:
...

我的是51單片機(jī),但是賣家說STC上沒有51,型號選擇“STC89C/LE52RC”這個就行,他說沒有事兒
作者: ahshmj    時間: 2017-4-10 09:09
FIGHLTDEAME 發(fā)表于 2017-4-9 20:01
我的是51單片機(jī),但是賣家說STC上沒有51,型號選擇“STC89C/LE52RC”這個就行,他說沒有事兒

芯片型號 : STC89C51RC/LE51RC

關(guān)于此芯片的重要說明:
  固件版本在v7.0及以上時
  . 芯片內(nèi)部包含有全球唯一ID號
  . 上電復(fù)位后,ID號會自動復(fù)制到RAM區(qū)域的F1H-F7H
  . 更新代碼時可使用燒錄選項將ID號燒錄到程序區(qū)的最后7字節(jié)中


這是官方的,說明有這個型號。
作者: 多情必自斃    時間: 2017-9-29 21:01
imxuheng 發(fā)表于 2017-4-9 18:25
來,試試我這個
#include

隔了5個月,不知大佬還能看見不,請問下面這行是什么意思呢
receivedate[flag++] = SBUF;
作者: 多情必自斃    時間: 2017-9-29 21:02
imxuheng 發(fā)表于 2017-4-9 18:25
來,試試我這個
#include

隔了5個月,不知大佬還能看見不,請問下面這句話是什么意思呢
bufRxd[cntRxd++] = SBUF;
作者: hujj    時間: 2018-9-2 08:56
這句的意思是先將接收緩存SBUF中的數(shù)據(jù)存放到數(shù)據(jù)bufRxd[cntRxd]中,然后cntRxd再加1。
作者: 多情必自斃    時間: 2018-11-1 19:03
hujj 發(fā)表于 2018-9-2 08:56
這句的意思是先將接收緩存SBUF中的數(shù)據(jù)存放到數(shù)據(jù)bufRxd[cntRxd]中,然后cntRxd再加1。

3q,時隔一年的互動




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 爱草在线 | 久久久久成人精品免费播放动漫 | 日本午夜免费福利视频 | 日本黄色不卡视频 | 亚洲欧美中文日韩在线v日本 | 欧美日韩国产一区二区 | 国产乱码精品一区二区三区av | 情侣黄网站免费看 | 一区二区三区精品视频 | 久久久亚洲综合 | 成人免费观看视频 | 成人黄色电影在线观看 | 伊人久久伊人 | 奇米av| 99reav| 精品不卡| 色综合成人网 | 亚洲一区免费在线 | av中文字幕网 | 国产午夜高清 | 天天操夜夜拍 | 中文字幕日韩在线观看 | 色噜噜狠狠色综合中国 | 一区二区三区视频在线观看 | 亚洲美女天堂网 | 8x国产精品视频一区二区 | 美女黄色在线观看 | 久久久久久久久久爱 | 久久精品成人 | 欧美精品日韩精品 | 国产精品一区二区av | 久久岛国 | 国产精品美女一区二区 | 国产免费拔擦拔擦8x高清 | 99精品国自产在线 | 二区在线观看 | 久久香蕉网 | 亚洲天天干| 色婷婷综合成人av | 久久久精品网站 | 欧美高清性xxxxhdvideosex |