Ⅰ 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顯示,就好了啊
Ⅱ 單片機給電腦發送一個位元組的十六進制數,這個數該存放在什麼類型的變數里呢
1。串口發送:單片機這里很簡單:設好波特率後,只要一條MOV SBUF,A即可將累加器的內容(一個位元組)送到串口。
2。數據格式:在單片機這里,全是以位元組方式運行的,更大的數要多位元組拼裝
3。在VB中,串口接收要選用「位元組」方式,不要用「字元串」方式,這樣可以很好的和單片機配合。
4。在VB中,可以將位元組數據轉換為無符號整數。
5。如果數據僅限於位元組(256之內),用剛才接收的位元組就可以直接參加運算。0D5H即是213,超過一個位元組的數值,由單片機傳過來之後要拼裝,比如(1A2BH)先傳1AH,再傳2BH,到VB中,將1AH(=26)乘以16(=416),再加上2BH(=43),其和等於459(=0X1CB)。
6。十六進制在單片機中用0ABH方式,在VB中用0xAB方式表示。
Ⅲ 51單片機串口接收到一串16進制的數據,怎樣能取出中間的一個位元組然後做處理呢
這里和幾進制的數據沒關系,不管是16進制,還是10進制,還是二進制,它所存儲的數值,都是不變的。要處理接到數據,必須做協議,否則,你不知道這一串數據,哪個是第一個位元組,哪個又是中間位元組。
Ⅳ 通過單片機串口發送一串16進制碼
發送16進制數和空格的要求不合理,要發16進制數就是連續的。
要發空格,那是字元,即ASCII碼,而一個位元組的16進制數要發兩個字元。
以16進制發送時,空格的16進制數20H,而不是這種空的空格。
Ⅳ 51單片機怎麼接收電腦發送的16位數據
51單片機是8位的,一次只能接一個位元組,你這16位的,要分兩次的。
電腦串口也是按兩次來發送,也就是把這個16位的拆成兩個位元組,所以每個位元組發送都是遵循串口協議的,你在單片機裡面開串口接收中斷即可。
你可能會疑問,要是第一個位元組中斷了,進入中斷函數接第一個位元組後,那第二個位元組會不會錯過,來不及接收?
這個不會的,上面說了,第二個位元組也是按串口標准發的,也就是起始位,數據位,(校驗位),結束位。
電腦在發一個位元組後,又會接著發第二個位元組。可是,要知道串口的波特率是很低的,遠遠比單片機的處理速度低。當你接了第一個位元組,將此位元組做一些處理,比如存起來時,電腦可能都還沒開始發第二個位元組呢,因為電腦發數據的速率是以K為單位的,而單片機處理速度是以M為單位的。
因此,不用擔心第二個位元組會丟失。