|
硬件情況:
單片機(jī)型號(hào)是STC8G2K64S4 ,LQFP48封裝
P0 P2是接收端口(準(zhǔn)雙向置1),P1 P4是驅(qū)動(dòng)端口(準(zhǔn)雙向置0)
撥碼開關(guān) 是多組獨(dú)立開關(guān)的集合體,有4組,6組,8組,9組等
工程原理:
將撥碼開關(guān)引腳與單片機(jī)端口相連,閉合開關(guān)后,檢測(cè)接收端口0 的個(gè)數(shù),來判斷當(dāng)前開關(guān)的位數(shù)(檢測(cè)前已確保所有開關(guān)閉合)
由于STC8G系列一組IO只有8個(gè)引腳,如果要測(cè)量的撥碼開關(guān)位數(shù)大于8,就必須啟用兩組IO來組合實(shí)現(xiàn)
程序中,先將兩組IO的檢測(cè)結(jié)果(8位)組合為16位,然后再從高位往低位計(jì)數(shù) “0”的個(gè)數(shù),即可得出撥碼開關(guān)的位數(shù)
源代碼:
P1=0x00;P4=0x00;
_nop_();_nop_();
bits=detect_bit(con_bit(P0,P2));
unsigned int con_bit (unsigned char vol_high,unsigned char vol_low){
return (vol_high<<8)|vol_low ;
}
unsigned char detect_bit(unsigned int vol) {
unsigned int mask = 0x8000;
unsigned char cnt = 0;
while (mask && !(vol & mask)) { // 當(dāng)mask位為0時(shí)計(jì)數(shù)
cnt++;
mask >>= 1;
}
return cnt; // 返回連續(xù)高位0的個(gè)數(shù)(0-16)
}
問題:
經(jīng)實(shí)踐,當(dāng)撥碼開關(guān)位數(shù)<8時(shí),返回的bits 是0;當(dāng)撥碼開關(guān)位數(shù)>=8時(shí),返回的bits 是8 ,無法按照期望正確返回待測(cè)的撥碼開關(guān)位數(shù)
求助大伙,這是什么原因?qū)е碌模?/font>
|
|