另需注意:当PC机 从双端口RAM中读数据时,应控制H3的为高电平,使H3输出呈高阻状态,以避免对读入数据 产生影响。而PC机向双端口RAM中写数据时,H3的应为低电平。
为方便实时性的要求,可将双端口RAM右侧的片选信号与相连(如图中虚线所示),借用PC机打印中断IRQ7采用中断方式进行并行通讯。单片机控制系统侧是主动方,单片机在每个控制周期最后将各项数据写入双端口RAM,然后由发出中断请求。
5 软件设计
下面给出用Turbo C2.0编写的非中断方式用于读写操作的两个函数。
Void readdata(unsigned char read_address_L, unsigned char read_address_H,
unsigned char read_data)
{
outportb(0x378,0x70); /*写双端口RAM控制字且使H3的为高电平*/
outportb(0x37a,0xf);
outportb(0x37a,0xb);
outportb(0x378,read_address_L);
outportb(0x37a,0xa);
outportb(0x37a,0xb);/*低8位地址送H2锁存*/
outportb(0x378,read_address_H);
outportb(0x37a,0xf);
outportb(0x37a,0xb); /*高3位地址送H1锁存*/
outportb(0x378,0x60); /*发读命令*/
outportb(0x37a,0xf);
outportb(0x37a,0xb);
read_data=inportb(0x379)0xf; /*读低4位数据*/
outportb(0x37a,0x9);
read_data+=(inportb(0x379)0xf)4; /*读高4位,再与低4位合并*/
}
Void writedata(unsigned char write_address_L, unsigned char write_address_H,
unsigned char write_data)
{
outportb(0x378,0x20); /*写双端口RAM控制字且使H3的为低电平*/
outportb(0x37a,0xf);
outportb(0x37a,0xb);
outportb(0x378,write_address_L);
outportb(0x37a,0xa);
outportb(0x37a,0xb); /*低8位地址送H2锁存*/
outportb(0x378,write_address_H);
outportb(0x37a,0xf);
outportb(0x37a,0xb); /*高3位地址送H1锁存*/
outportb(0x378,write_data);
outportb(0x37a,0x3);
outportb(0x37a,0xb); /*输出数据送H3锁存*/
outportb(0x378,0x0); /*写命令*/
outportb(0x37a,0xf);
outportb(0x37a,0xb);
}
6 结论
利用双端口RAM和PC机的并行打印机接口实现单片机与PC机之间并行通讯,具有接口电路简单、对PC机侧不需作任何改动、易于实现以及通讯速度快等优点,选用CPU为486DX4/10 0的PC机通讯速率可达30kbyte/s,大大超过了串行通讯。该方案已成功地应用于以MCS196KC 为控制核心的机车柴油机数字式电子调速器的研制中,通过保留的历史数据为进一步改善调速器性能,特别是控制算法打下了基础。另外,该方案与笔记本电脑相结合,在今后数字式 电子调速器产品中可望扩展成便携式调试监控工具。
参考文献
[1]吕景瑜.微型计算机接口技术[M].北京:科学出版社,1995.
[2]钱占军.利用笔记本电脑打印机口实现数据采集[J].电子技术应用,1995( 6).
[3]张利. PC机打印口的原理及应用开发[M].北京:清华大学出版社,1996.
|