indata= 1001 1001;
SER = indata>>7;
可以这么理解
这两句执行后,indata右移7位后(0000 0001)的最低位赋值给SER,即SER = 1,
然后这两句执行过程中,indata并没有重新赋值,indata的值仍然是1001 1001.
如需要移位操作后将移位后的值赋予原变量,
应该是
indata >>= 7;
关于74HC595适合用来与74HC165配合来用做IO口扩展
我这有当年我学习该芯片的一些程序,楼主可以参考下
bdata u8 out_data;
sbit ds = PX^X;
sbit shcp = PX^X; //74hc595时钟引脚
sbit mr = PX^X; //74HC595清零引脚,低电平有效,可直接接VCC
sbit stcp = PX^X; //相当于片选信号
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可以多片并联,时钟信号SHCP,串行数据DS端并在一起,用STCP脚作片选.
|