不得不說兩句,妳問的問題,提供的內容要全面,要明確妳想知道的是什麽?疑問在什麽地方?
像妳前面說得雙字節字符,貌似就壹點關系都沒有。
上面的那位仁兄說得很不錯了(還不懂的話,建議妳去看I2C協議,和硬件配置吧)
void Send(unsigned char Data)
{
unsigned char BitCounter = 8;
unsigned char temp;
do
{
temp = Data;
//I2C的時鐘線SCL先清零,這是I2C協議決定的,數據傳輸SDA只能在SCL=0時才能改變。
scl = 0;
nop();
//下面就要判斷在I2C數據線上要發送的數據,
//從最高位開始,判斷結果是1,SDA就要置1,判斷結果為0,SDA就要清零。
//沒有什麽像妳說的輸不輸出數據,輸出0是數據,輸出1也是數據。
if((temp&0x80) == 0x80)
sda = 1;
else
sda = 0;
//下面壹個SCL上升沿,把數據線SDA上的數據發送出去
scl = 1;
//因為前面始終判斷的temp最高位,
//第(2,3,4...8)次循環,要依次把數據的第(7,6,5..1)位移到temp的最高位。
//滿足這個要求,每次循環移動壹位就可以了
temp = Data << 1;
Data = temp;
//BitCounter是用來統計循環次數的,
BitCounter --;
}while(BitCounter);
scl = 0;
}