程序左端调用Configuration模块,进行串口的基本配置,比如BaudRate、数据位等,使这些参数与单片机里面的串口预定义设置相一致;右侧是Close模块,用于程序退出时,释放对串口的控制;中间是程序主体,包含对串口的读、写操作,实现对串口的双向通信。为了程序简洁、形象易懂,此次程序中用到了对LabVIEW子函数的调用,如RS 232-ini,RS 232W-R等模块,这些子函数就是用VISA串口节点来编写的,只是做了封装而已。
2.2 MCU的串口通信
上位机是通过串口将指令字符传递给单片机的。单片机对串口的读操作是通过中断的方式实现的,以字符为单位,每接收到一个8位的字符,MCU产生一个读中断RI=1,此时,单片机将接收到的字符储存起来,然后软件将RI复位置0,继续接收下一个字符。本系统中,所有计算机发送给单片机的指令均以‘?’结尾。MCU接收到‘?’后,产生一个终止位,然后与事先定义好的指令进行匹配,如果指令事先有定义,那么就会执行相应的操作。
2.3 MCU的I2C时序模拟
上位机向单片机发送指令数据,如果这些指令已在单片机中事先定义好,那么单片机将会通过模拟的SDA与SCL两个引脚,根据PCA9554/A的datasheet时序图,将控制命令数据传递给PCA9554/A,从而实现对PCA9554/A的I/O口进行控制。
2.3.1 PCA9554/A的写操作
根据I2C总线传输协议以及PCA9554/A的总线读写特性,可以看出:对PCA9554/A端口的写操作主要是通过对它的输出端口寄存器进行写操作的。具体过程为:在SCL为高电平期间,SDA由高电平向低电平转换作为起始信号,SDA由低电平向高电平转化则为停止信号。在起始条件后,必须是从机地址,对于PCA9554来说从地址的高4位是0100,而PCA9554A则是0111,A2,A1,A0的高低电平状态可以有8种组合,最后一位是读写选择位。从地址发送完后便是等待从机的应答信号ACK,从机正确应答后便开始由主机发送命令字节,接着又是等待从机应答,应答后便开始发送数据了。以下为PCA9554的写操作部分代码。