如图3所示,单片机上电后完成系统初始化配置,初始化配置语句可以使用Configuration Wizard来进行配置,C8051F340的UART0接口(第二功能)固定在P0^4,P0^5,USB也只能使用特定端口,这里不需要对端口进行特别配置,将其端口模式设置为推拉即可,系统时钟设置为使用内部时钟模式,通过选择多路开关和倍频使USB时钟工作在48MHz。作为USB系统中的从设备,系统初始化设置完成后,执行等待命令DisplayLED(),然后在中断函数中根据USB中对要执行的操作进行判断。
UART0使用定时器2作为波特率发生器,并使能定时器0中断允许。USB初始化首先要调用USBXpress提供的API函数USB_CLOCk_Start(),然后对其端口初始化,这里使用USBXpress提供的默认设置即可。
由于温度数据为16位数据,串口每次接收其中8位,这里定义个数组In_PACket[3]后两位用来存放MSB,LSP的值,第一位存放传感器标志位。当In_Packet[3]数组数据更新后,调用USBXpress的API函数Block_Write(In_Packet,3)将温度数据发送给上位机。
2.3 上位机软件设计
USBXpress提供VC6.0进行USB通信的动态链接库,这里采取了静态方法加载动态链接库的形式,这样需要在编译选项中把USBXpress提供的SiUSBXp.lib路径添加进去,并在需要调用时添加头文件siusbxp.h。
程序依照USBXpress提供的API函数编写,在程序界面初始化时调用SI_GetNumDevICes()和SI_GetProductString()函数获取USB器件信息,由于传感器工作间隔200ms左右,这里设定50ms的定时器,在其响应函数中执行SI_Read(),当Buffer中有数据时就会将数据读取到定义好结构体当中去,并使用Format命令将其转换为字符串类型且按16进制方式将数据更新到编辑框中。
3 总结
系统基本实现了温度的采集和传输功能,并能通过VC6.0将数据保存,提供给matlab等数学分析软件进行数据分析,实验证明了利用CPLD可以很精确地实现对传感器的分时控制,C8051F340利用USBXpress提供的API进行USB开发极大地简化了开发流程。
实验只进行了简单的框架搭建,这里只是对基于CPLD进行时分复用方法采集传感器数据并且使用C8051F340利用USB总线与计算机进行通信的可行性进行了验证,完善稳定的系统仍需要大量的后期工作去完成。