例如DAC0832,PDIUSBD12等芯片,都是并行传输的,且芯片上都的WR和RD脚。在使用这种芯片时可能把WR和RD接到51的普通IO口上,用普通IO口来模拟芯片的读写时序来进行对芯片的操作(有些单片机只能用此方法如AVR单片机);也可将WR,RD接到单片机的WR和RD上,这时相当于把外部的芯片当外部存储器用。用这种方法还是很方便的,只要定义好外部芯片的地址。直接对该地址读写就可以了。
下面拿51单片机和PDIUSBD12芯片的读写来说明:
硬件接口:51的数据口(P0)和PDIUSBD12的数据口相连;两个WR,RD,ALE对应相连;PDIUSBD12的CS和P2.7口相连。
程序如下:
/*-------------------------------------------------------------------*/
# include #include #define D12_COMMAND xbyte[0x7f00] #define D12_DATA xbyte[0x7f01] void D12WriteCommand(uint8 Command) { D12_COMMAND=Command; } void D12WriteData(uint8 Data) { D12_DATA=Data; } uint8 ReadData(void) { uint8 i; i=D12_DATA; return i; } /*-------------------------------------------------------------------------------------------*/ 也可以 #include #include #define D12_COMMAND 0x7f00 #define D12_DATA 0x7f01 //输出数据 void D12WriteByte(uint16 Addr, uint8 Data) { *((uint8 xdata *) Addr) = Data; } //输入数据 uint8 D12ReadByte(uint16 Addr) { return *((uint8 xdata *) Addr); } uint16 D12_ReadChipID(void) { uint16 i,j; D12WriteByte(D12_COMMAND, 0xFD); i=D12ReadByte(D12_DATA); j=D12ReadByte(D12_DATA); i += (j<<8); return i; } 因篇幅问题不能全部显示,请点此查看更多更全内容