❶ 單片機里I2C溫度感測器採集的溫度如何傳到上位機上位機怎麼處理數據
1、利用串口通訊將單片機採集的溫度數據傳給上位機,譬如上位機可以用VC++開發
2、上位機在串口接收數據事件中,可參考如下代碼:
void
CSCommTestDlg::OnComm()
{
//
TODO:
Add
your
control
notification
handler
code
here
VARIANT
variant_inp;
COleSafeArray
safearray_inp;
LONG
len,k;
BYTE
rxdata[2048];
//設置BYTE數組
An
8-bit
integerthat
is
not
signed.
CString
strtemp;
if(m_ctrlComm.GetCommEvent()==2)
/培掘/配爛核事件值為2表示接收緩沖區內有字歷仿符
{
variant_inp=m_ctrlComm.GetInput();
//讀緩沖區
safearray_inp=variant_inp;
//VARIANT型變數轉換為ColeSafeArray型變數
len=safearray_inp.GetOneDimSize();
//得到有效數據長度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//轉換為BYTE型數組
for(k=0;k<len;k++)
//將數組轉換為Cstring型變數
{
BYTE
bt=*(char*)(rxdata+k);
//字元型
strtemp.Format("%d",bt);
//將字元送入臨時變數strtemp存放
m_strRXData=strtemp;
//加入接收編輯框對應字元串
}
}
UpdateData(FALSE);
//更新編輯框內容
}
❷ 如何設置I2C的偏移地址為16位
是這樣的,我們一般的I2C協議的數據格遲凱式是這樣的
主機:W(I2C
Slaver
Adder
W/R),
I2C設備的偏移量
I2CData;但有些I2C設備的偏移地扮臘址是16位的廳旦滑
假如
W(36)
80
40
00
80
40就是偏移量即0x8040
❸ 單片機I2C匯流排寫一位元組,CY不是最高位的意思嗎,為什麼網上說是進位標志位
CY 是CPU 的進位虧返標志
一進來就開始移位,最高位移進CY中了
sda=CY; 第一次慧巧移位的數據 傳送到sda中, 然後再銷碧飢進行for 循環,
共移動8次,一次一位把temp中的數據傳送出去
❹ i2c匯流排 讀取數據時byte《=1這個移位語句為什麼不能在if(SDA == 1) {byte |= 0x01; } 語句後面呢。
舉個例子,假如前面讀了侍陪頌3個bit為0b101,第4個0b1:
byte <<=1 在if 前的亂局結果是正確的: 0b1011
byte >>=1 在if 後的結果是錯誤的:0b1010
你這是 51 的 i2c? 如老鄭果是帶 i2c 控制器的 arm,並且跑有 linux 的話,不建議用 gpio 模擬 i2c 匯流排, 因為進程切換會打亂 i2c 匯流排時序。
❺ 三種通信模式SPI、UART、I2C它們的工作原理
這三種通信模式都是串列匯流排。
SPI匯流排
MOTOROLA公司的SPI匯流排的基本信號線為3根傳輸線,即SI、SO、SCK。傳輸的速率由時鍾信號SCK決定,SI為數據輸入、SO為數據輸出。採用SPI匯流排的系統如圖8-27所示,它包含了一個主片和多個從片,主片通過發出片選信號-CS來控制對哪個數數鍵從片進行通信,當某個從片的-CS信號有效時,能通過SI接收指令、數據,並通過SO發回數據。而未被選中的從片的SO端處於高阻狀態。主設畢稿備通過產生移位時鍾來發起通訊。通訊時,數據由SO
輸出,SI
輸入,數據在時鍾的上升或下降沿由SO
輸出,在緊接著的下降或上升沿由SI
讀入,這樣經過8/16
次時鍾的改變,完成8/16
位數據的傳輸。
I2C匯流排
I2C(Inter-Integrated
Circuit)匯流排薯巧是由PHILIPS公司開發的兩線式串列匯流排,用於連接微控制器及其外圍設備。I2C串列匯流排有兩根信號線:一根雙向的數據線SDA;另一根是時鍾線SCL。所有接到I2C匯流排上的設備的串列數據都接到匯流排的SDA線,各設備的時鍾線SCL接到匯流排的SCL。
I2C匯流排按位元組傳輸,即每次傳輸8bits二進制數據,傳輸完畢後等待接收端的應答信號ACK,收到應答信號後再傳輸下一位元組。等不到ACK信號後,傳輸終止。空閑情況下,SCL和SDA都處於高電平狀態。
UART通信
UART:Universal
Asynchronous
Receiver/Transmitter,通用非同步接收/發送裝置。UART首先將並行數據轉換成串列數據來傳輸。消息幀從一個低位起始位開始,後面是5~8個數據位,一個可用的奇偶位和一個或幾個高位停止位。該匯流排雙向通信,可以實現全雙工傳輸和接收。在嵌入式設計中,UART用來與PC進行通信。
❻ 在I2C與24C02通信過程中為什麼給從機寫入地址數據要左移一位,或者是左移再或上0X01,
從機地址是7位的,7-1 位,第0位是用來表示寫還是讀的
❼ I2C讀從器件兩個地址,我怎麼把這兩個位元組的數據讀出後轉換為1個十進制數。
不確定你是怎樣的組合規則,僅提肆此供基本方式。
按照你的說法,你的數據類型應該是word。由於低賣褲位無效,所以需要先移位。
intvalue1=Port1_Value[0]>>4;
intvalue2中雹簡=Port1_Value[1]>>4;
word和int是可以直接轉的。至於這兩個int你需要怎麼組合起來,就看你的規則了。
❽ I2C匯流排位元組傳送與應答時數據傳送格式是什麼
是這樣的,I2C匯流排傳送的是串列數據,數據的傳送格式為:
1)從master模塊到slave模塊(寫的工作方式)時的數據傳送格式start
slave
address
R-W
A
DA
TA
A
DA
TA
A
stop
2)從slave模塊到master模塊(讀的工作方式)時的數據傳送格式start
slave
address
R-W
A
DA
TA
A
DA
TA
A
stop
首先傳送起始狀態start,然後傳送第一個字:master所選中的slave模塊的地址slave
address,地址長為7位,這個字的第8位(L
SB)RW表示讀寫狀態,「0」表示寫操作,從master模塊到slave模塊;「1」表示讀操作,從slave模塊到master模塊。當地址被傳送後,匯流排上的每個物理設備會將自己的地址和start位後的七位地址比較,如果地址相匹配,該設備就會認為是自己的地址,然後等待第8位(讀寫位)以決定它將是從接收裝置(slave-receiver)還是從發送裝置(slave-transm
itter)。其後是slave模塊發送到master模塊的應答信號(acknow
ledgment),值得注意的是,每個字(地址和數據)被傳送後其後必須跟隨應答信號(為master控制匯流排生成的第9個時鍾),當一個正向的應答信號有效時,SCL時鍾為高電平且穩定,同時,接收裝置將SDA數據線置為低。接下來是按位元組來傳送數據,每傳送完8位數據,接收裝置會發送一個應答信號,傳送結束時由master生成stop位,表示處於結束狀態。