在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 如何向單片機寫字符串

            如何向單片機寫字符串

            作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏

            本文引用地址:http://www.biyoush.com/article/201611/315789.htm

            單片機實現(xiàn)接收從電腦發(fā)送過來的字符串的方法

            很多朋友會碰到這個問題:單片機接收從電腦串口發(fā)送出來的一串字符串,卻只能接收到第一個字符,其他的都丟失了或者是接收到的是亂碼,卻不知道是什么原因。其實,那是因為,雖然單片機的是全雙工串口,但是串口的緩沖區(qū)(SBUF)卻一般只有一個字節(jié),即1Byte,遠沒有像電腦串口的緩沖區(qū)以KB計算那么大,并且,單片機的處理速度是很有限的,試想一下,假如要求一串字符串以9600bps的速率,一個起始位,一個結(jié)束位,無校正位,相當于960Byte/s傳輸?shù)絾纹瑱C,單片機要是能夠全部接收的話,那么單片機接收和處理一個字節(jié)的時間僅為約1ms的時間。這說明了,如果單片機的處理速度不夠快,還沒有將接收到的上一幀數(shù)據(jù)及時轉(zhuǎn)送到單片機的RAM中,而電腦串口又傳輸過來一幀新的數(shù)據(jù),這幀新的數(shù)據(jù)就會把單片機的串口輸入緩沖區(qū)的SBUF給刷新掉,或者說單片機壓根就沒有接收到新的一幀數(shù)據(jù),造成了數(shù)據(jù)的丟失或接收到亂碼。

            如果需要單片機接收到從串口發(fā)送過來的一段很長的字符串,并且能夠都正常接收和顯示,這在網(wǎng)上還找不到例子。

            在這里,筆者提供了一種方法,通過單片機內(nèi)部最高中斷等級的中斷源不斷的查詢從電腦串口發(fā)送過來的字符,并及時將接收到的字符串通過外接的1602顯示屏顯示出來。

            這里用最為常見的51單片機作為例程,因為51單片機處理速度比較慢,所以需要將電腦串口發(fā)送速率調(diào)整為最低的600bps,那么單片機端接收和處理一個字符的時間約要求為14ms左右,基本足夠了。這個14ms間隔的定時處理和查詢工作,由單片機的最高等級內(nèi)部中斷源來控制,以保證電腦發(fā)送過來的每個字符單片機都能及時的去處理。

            //1602實時顯示單片機串口接收到電腦串口發(fā)送的字符串

            //波特率600bps由T2中斷產(chǎn)生,晶振12M

            //最高等級中斷T0負責定時查詢串口輸入SBUF

            //作者:小宣-天堂雨林博客blog.sina.com.cn/acerCopyright@2009

            //接線注釋:

            //P2.0-P2.7:LCD并行接口P0-P7

            //P3.2-P3.4:LCD的RS、RW、E

            //P3.0、P3.1:編程串口RXD、TXD

            #include

            unsigned char receive[32];

            unsigned char k;

            sbit rs=P3^2;

            sbit rw=P3^3;

            sbit e =P3^4;

            void delay1ms(unsigned int f)

            {

            unsigned int i,j;

            for(i=0;i

            for(j=0;j<120;j++);

            }

            void receivem(void)

            {

            while(RI==1)

            {

            if(k==32){k=0;}

            receive[k]=SBUF;

            RI=0;

            k++;

            }

            }

            void timer_int(void)

            {

            TMOD=0x11;//00010001

            SCON =0x50;

            T2CON=0x30;

            RCAP2H=0xFD;

            RCAP2L=0x8F;

            EA=1;

            TR0=1;

            TR1=0;

            TR2=1;

            ET0=ET1=ET2=1;

            }

            void time0(void) interrupt 1 using 1

            {

            TH0=0xCD;

            TL0=0x50;

            receivem();//定時將SBUF接收

            }

            void write_com(unsigned char com)

            {

            rw=0;

            rs=0;

            P2=com;

            delay1ms(1);

            e=1;

            delay1ms(1);

            e=0;

            }

            void write_data(unsigned char dat)

            {

            rw=0;

            rs=1;

            P2=dat;

            delay1ms(1);

            e=1;

            delay1ms(1);

            e=0;

            }

            void lcd_int(void)

            {

            rw=0;

            e=0;

            write_com(0x38);

            write_com(0x0c);

            write_com(0x06);

            write_com(0x80);

            }

            void dis(void)

            {

            unsigned char i;

            if(k>0 && k<16)

            {

            write_com(0x80);

            for(i=0;i

            {

            write_data(receive[i]);

            }

            }

            if(k>=16 && k<32)

            {

            write_com(0xC0);

            for(i=16;i

            {

            write_data(receive[i]);

            }

            }

            }

            void main()

            {

            timer_int();

            lcd_int();

            write_com(0x01);

            while(1)

            {dis();}

            }




            關(guān)鍵詞: 單片機字符

            評論


            技術(shù)專區(qū)

            關(guān)閉