① 51單片機怎麼把一個2位十進制整數(00-99之間的任意整數)通過串口發送給另一個單片機程序呢!
2位但十進制數就一個位元組的數據,直接發送就可以了。比如X為發送數據那麼程序為:
senddat:
mov SBUF,X
jnb TI,$
clr TI
ret
C語言
senddat()
{
SBUF=X;
while(!TI);
TI=0;
}
② 單片機給電腦發送一個位元組的十六進制數,這個數該存放在什麼類型的變數里呢
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方式表示。
③ 單片機怎樣通過串口向計算機發送數據
單片機怎樣通過串口向計算機發送數據:
單片機可以實現與計算機的發送和接收。首先,要正確配置單片機的串口,包括波特率、使用時鍾源、COM口、數據位位數、奇偶校驗位、停止位位數等,同時要保證計算機的配置和單片機的一致。然後,把要發送的數據送到發送緩存,只能一個位元組一個位元組的發送。啟動單片機發送,就可以完成發送操作。如果打開接收中斷,計算機發送數據過來的時候,就會進入到接收中斷,單片機進入接收數據狀態。
要注意的是,單片機是TTL電平,而計算機是232電平,所以在硬體電路連接上要有電平轉換晶元,常用的有MAX232等。
④ 請教一個單片機8位串口發送的問題
由於你把8位的所有位數都用作表示數字,所以導致255以內的數和255以上的數無法分開。
這個問題的關鍵是怎麼讓電腦知道你什麼時候發的數字是8位的,什麼時候發的數字是16位拆成兩個8位的對吧!
我這里說一個方法吧!你可以把8位全一作為一個判斷符,如果電腦受到一個全一的字元,那麼接受到的下兩個位元組就進行拼接。
例如需要發送254,那麼直接發送一個位元組即可。
如果發送255,可以這樣:
先發送 11111111
然後發送 00000000 11111111
這樣拼接得到255
如果是發送 1024,可以這樣:
先發送 11111111
然後發送 00000100 00000000
當然,這樣可能傳輸效率有所降低,但也不會太差!
⑤ 51單片機發送位元組,是把一個位元組寫入到subf,就會把ti置1,為什麼又要把ti再置回0再開ES=1呢
單片機通過串口向外發送一個位元組的數據結束後,就會將TI置1,表示發送完了,如果是開中斷的話,就會產生中斷,在中斷子程序中繼續發送下一個位元組。因這次已經響應了,就應該把TI清0,表示這一次的中斷已響應了,如果不清0,就會再次產生中斷的,一次發送引起兩次或者多次中斷,就錯誤了。所以,一次中斷後必須將本次的標志位TI清0,TI是一次有效。如果是查詢方式,把要發送的數據寫到SUBF後就要查詢TI的狀態了,當TI=1,就說明這次發送結束了,也必須將TI清0,再發送下一個位元組。
在中斷子程序中,通常是首先就將TI清0,而中斷程序結束後再開ES=1,假如這個順序反過了,也是可以的,只要在中斷子程序中將TI清0就行,至於是否將再開ES=1,要看在中斷子程序中的前面關了ES=0,從中斷返回後就要開ES=1。其實這一關一開,在中斷子程序中沒有什麼必要,如果不關,也就不用再開了,雖然沒有關,在響應串口中斷時也不會再響應串口中斷,必須從中斷返回後才能再次響應的。這只是一些人的習慣了這么寫,也沒有關系,只要不被誤導就好。
如果是單片機接收數據,當接收到一個位元組後,就會將RI置1,或者引起中斷,從SBUF中讀出數據,或者查詢RI,再讀數據。通常是採用中斷的方式接收數據,這樣不影響單片機執行其它程序,也不至於因為等待接收數據造成死機。