write_spi(tmp); // 写入4位保留位加上11位页地址的高4位
tmp = (uchar)(page_addr《《1)|((uchar)(page_start_addr》》8)&0x01);
write_spi(tmp); // 写入11位页地址的低7位和9位页起始字节地址的最高位
tmp = (uchar)(page_start_addr);
write_spi(tmp); // 写入9位页起始字节地址的低8位
write_spi(0x00) ; // 写入8位无关位
write_spi(0x00) ; // 写入8位无关位
write_spi(0x00) ; // 写入8位无关位
write_spi(0x00) ; // 再写入8位无关位,共写入32位无关位
write_spi(0xff) ; // 写入8位无意义值以确保完成一字节数据的读出
P1_1 = 1; // 禁用IC卡芯片;结束主内存页读指令
page_start_addr++; // 下一页中起始字节地址
/* 如果读完一页,则读取下一页 */
if (page_start_addr 》 263)
{
page_start_addr = 0; // 页起始字节地址重置0
if (page_addr 《 2047) // 如果主内存页没有读完
page_addr++; // 下一页地址
}
return SPDR; // 返回读出数据
}
接上篇程序:
/* 主函数 */
void main()
{
uchar i;
P1_0 = 1; // /RST引脚置高
/* SPIE=0,SPE=1,DORD=0,MSTR=1,CPOL=CPHA=1,SPR1=0,SPR0=1*/
SPCR=0x5d;
buf_start_addr = 0;
page_start_addr = 0;
page_addr = 0;
/* 获取需要写入IC卡的数据,存放在data_in[]中 */
getdata();
/* 将data_in[]中存放数据写入IC卡 */
for (i=0;i
{
write_to_IC(data_in[i]);
delay(2); // 延时2ms
}
delay(10); // 延时10ms
buf_start_addr = 0;
page_start_addr = 0;
page_addr = 0;
/* 数据读出IC卡,存放在data_out[]中 */
for (i=0;i
{
data_out[i] = read_from_IC();
delay(2); // 延时2ms
}
while(1);
}
关于控制,MCU就介绍完了,您有什么想法可以联系小编。