導航:首頁 > 操作系統 > 51單片機串口一次發3個16進制

51單片機串口一次發3個16進制

發布時間:2022-09-05 15:49:46

⑴ 各位大俠,51單片機串口中斷接收問題為什麼一個一個位元組的發,串口都可以接收,而連續發4個十六進制

每次進中斷你都回發Rbuf[]數組(4個位元組),更要命的是你居然還敢在中斷函數裡面while(TI==0)。
你可以看看在串列中斷函數裡面浪費了多少時間。
51的串口只有一個移位寄存器。第一次進入中斷後你讀出了1個位元組,然後移位寄存器裡面又收到1個位元組,剩下的再來就被丟掉了……因為老兄你還在第一次進入的中斷裡面悠哉悠哉地耍呢。

⑵ 51單片機怎麼接收電腦發送的16位數據

51單片機是8位的,一次只能接一個位元組,你這16位的,要分兩次的。 電腦串口也是按兩次來發送,也就是把這個16位的拆成兩個位元組,所以每個位元組發送都是遵循串口協議的,你在單片機裡面開串口接收中斷即可。 你可能會疑問,要是第一個位元組中斷了,進入中斷函數接第一個位元組後,那第二個位元組會不會錯過,來不及接收? 這個不會的,上面說了,第二個位元組也是按串口標准發的,也就是起始位,數據位,(校驗位),結束位。 電腦在發一個位元組後,又會接著發第二個位元組。可是,要知道串口的波特率是很低的,遠遠比單片機的處理速度低。當你接了第一個位元組,將此位元組做一些處理,比如存起來時,電腦可能都還沒開始發第二個位元組呢,因為電腦發數據的速率是以K為單位的,而單片機處理速度是以M為單位的。 因此,不用擔心第二個位元組會丟失。

⑶ 每按一次單片機上的按鍵,把一個16進制的數據發送到串口利用串口調試助手接收顯示出來(51單片機 匯編語言

KEY EQU P1.0 ;自己按實際定義
DAT EQU 30H ;自己定義發送的數據
ORG 0000H
SJMP STA
ORG 0023H
LJMP SERINT
ORG 0030H
STA:
MOV SP,#6FH
SETB ES
SETB EA
LOOP:
JB KEY,LOOP
LCALL DELAY
JB KEY,LOOP
MOV SBUF,#DAT
LCALL SEND
SJMP LOOP
DELAY:
MOV R0,#10
D1:
MOV R1,#200
DJNZ R1,$
DJNZ R0,D1
RET
;-----串口中斷程序------
SERINT:
JBC RI,R_DAT
JBC TI,SEREND
SJMP SEREND
R_DAT:
MOV A,SBUF
SEREND:
RETI
END

⑷ 我要51單片機串口發送16位的數據,誰能給我個最方便的校驗代碼例如CRC什麼的…謝謝!

直接發送這個16位數據和其和就可以了,也就是發送3個位元組。接收到和同樣求一下和看是否一致就行。例如:
senddat()
{
dat[2]=dat[0]+dat[1];
i=0;
while(i<3)
{
SBUF=dat[i];
while(!TI);
TI=0;
i++;
}
}

char recive()
{
i=0;
while(i<3)
{
if(RI)
{
RI=0;
dat[i]=SBUF;
}
}
if(dat[2]==dat[0]+dat[1])return(1);
else return(0);
}

⑸ 51單片機發送十六進制數組

你好!

16進制發送,中間要有空格,然後發送,私信聯系

⑹ 51單片機串口接收十六進制數組數據有誤

你使用這種方式發送vb數據的i話,發送的是ascii碼,比如發送的數據是123的話,計算機會連續發送0x31,0x32,0x33,所以單片機接收程序,需要重新轉換一下,你可是試著換一種方式發送十六進制數據
對於單片機接收程序,由於你發送的數據量比較小,而且發送數據時,相鄰兩個數據的時間間隔也很短,你可以在中斷裡面通過查詢的方式接收數據包
void
serial
()
interrupt
4
using
3
{
uchar
a,cnt;
a=0;
cnt=250;//如果你的波特率比較低,而系統時鍾又快的話,cnt應定義為int型,並把值設置的更大些
ri=0;
es=0;//關閉串口中斷
str[a++]
=sbuf;
while(cnt--){//如果cnt等於0時退出循環
if(ri){
ri=0;
str[a++]
=sbuf;
cnt=250;//接收到新的數據,重新設定超時
}
}
es=1;//重新開串口中斷
//這里可以做一個接收到數組的標志位,用於主程序查詢處理相關數據
mc=str[0];
n=str[1];
}

⑺ 51單片機串口輸出程序,單片機運行後在串口調試助手上看到重復的一組16進制數

首先看你的發送的是什麼:unsigned char dat,字元型的變數,也就是說你發送過去的變數是char型的,

再看你要顯示什麼:「串口助手上看到一組16進制數」好吧,這就是問題,
你要看的是16進制的數,但是發過去的是char型,那麼怎麼辦呢?
1:轉換,char型變數你會轉換成16進制的嗎??不會的話去翻ASC||表,(0x1B是27(十進制),char是「27
33
1B
ESC
escape 」 一個叫escape的東東, )這些東西明顯是不能弄到字元串裡面去的,對吧,那就看第二步,
2:還是轉換,不過這次不是把16轉換成對應的char,『0』的asc||知道是多少嗎?對應是10進制是48,然後『0』-21=?,,慢慢研究吧,
最後:你把zifuchuan這個變數弄成int型的不就好啦,,,可以直接用啊,只需要在串口終端顯示的時候勾選以hex顯示,就好了啊

⑻ 通過單片機串口發送一串16進制碼

發送16進制數和空格的要求不合理,要發16進制數就是連續的。

要發空格,那是字元,即ASCII碼,而一個位元組的16進制數要發兩個字元。
以16進制發送時,空格的16進制數20H,而不是這種空的空格。

⑼ 怎麼樣通過51單片機串口一次發送3個16進制數據

配置好串口,然後寫到SBUF裡面就能自動發送

⑽ 單片機串口發送16進製程序

不用16進制那就是字元,電腦發送和單片機接收都是該字元的asii碼
字元1的asii碼=16進制的31,即0x31

閱讀全文

與51單片機串口一次發3個16進制相關的資料

熱點內容
手機碎屏解壓工具 瀏覽:245
jsonrpcphp使用 瀏覽:566
網上求職系統源碼 瀏覽:699
pdf數字不顯示 瀏覽:890
convertwordtopdf 瀏覽:253
程序編譯基本單位 瀏覽:23
python分析圖片角度 瀏覽:64
阿里雲伺服器能復制數據嗎 瀏覽:562
python拼音轉換文字 瀏覽:563
動畫遺傳演算法 瀏覽:63
php如何解析xml文件 瀏覽:702
如何改變appstore的語言 瀏覽:462
javahtmlxml 瀏覽:34
單片機啟動文件 瀏覽:811
橙app如何開啟聊天 瀏覽:899
訪問伺服器公網地址 瀏覽:666
pdf列印底色去掉 瀏覽:465
java快遞介面 瀏覽:399
哪個app可以教新爸爸 瀏覽:212
如何查看伺服器系統版本信息 瀏覽:526