请教: IC卡数据的读取
unsigned char ReadByte(void) //读取一个字符 { unsigned char i,ch; ch = 0; for (i = 8; i > 0; i--) { CARD_CLK = 0; ch = ch >> 1; //从低位读起 if((unsigned char)CARD_DATA) ch |= 0x80; Delay5us(); CARD_CLK = 1; Delay5us(); } return ch; }
1: 为什么是 ch |= 0x80 啊 ch |= 0x20 不可以啊?
2: ch = ch >> 1;
为什么就说从低位读起 ? 1000 0002 1 是最高位,还是最低位?
3: CARD_DATA 的值没有变化啊 如果在循环里 for (i = 8; i > 0; i--) { if((unsigned char)CARD_DATA) ch |= 0x80; } 第一次 CARD_DATA 的值为 1 那么 for (i = 8; i > 0; i--) { } 里,就一直为 1
那么不直接写
ch = 0xff 啊
void ReadMode(unsigned char *pt,unsigned char count) //读模式 { CARD_CLK=0; Delay5us(); do { *pt = ReadByte(); //读入一个字节 pt++; //指针加一 }while(--count); //计数器减一,判断 }
谢谢! |