|
indata= 1001 1001;
SER = indata>>7;
可以這么理解
這兩句執(zhí)行后,indata右移7位后(0000 0001)的最低位賦值給SER,即SER = 1,
然后這兩句執(zhí)行過程中,indata并沒有重新賦值,indata的值仍然是1001 1001.
如需要移位操作后將移位后的值賦予原變量,
應(yīng)該是
indata >>= 7;
關(guān)于74HC595適合用來與74HC165配合來用做IO口擴展
我這有當(dāng)年我學(xué)習(xí)該芯片的一些程序,樓主可以參考下
bdata u8 out_data;
sbit ds = PX^X;
sbit shcp = PX^X; //74hc595時鐘引腳
sbit mr = PX^X; //74HC595清零引腳,低電平有效,可直接接VCC
sbit stcp = PX^X; //相當(dāng)于片選信號
sbit stcp2 = PX^X;
sbit buf = out_data^7;
void tran(u8 dat)
{
u8 i = 0;
shcp = 0;
out_data = dat;
while(i<8)
{
ds = buf;
shcp = 1;
_nop_();
_nop_();
shcp = 0;
out_data<<=1;
i++;
}
}
void tran_data(u8 dat,u8 which)
{
tran(dat);
if(which == 0)
{
stcp = 0;
_nop_();
_nop_();
stcp = 1;
}
if(which == 1)
{
stcp2 = 0;
_nop_();
_nop_();
stcp2 = 1;
}
}
74HC595可以多片并聯(lián),時鐘信號SHCP,串行數(shù)據(jù)DS端并在一起,用STCP腳作片選.
|
-
參考電路
|