虚拟示波器的数据采集器解析方案
三、软件设计
单片机端软件:
单片机端软件主要完成数据采集控制、数据报告这两个功能。其中数据采集控制根据计算机端软件设定的增益、时基、触发等参数控制数据采集模块,这里面要用到计算机向单片机发送少量的控制信息;数据报告功能则需要单片机将缓存中的一个采集周期的所有数据传送给计算机端软件,这属于大批量数据的传输。我们把介绍的重点放在单片机与计算机的通信上面。
单片机与计算机通信是通过对CH371的寄存器操作实现的,有关其寄存器定义的具体情况请参考数据手册。
在应用中需要注意的是,CH371提供的单片机接收缓冲区为8个字节,多于8个字节的计算机下传数据被切分;而单片机的发送缓冲区也是8个字节,多于8个字节的上传数据需要分多次上传。另外,CH371的中断包括了上传及接受成功,中断发生后具体的情况需要由传输状态寄存器来辨别;同时其中断电平是单稳态的,一个事件发生后中断信号跳变,但仅维持一个短暂的脉冲便恢复,这是为了配合不同速度的处理器而作的处理。
单片机与计算机的USB通信主要功能子程序示例如下:(请在使用时加入CH371的相应寄存器的地址定义)
file://********** CH371初始化程序******************************
void ch371_init()
{
CH371_INT_SET=0; file://CH371中断数据设定寄存器的地址偏移
CH371_LENGTH=0X0F; file://置上传数据长度寄存器为15,表示暂时没有数据上传
save_length=0; file://保存下传数据长度
IT0=1; file://外部信号为下降沿触发
IE0=0; file://清中断标志
PX0=1; file://置高优先级
EX0=1; file://允许中断
}
file://***********上传数据子程序********************************
void ch371_upload(unsigned char len) file://参数传入数据长度
{
unsigned char i;
unsigned char *up_buf;
unsigned char *ch371_buf;
if(len!=0)
{
up_buf=ret_buffer; file://指向数据的地址
ch371_buf=CH371_BUFFER; file://指向数据缓冲区
for(i=0;i{
*ch371_buf=*up_buf; file://写入上传数据缓冲区
ch371_buf++; up_buf++;
}
}
CH371_LENGTH=len; file://写入本次数据的长度
}
c++相关文章:c++教程
晶振相关文章:晶振原理
评论