單片機(jī)中用C語(yǔ)言查表和移位問(wèn)題
第一個(gè)是查表法
比方說(shuō)我有三個(gè)數(shù)據(jù)
char code table={0x01,0x02,0x03}分別對(duì)應(yīng)0xa,0xb,0xc,請(qǐng)問(wèn)如何用C語(yǔ)言實(shí)現(xiàn)查表找到對(duì)應(yīng)的值呢?請(qǐng)給位大蝦寫(xiě)出具體的語(yǔ)法實(shí)現(xiàn),要簡(jiǎn)潔明了。
第二個(gè)問(wèn)題是:比方說(shuō)我有一數(shù)據(jù) char data=0xa2 ;我要串行發(fā)送出去,那么我采用從高位發(fā)送,然后左移8次分別發(fā)出,請(qǐng)問(wèn)如何實(shí)現(xiàn)?若是采用data<<1這樣的語(yǔ)法,每次左移出去的高位去哪了呢?在CY位?那么任何單片機(jī)都有CY寄存器?況且都是左移,data<<1,什么時(shí)候高位就會(huì)移入CY,什么時(shí)候就是丟棄不要呢?
第一個(gè)問(wèn)題:
比如用查表法將結(jié)果保存到變量i中,查表變量為x,則i = table[x],記住C語(yǔ)言里面數(shù)組是從0開(kāi)始的,比如說(shuō)上面的0x01就是table[0],0x02是table[1],以此類(lèi)推。
再說(shuō)第二個(gè)問(wèn)題:
比如說(shuō)從P1.0口發(fā)送出去,則可以寫(xiě)為
sbit OUT = P1^0;//定義OUT為P1.0口,這樣今后好寫(xiě)程序
char i;
for(i = 0;i < 8;i++)
{
OUT = data & 0x80;//因?yàn)楦呶辉谇埃瑢⑺鼘?xiě)成二進(jìn)制就明白了
data <<= 1;
}
上面的程序就能搞定了;
應(yīng)該是所有的單片機(jī)都有CY位(不知道浮點(diǎn)DSP有沒(méi)有);
C語(yǔ)言中左移和右移之后低位或高位自動(dòng)補(bǔ)零,CY位也保持為零(視編譯器而定,這個(gè)得看編譯器手冊(cè)),有些編譯器提供了循環(huán)移位的函數(shù);