关键词:51
2.3 PC机I2C接口的实现
对MTV230进行在线编程,就要实现I2C通信协议。作为对MTV230进行编程的上位机PC来说,实现I2C有三种方法:
① 使用串口与单片机通信,再由单片机模拟I2C协议,成本高,I2C速度视使用的单片机而定;
② 对计算机的并口编程,模拟I2C协议,成本低,I2C速度一般;
③ 使用USB接口实现I2C协议,成本高,I2C速度快市场上可以买到。
由于MTV230进行编程时,I2C时钟速度最高为140kHz,速度要求不高,同时考虑到成本,决定使用方案②。
2.4 并口I2C硬件的实现
由于并口的每个引脚都是单向的,只能单向输出或者单向输入;而I2C又是一个双向协议,SDA与SCL都要求既能输入又能输出(有时要获取SCL当前状态),所以,SDA与SCL要分别各由一个输出引脚与一个输入引脚构成。为了增加并口的驱动能力与可靠性,设计电路如图1所示。其中并口的2、12引脚构成SDA脚,并口的3、10引脚构成SCL脚。

2.5 并口I2C软件的实现
在Win98中对并口的编程非常简单,通过在VC中内嵌汇编,使用IN与OUT指令访问与并口相对应的端口,设置相对应端口的值中的位就可以控制相应并口引脚的高低电平值。
例如:要将计算机并口1的第2引脚先置高再置低,汇编语言可以这样写:
MOV DX , 0x378 ;设置端口地址
MOV AL , 1 ;将待写入的位0的值写入AL中
OUT DX , AL ;将值送到相应端口
MOV AL , 0
OUT DX , AL
但在Win2000/XP中,由于系统加强了对硬件设备的保护,假如在程序中直接用IN与OUT指令访问并口,则会引发系统的非法操作;而并口访问又不像串口,直接可以使用Windows API函数,因而就必须使用驱动程序。可以到www.sstnet.com网站上去下载DriverLINX Port I/O Driver并口驱动程序。该程序可以免费复制与分发。有了这个驱动程序,在Win2000/XP下编写并口程序就十分方便。
安装该驱动程序后,在程序中包含相应的dlportio.h与dlportio.lib后就可以用DlPortReadPortUchar(IN ULONG Port)来读取端口的值(相当于汇编中的IN指令),用DlPortWritePortUchar(IN ULONG Port,IN UCHAR Value)来向一个端口写一个特定的值(相当于汇编中的OUT指令)。利用改变端口值中的一个位的值,可以使相应并口引脚输出高低电平,从而可以用其来模拟I2C协议,实现并口与单片机间的I2C通信。关于I2C协议,网上有很多资料,在此不再赘述。
2.6 程序说明
如前文所述,MTV230在进入在线编程模式后,就相当于一个I2C从设备,编程逻辑全都由在PC上运行的程序来实现。该程序采用VC6.0编写。编程程序的主界面如图2所示,主要模块如表1所列。由于用并口模拟I2C对单片机编程,会使该线程暂时处在阻塞状态,假如在主线程(UI)中实现该过程,则在对芯片编程时,程序的主界面就无法响应用户退出命令,所以采用了多线程程序结构,在一个工作线程实现该过程,使用户可以随时退出编程过程。