|
把讀取0832的高8位更改為temp1|=DO;沒有問題,但把讀取低8位更改為temp2|=DO;不行。
因?yàn)樽x取DO的是位數(shù)據(jù)要放在temp2的最高位。如堅(jiān)持這種寫法就要把DO移到高位,
并且要把DO強(qiáng)制轉(zhuǎn)換成char。如:temp2|=((char)DO<<7);,這就顯得多此一舉了。
函數(shù)解釋:
- //請先了解ADC0832模數(shù)轉(zhuǎn)換的串行協(xié)議,再來讀本函數(shù),主要是對應(yīng)時(shí)序圖來理解,
- //本函數(shù)是模擬0832的串行協(xié)議進(jìn)行的
- unsigned char ad0832read(bit ch)
- {
- uchar i,Data1=0,Data2=0;
- CLK=0; //時(shí)鐘置低平
- DO =1; //開始信號為高電平
- CS =0; //片選信號置低,啟動(dòng)AD轉(zhuǎn)換芯片
- CLK=1; //輸入開始信號(構(gòu)成一個(gè)正脈沖),時(shí)鐘上升沿,輸入開始信號
- CLK=0; //時(shí)鐘下降沿
- //模擬信號輸入模式選擇(1:單模信號,0:雙模差分信號)
- DO =1;
- CLK=1; //時(shí)鐘上升沿,輸入開始信號
- CLK=0; //時(shí)鐘下降沿
- //模擬信號輸入通道選擇(1:通道CH1,0:通道CH0)
- DO =ch; //選擇通道0
- CLK=1; //時(shí)鐘上升沿,輸入開始信號
- CLK=0; //時(shí)鐘下降沿
- DO =1; //數(shù)據(jù)線置高,準(zhǔn)備接收數(shù)據(jù)
- for(i=0;i<8;i++) //從高位移入數(shù)據(jù)
- {
- CLK=1;
- CLK=0; //時(shí)鐘下降沿,AD0832輸出數(shù)據(jù),高位(MSB)先
- Data1=Data1<<1;
- if(DO==1)
- Data1=Data1|0x01; //數(shù)據(jù)左移位,補(bǔ)0 ,如果數(shù)據(jù)為“1”,移入1, 如果數(shù)據(jù)為“0”,移入0,
- }
- for(i=0;i<8;i++) //從低位移入數(shù)據(jù)
- {
- Data2=Data2>>1;
- if(DO==1)
- Data2=Data2|0x80; //數(shù)據(jù)右移位,補(bǔ)0,如果數(shù)據(jù)為“1”,移入1如果數(shù)據(jù)為“0”,移入0,
- CLK=1;
- CLK=0; //時(shí)鐘下降沿,AD0832輸出數(shù)據(jù),高位(MSB)先
- }
- //數(shù)據(jù)線置高,釋放總線,完成一次轉(zhuǎn)換
- CLK=1;
- DO =1;
- CS =1;
- return (Data1==Data2)?Data1:0; // 如果相等輸出data1 or 0
- }
復(fù)制代碼 |
|