文档库 最新最全的文档下载
当前位置:文档库 › 基于Ucos的多通道数据采集系统

基于Ucos的多通道数据采集系统

基于Ucos的多通道数据采集系统
基于Ucos的多通道数据采集系统

课程设计(论文)任务书

信息工程学院物联网专业2014-2 班

一、课程设计(论文)题目基于Ucos的多通道数据采集系统

二、课程设计(论文)工作自2017 年 06 月 26 日起至2017 年06 月30日止。

三、课程设计(论文) 地点: 嵌入式系统实验室

四、课程设计(论文)内容要求:

1.本课程设计的目的

(1)使学生掌握嵌入式开发板(实验箱)各功能模块的基本工作原理;

(2)培养嵌入式系统的应用能力及嵌入式软件的开发能力;

(3)使学生较熟练地应用嵌入式操作系统及其API开发嵌入式应用软件;

(4)培养学生分析、解决问题的能力;

(5)提高学生的科技论文写作能力。

2.课程设计的任务及要求

1)基本要求:

(1)分析所设计嵌入式软件系统中各功能模块的实现机制;

(2)选用合适嵌入式操作系统及其API;

(3)编码实现最终的嵌入式软件系统;

(4)在实验箱上调试、测试并获得最终结果。

2)创新要求:

在基本要求达到后,可进行创新设计,如改善嵌入式软件实时性能;扩展嵌入式软件功能及改善其图形用户界面。

3)课程设计论文编写要求

(1)要按照书稿的规格打印誊写课程设计论文。

(2)论文包括目录、正文、小结、参考文献、谢辞、附录等(以上可作微调)。

(3)课程设计论文装订按学校的统一要求完成。

4) 课程设计评分标准:

(1)学习态度:20分;

(2)回答问题及系统演示:30分

(3)课程设计报告书论文质量:50分。

成绩评定实行优秀、良好、中等、及格和不及格五个等级。不及格者需重做。

5)参考文献:

(1)罗蕾.《嵌入式实时操作系统及应用开发》北京航空航天大学出版社

(2)Jean https://www.wendangku.net/doc/c513320035.html,brosse. 《嵌入式实时操作系统uC/OS-II》北京航空航天大学出版社

(3)王田苗.《嵌入式设计与开发实例》.北京航空航天大学出版社

(4)北京博创科技公司. 《嵌入式系统实验指导书》

6) 课程设计进度安排

(1)准备阶段(4学时):选择设计题目、了解设计目的要求、查阅相关资料。

(2)嵌入式软件设计分析阶段(4学时):程序总体设计、详细设计。

(3)嵌入式软件代码编写调试阶段(8学时):程序模块代码编写、调试、测试。

(4)撰写论文阶段(4学时):总结课程设计任务和设计内容,撰写课程设计论文。

7) 课程设计题目具体要求:

本题的具体任务是设计多任务的嵌入式软件——,通过分析、设计、编程、调试、测试等步骤,形成一个基于ucos可稳定运行的嵌入式多任务软件系统。

学生签名:

2017 年 6 月26 日

课程设计(论文)评审意见

(1)考勤(10分):优()、良()、中()、一般()、差();

(2)系统设计(20分):优()、良()、中()、一般()、差();

(3)编程调试(10分):优()、良()、中()、一般()、差();

(4)回答问题(15分):优()、良()、中()、一般()、差();

(5)论文撰写(35分):优()、良()、中()、一般()、差();

(6)创新思想(10分):优()、良()、中()、一般()、差();综合评定等级:

评阅人:职称:副教授

2017 年6 月30日

目录

一、课设目的及内容 (1)

1.1课设目的 (1)

1.2课设内容 (1)

二、设计的原理 (2)

2.1总体设计原理 (2)

2.2A/D转换器原理 (2)

2.3基于uc/os2II的系统程序流程 (3)

三、环境搭建及开发环境 (5)

四、主要程序代码设计 (7)

五、运行测试结果 (20)

六、心得体会 (22)

七、参考文献 (23)

一、课设目的及内容

1.1课设目的

在二十一世纪的今日,人们生活在一个信息的的时代,各种各样不同的信息给予我们很多不同的选择。对于信息的需求,各类人有着不同的需求,但是肯定的是,对于信息的重要性大家已经有了认识。数据采集已经成为一种专业的技术,在各个领域得到了广泛的应用。数据采集系统起源于20世纪50年代,并当即就获得了初步的认可,在很多的地方得到了运用。在60年代前后,国外就有了用于专业数据采集的系统。20世纪70年代后期,随着微型机的发展,诞生了采集器、仪表同计算机溶为一体的数据采集系统。由于这种数据采集系统的性能优良,超过了传统的自动检测仪表和专用数据采集系统,因而获得了惊人的发展。到了现在,经过更长久的发展,嵌入式系统已经走进千家万户,嵌入式的数据采集系统不仅功耗低,而且操作简单,正适合应用于在家中,路上或者生活中的各处。

1.2课设内容

一、基本要求(必做)

(1)求出四路通道的平均值,并绘制在显示屏上(平均值应该象其他通道的值一样,可以根据实时采集值的变化而变化)。

(2)报警,在超出阈值时报警一次,如果此后此通道的值不变则不再报警,若此通道的值被调小为小于阈值而后又被调为大于阈值,则再次报警

一次。

(3)设置时间和日期初值,并实时显示在LCD上(同各通道的值同屏显示)。

并能够在整点的时候发声提示。

二、提高要求(选做)

在一的基础上利用四路通道平均值的大小控制电机的转动速度,使电机实时转动。

二、设计的原理

2.1总体设计原理

本系统由硬件和软件两部分组成。硬件以AT89C51和12位ADC芯片AD574A为核心,具有键盘控制和液晶显示功能,并有一路数模转换输出。该系统还具有实时时间显示和看门狗功能,可以通过RS232和GPIB接口以便与外部(微机)通信。系统的软件以实时嵌入式操作系统uc/os2为基础,采用多任务机制,通过任务调度和任务监视,系统具有较好的实时性和安全性。uc/os2II是源码公开的实时嵌入式操作系统,采用优先级调度算法完成任务间的调度,并支持抢占式调度。uc/os2II 具有可裁减的体系结构,并具有内存管理、中断管理和任务控制块(TCB)扩展的功能。uc/os2II还提供很多系统服务,例如邮箱、消息队列、信号量等等。

2.2A/D转换器原理

主要介绍以下三种方法:逐次逼近法、双积分法、电压频率转换法

1)逐次逼近法

逐次逼近式A/D是比较常见的一种A/D转换电路,转换的时间为微秒级。

采用逐次逼近法的A/D转换器是由一个比较器、D/A转换器、缓冲寄存器及控制逻辑电路组成,如图所示。

基本原理是从高位到低位逐位试探比较,好像用天平称物体,从重到轻逐级增减砝码进行试探。

逐次逼近法的转换过程是:初始化时将逐次逼近寄存器各位清零;转换开始时,先将逐次逼近寄存器最高位置1,送入D/A转换器,经D/A转换后生成的模拟量送入比较器,称为 Vo,与送入比较器的待转换的模拟量Vi进行比较,若Vo

字量的输出。逐次逼近的操作过程是在一个控制电路的控制下进行的。

2)双积分法

采用双积分法的A/D转换器由电子开关、积分器、比较器和控制逻辑等部件组成。如图所示。基本原理是将输入电压变换成与其平均值成正比的时间间隔,再把此时间间隔转换成数字量,属于间接转换。

双积分法

积分法A/D转换的过程是:先将开关接通待转换的模拟量Vi,Vi采样输入到积分器,积分器从零开始进行固定时间T的正向积分,时间T到后,开关再接通与Vi 极性相反的基准电压VREF,将VREF输入到积分器,进行反向积分,直到输出为0V时停止积分。Vi越大,积分器输出电压越大,反向积分时间也越长。计数器在反向积分时间内所计的数值,就是输入模拟电压Vi所对应的数字量,实现了A/D 转换。

3)电压频率转换法

采用电压频率转换法的A/D转换器,由计数器、控制门及一个具有恒定时间的时钟门控制信号组成,它的工作原理是V/F转换电路把输入的模拟电压转换成与模拟电压成正比的脉冲信号。电压频率转换法的工作过程是:当模拟电压Vi加到V/F 的输入端,便产生频率F与Vi成正比的脉冲,在一定的时间内对该脉冲信号计数,时间到,统计到计数器的计数值正比于输入电压Vi,从而完成A/D转换。

2.3基于uc/os2II的系统程序流程

基于uc/os2II的程序流程如图1所示。程序中,每个模块对应一个任务,彼此之间是并行的,但每个模块都对应着一个不同的优先级,由操作系统进行调度运行。系统可以通过监控模块对其他模块的工作进行监控,从而减少看门狗的复位次数。而且通过uc/os2II内核的任务调度,系统的实时性会提高很多。

图1 基于uc/os2II的程序流程

图2 传统程序流程图

三、环境搭建及开发环境

系统的硬件组成框图如图3所示。信号经前向处理后,通过多路模拟开关和采样保持器,输入到A/D转换芯片进行数据采集。经A/D转换后的数字量被单片机读入,经处理后由通信接口读入微机进行进一步的处理和分析,同时也可由D/A芯片进行数/模转换得到一路模拟信号。液晶有系统提示和实时时间显示,可以通过键盘进行选择和控制。

图3 系统组成框图

系统信号前向处理电路包括自动增益控制和滤波电路,8路模拟开关CD4051。A/D 转换采用AD公司的12位逐次逼近式ADC,适合高精度数据采集,转换时间可达

25us;D/A转换采用美国国民半导体公司的DAC0832芯片。系统外部扩展32kROM 和RAM,供缓存数据和存贮程序。液晶采用日本DMC系列产品中的DMC24138,可以在一行上显示24个5×11点阵字符。时间芯片采用的是M48T86,具有实时时间和日历显示功能。整个系统采用全地址译码法,外部设备和存储器统一编址。CPU访问外部存贮器的一切指令均可用于对I/O端口的访问,大大增强了CPU对外设端口信息的处理能力。

1、A/D转换器

在本设计所选用的LPC2138硬件系统中带有A/D转换器. 特性:

(1)、10位逐次逼近式模数转换器

(2)、8个管脚复用为输入脚

(3)、掉电模式

(4)、测量范围:0~3V

(5)、10位转换时间>=2.44US

(6)、一个或多个输入的Burst转换模式

(7)、可选择由输入跳变或定时器匹配信号触发转换

(8)、2个转换器的全局启动命令

描述: A/D转换器的基本时钟由VPB时钟提供。每个转换器包含一个可编程分频器,可将时钟调整至逐步逼近转换所需的4.5MHZ。完全满足精度要求的转换需要11个这样的时钟。

2、4X4键盘

键盘按与微控制器的连接方式,其结构可分为线性键盘和矩阵键盘两种形式。线性键盘由若干个独立的案件组成,每个按键的一端与微控制器的一个I/O口相连。有多少个键就要有多少根线与微控制器的I/O口相连,适用于按键少的场合。矩阵键盘的按键按N行M列排列。根据矩阵键盘的识键和译键的不同,矩阵键盘又可以分为非编码键盘和编码键盘两种。非编码键盘主要用软件的方法识键和译键。根据扫描方法的不同,可以分为行扫描法,列扫描法和反转法三种。在本设计中,使用了节省口线的行扫描法来检测键盘,与4X4的矩阵键盘接口只需要8根口线,设置KEY1~KEY为输出扫描码的端口,KEYA~KEYB为键值读入口。

3、LCD显示模块

在这里应用了LCD显示模块来进行数据的输出。GUI即图形用户接口,是操作系统和用户的人机接口。 GUI是一种嵌入式应用中的图形支持系统。它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器和LCD控制器的图形用户接口,它适用单任务或是多任务系统环境,并适用于任意LCD控制器和CPU下任何尺寸的真实显示或是虚拟显示。它的设计结构是模块化的,由不同模块中的不同层组成,由一个LCD驱动层来包含所有对LCD的具体图形操作。使用GUI来控制LCD的显示,不仅代码容易,简单,而且在任何的CPU上都能运行。所以本人在这里选择了这样的方式。

四、主要程序代码设计

完成要求1:求出四路通道的平均值,并绘制在显示屏上(平均值应该象其他通道的值一样,可以根据实时采集值的变化而变化)。

#include"..\ucos-ii\includes.h" /* uC/OS interface */

#include "..\ucos-ii\add\osaddition.h"

#include "..\inc\drv.h"

#include

#include"..\inc\drv\ad.h"

#include "..\inc\drv\IIS-S3C44B0.h"

#include "..\inc\drv\OSFile.h"

#define ID_ChannelTextCtrl 101

#define ID_ValueTextCtrl 102

#define Draw_Wnd_ID 104

PTextCtrl pChannelTextCtrl,pValueTextCtrl;

float result_AD0,result_AD1,result_AD2,result_AD3,average;

int WarnningData[5]={33,33,33,33,33};

int edit[2]={0,0};

int buffer[AUDIO_IN_BUFFERSIZE*20];

///******************任务定义***************///

OS_STK Main_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆栈

void Main_Task(void *Id); //Main_Test_Task

#define Main_Task_Prio 12

OS_STK Display_Task_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆栈

void Display_Task(void *Id); //Main_Test_Task

#define Display_Task_Prio 20

OS_STK AD0_Task_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆栈

void AD0_Task(void *Id); //Main_Test_Task

#define AD0_Task_Prio 21

OS_STK AD1_Task_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆栈

void AD1_Task(void *Id); //Main_Test_Task

#define AD1_Task_Prio 22

OS_STK AD2_Task_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆栈

void AD2_Task(void *Id); //Main_Test_Task

#define AD2_Task_Prio 23

OS_STK AD3_Task_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆栈

void AD3_Task(void *Id); //Main_Test_Task

#define AD3_Task_Prio 24

/**************已经定义的OS任务*************

tcp监控任务11

以太网物理层监控任务8

触摸屏任务9

键盘任务10

lcd刷新任务59

系统任务 1

*****************************************************/

///*****************事件定义*****************///

OS_EVENT *Nand_Rw_Sem; //Nand_Flash读写控制权旗语

//and you can use it as folloeing:

// Nand_Rw_Sem=OSSemCreate(1); //创建Nand-Flash读写控制权旗语,初值为1满足互斥条件//

// OSSemPend(Nand_Rw_Sem,0,&err);

// OSSemPost(Nand_Rw_Sem);

OS_EVENT *Uart_Rw_Sem; //Uart读写控制权旗语

//and you can use it as folloeing:

// Uart_Rw_Sem=OSSemCreate(1); //创建Uart读写控制权旗语,初值为1满足互斥条件//

// OSSemPend(Uart_Rw_Sem,0,&err);

// OSSemPost(Uart_Rw_Sem);

//////////////////////////////////////////////////////////

void initOSGUI() //初始化操作系统的图形界面

{

initOSMessage();

initOSList();

initOSDC();

initOSCtrl();

initOSFile();

}

/////////////////////////////////////////////////////

// Main function. //

////////////////////////////////////////////////////

int Main(int argc, char **argv)

{

ARMTargetInit(); //开发板初始化

OSInit(); //操作系统初始化

uHALr_ResetMMU();//复位MMU

LCD_Init(); //初始化LCD模块

LCD_printf("LCD initialization is OK\n");//向液晶屏输出数据

LCD_printf("320 x 240 Text Mode\n");

initOSGUI();//初始化图形界面

LoadFont();//调Unicode字库

LoadConfigSys();//使用config.sys文件配置系统设置

LCD_printf("Create task on uCOS-II...\n");

OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_Stack[STACKSIZE*8-1], Main_Task_Prio);// 创建系统任务

OSTaskCreate(Display_Task,(void *)0, (OS_STK *)&Display_Task_Stack[STACKSIZE-1], Display_Task_Prio);// 20

OSTaskCreate(AD0_Task,(void *)0, (OS_STK *)&AD0_Task_Stack[STACKSIZE-1], AD0_Task_Prio);

OSTaskCreate(AD1_Task,(void *)0, (OS_STK *)&AD1_Task_Stack[STACKSIZE-1], AD1_Task_Prio);

OSTaskCreate(AD2_Task,(void *)0, (OS_STK *)&AD2_Task_Stack[STACKSIZE-1], AD2_Task_Prio);

OSTaskCreate(AD3_Task,(void *)0, (OS_STK *)&AD3_Task_Stack[STACKSIZE-1], AD3_Task_Prio);

OSAddTask_Init();//创建系统附加任务

LCD_printf("Starting uCOS-II...\n");

LCD_printf("Entering graph mode...\n");

LCD_ChangeMode(DspGraMode);//变LCD显示模式为文本模式

InitRtc();//初始化系统时钟

Nand_Rw_Sem=OSSemCreate(1); //创建Nand-Flash读写控制权旗语,初值为1满足互斥条件//

OSStart();//操作系统任务调度开始

//不会执行到这里

return 0;

}

////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////

void Wave();

//void init_ADdevice()

//{

//rADCPSR=20;

//rADCCON=ADCCON_SLEEP;

//}

U8 onKey(int nkey, int fnkey)

{

static BOOLEAN input=FALSE;

static int EditNumber=1;

if(EditNumber==1)

{

switch(nkey)

{

case 14://OK

if(!input)

{

SetWndCtrlFocus(NULL, ID_ChannelTextCtrl);

pChannelTextCtrl->text[0]=0; //清空文本框

SetTextCtrlEdit(pChannelTextCtrl, TRUE);

DrawTextCtrl(pChannelTextCtrl);

input=TRUE;

edit[0]=1;

}

else

{

SetTextCtrlEdit(pChannelTextCtrl, FALSE);

DrawTextCtrl(pChannelTextCtrl);

input=FALSE;

edit[0]=0;

EditNumber=2;

}

return TRUE;

case 16://Cancel

SetTextCtrlEdit(pChannelTextCtrl, FALSE);

input=FALSE;

edit[0]=0;

EditNumber=2;

return TRUE;

}

}

else if(EditNumber==2)

{

switch(nkey)

{

case 14://OK

if(!input)

{

SetWndCtrlFocus(NULL, ID_ValueTextCtrl);

pValueTextCtrl->text[0]=0; //清空文本框

SetTextCtrlEdit(pValueTextCtrl, TRUE);

DrawTextCtrl(pValueTextCtrl);

input=TRUE;

edit[1]=1;

}

else

{

SetTextCtrlEdit(pValueTextCtrl, FALSE);

DrawTextCtrl(pValueTextCtrl);

input=FALSE;

edit[1]=0;

EditNumber=1;

WarnningData[ Unicode2Int(pChannelTextCtrl->text)]=Unicode2Int(pValueTextCtrl->text);

}

return TRUE;

case 17://Cancel

SetTextCtrlEdit(pValueTextCtrl, FALSE);

DrawTextCtrl(pValueTextCtrl);

input=FALSE;

edit[1]=0;

EditNumber=1;

return TRUE;

}

}

return FALSE;

}

void Main_Task(void *Id) //Main_Test_Task

{

POSMSG pMsg;

init_ADdevice(20,ADCCON_SLEEP);

for(;;)

{

POS_Ctrl pCtrl;

pMsg=WaitMessage(0);

if(pMsg->pOSCtrl)

{

if(pMsg->pOSCtrl->CtrlMsgCallBk)

(*pMsg->pOSCtrl->CtrlMsgCallBk)(pMsg);

}

else

{

switch(pMsg->Message)

{

case OSM_KEY:

pCtrl=GetCtrlfromID(NULL, GetWndCtrlFocus(NULL));

if(pCtrl->CtrlType==CTRLTYPE_WINDOW)

{

if((((PWnd)pCtrl)->style&WND_STYLE_MODE)==WND_STYLE_MODE)

{

//焦点是有模式窗口,消息直接传递过去

OSOnSysMessage(pMsg);

break;

}

}

if(onKey(pMsg->WParam,pMsg->LParam) )

break;

default:

OSOnSysMessage(pMsg);

break;

}

}

DeleteMessage(pMsg);

OSTimeDly(200);

}

}

void Display_Task(void * Id) //Main_Test_Task

{

PDC pdc;

int a0,a1,a2,a3,a4;

structRECT ChannelTextCtrl_Rect,ValueTextCtrl_Rect,Draw_Wnd_Rect;

char Channel_Caption_8[10]="Channel:";

char Value_Caption_8[10]="Value:";

char Draw_Wnd_Caption_8[]="Draw Window";

char vol_8[]="Vol";

char chn_8[]="Chn";

char chn0_8[]="0";

char chn1_8[]="1";

char chn2_8[]="2";

char chn3_8[]="3";

char chn4_8[]="ave";

char vol_10_8[]="10";

char vol_20_8[]="20";

char vol_30_8[]="30";

u16 Channel_Caption_16[10];

u16 Value_Caption_16[10];

U16 Draw_Wnd_Caption_16[20];

u16 vol_16[5];

u16 chn_16[5];

u16 chn0_16[2];

u16 chn1_16[2];

u16 chn2_16[2];

u16 chn3_16[2];

u16 chn4_16[5];

u16 vol_10_16[3];

u16 vol_20_16[3];

u16 vol_30_16[3];

Wnd Draw_Wnd;

PWnd pDraw_Wnd;

int warnning[5]={1,1,1,1,1};

BOOLEAN IsEdit=0;

pdc=CreateDC();

pDraw_Wnd=&Draw_Wnd;

strChar2Unicode(Draw_Wnd_Caption_16, Draw_Wnd_Caption_8);

strChar2Unicode(Channel_Caption_16, Channel_Caption_8);

strChar2Unicode(Value_Caption_16, Value_Caption_8);

strChar2Unicode(chn_16, chn_8);

strChar2Unicode(vol_16, vol_8);

strChar2Unicode(chn0_16, chn0_8);

strChar2Unicode(chn1_16, chn1_8);

strChar2Unicode(chn2_16, chn2_8);

strChar2Unicode(chn3_16, chn3_8);

strChar2Unicode(chn4_16, chn4_8);

strChar2Unicode(vol_10_16,vol_10_8);

strChar2Unicode(vol_20_16,vol_20_8);

strChar2Unicode(vol_30_16,vol_30_8);

SetRect(&ChannelTextCtrl_Rect, 10,50,55,75);

SetRect(&ValueTextCtrl_Rect, 10,125,55,150);

SetRect(&Draw_Wnd_Rect, 74, 9, 301, 216);

pChannelTextCtrl=CreateTextCtrl(ID_ChannelTextCtrl, &ChannelTextCtrl_Rect, FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL,NULL);

pValueTextCtrl=CreateTextCtrl(ID_ValueTextCtrl, &ValueTextCtrl_Rect, FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL,NULL);

pDraw_Wnd=CreateWindow(Draw_Wnd_ID, &Draw_Wnd_Rect, FONTSIZE_SMALL,WND_STYLE_MODELESS, Draw_Wnd_Caption_16, NULL);

ClearScreen();

TextOut(pdc, 55, 10, vol_16, TRUE, FONTSIZE_SMALL);

TextOut(pdc, 290, 215, chn_16, TRUE, FONTSIZE_SMALL);

TextOut(pdc, 110, 215, chn0_16, TRUE, FONTSIZE_SMALL);

TextOut(pdc, 150, 215, chn1_16, TRUE, FONTSIZE_SMALL);

TextOut(pdc, 190, 215, chn2_16, TRUE, FONTSIZE_SMALL);

TextOut(pdc, 230, 215, chn3_16, TRUE, FONTSIZE_SMALL);

TextOut(pdc, 270, 215, chn4_16, TRUE, FONTSIZE_SMALL);

TextOut(pdc, 60, (int)(205-1*200/3.3), vol_10_16, TRUE, FONTSIZE_SMALL);

TextOut(pdc, 60, (int)(205-2*200/3.3), vol_20_16, TRUE, FONTSIZE_SMALL);

TextOut(pdc, 60, (int)(205-3*200/3.3), vol_30_16, TRUE, FONTSIZE_SMALL); DrawTextCtrl(pChannelTextCtrl);

DrawTextCtrl(pValueTextCtrl);

a0=0;a1=0;a2=0;a3=0;a4=0;

for(;;)

{ average= (result_AD0+ result_AD1+ result_AD2+ result_AD3)/4;

TextOut(pdc, 10, 35, Channel_Caption_16, TRUE, FONTSIZE_SMALL);

TextOut(pdc, 10, 110, Value_Caption_16, TRUE, FONTSIZE_SMALL);

if(edit[0]==1)

{

if(IsEdit==1)

{

FillRect(pdc, 10, 35, 60, 45, GRAPH_MODE_NORMAL, COLOR_WHITE);

IsEdit=0;

}

else

{

IsEdit=1;

}

}

if(edit[1]==1)

{

if(IsEdit==1)

{

FillRect(pdc, 10, 110, 60, 120, GRAPH_MODE_NORMAL, COLOR_WHITE);

IsEdit=0;

}

else

{

IsEdit=1;

}

}

DrawWindow(pDraw_Wnd);

MoveTo(pdc, 75, 15);

LineTo(pdc, 80,10);

LineTo(pdc, 85, 15);

MoveTo(pdc,80 , 10);

LineTo(pdc, 80, 210);

LineTo(pdc, 300, 210);

MoveTo(pdc, 295, 205);

LineTo(pdc, 300, 210);

LineTo(pdc, 295, 215);

MoveTo(pdc, 80, (int)(210-1*200/3.3));

LineTo(pdc, 300, (int)(210-1*200/3.3));

MoveTo(pdc, 80, (int)(210-2*200/3.3));

LineTo(pdc, 300, (int)(210-2*200/3.3));

MoveTo(pdc, 80, (int)(210-3*200/3.3));

LineTo(pdc, 300, (int)(210-3*200/3.3));

if(result_AD1>WarnningData[1])

if(a0==0){Wave();a0=1;}

if(result_AD2>WarnningData[2])

if(a1==0){Wave();a1=1;}

if(result_AD0<=WarnningData[0])

{

FillRect(pdc, 105, (int)(210-result_AD0*20/3.3), 120, 210,GRAPH_MODE_NORMAL, COLOR_BLACK);

}

else

{

if(warnning[0]==1)

{

FillRect(pdc, 105,(int)(210-result_AD0*20/3.3), 120,210, GRAPH_MODE_NORMAL,COLOR_BLACK);

warnning[0]=0;

}

else

{

warnning[0]=1;

FillRect(pdc, 105,(int)(210-WarnningData[0]*20/3.3), 120,210, GRAPH_MODE_NORMAL,COLOR_BLACK);

}

}

if(result_AD1<=WarnningData[1])

{

FillRect(pdc, 145,(int)(210-result_AD1*20/3.3), 160,210, GRAPH_MODE_NORMAL,COLOR_BLACK);

}

else

{

if(warnning[1]==1)

{

FillRect(pdc, 145, (int)(210-result_AD1*20/3.3), 160,210, GRAPH_MODE_NORMAL,COLOR_BLACK);

warnning[1]=0;

}

else

{

warnning[1]=1;

FillRect(pdc, 145,(int)(210-WarnningData[1]*20/3.3), 160,210, GRAPH_MODE_NORMAL,COLOR_BLACK);

}

}

if(result_AD2<=WarnningData[2])

{

FillRect(pdc, 185, (int)(210-result_AD2*20/3.3), 200, 210,GRAPH_MODE_NORMAL, COLOR_BLACK);

}

else

{

if(warnning[2]==1)

{

FillRect(pdc, 185,(int)(210-result_AD2*20/3.3), 200,210, GRAPH_MODE_NORMAL,COLOR_BLACK);

warnning[2]=0;

}

else

{

warnning[2]=1;

FillRect(pdc, 185,(int)(210-WarnningData[2]*20/3.3), 200,210, GRAPH_MODE_NORMAL,COLOR_BLACK);

}

}

if(result_AD3<=WarnningData[3])

{

FillRect(pdc, 225, (int)(210-result_AD3*20/3.3), 240, 210,GRAPH_MODE_NORMAL, COLOR_BLACK);

}

else

{

if(warnning[3]==1)

{

FillRect(pdc, 225,(int)(210-result_AD3*20/3.3), 240,210,

GRAPH_MODE_NORMAL,COLOR_BLACK);

warnning[3]=0;

}

else

{

warnning[3]=1;

FillRect(pdc, 225,(int)(210-WarnningData[3]*20/3.3), 240,210, GRAPH_MODE_NORMAL,COLOR_BLACK);

}

}

if(average<=WarnningData[4])

{

FillRect(pdc, 265, (int)(210-average*20/3.3), 280, 210,GRAPH_MODE_NORMAL, COLOR_BLACK);

}

else

{

if(warnning[5]==1)

{

FillRect(pdc, 265, (int)(210-average*20/3.3), 280, 210, GRAPH_MODE_NORMAL,COLOR_BLACK);

warnning[5]=0;

}

else

{

warnning[5]=1;

FillRect(pdc, 265, (int)(210-WarnningData[4]*20/3.3), 280, 210, GRAPH_MODE_NORMAL,COLOR_BLACK);

}

}

OSTimeDly(500);

}

}

void AD0_Task(void * Id) //Main_Test_Task

{

for(;;)

{

result_AD0=GetADresult(0)*33/1024;

//Uart_Printf("result_AD0=%d\n",result_AD0);

OSTimeDly(100);

}

}

8路数据采集系统

单片机课程设计 课题名称运用8051、ADC0809设计一个8路数据采集系统院校兴湘学院 专业机械设计制造及其自动化班级3班 学生姓名曾繁宁 学号2010963036 指导教师李玉声 2013年12月29 日

1.设计内容 以pc机为控制器,采用中断方式进行8通道数据采集, 2.设计要求 要求利用ADC 0809作A/D转换器,设计相应的接口电路,画出原理图并给出采用中断方式下的数据采集程序. 3.系统总体设计步骤 第一步:信号调理电路 第二步:8路模拟信号的产生与A/D转换器 被测电压要求为0~5V的直流电压,可通过电位器调节产生。 考虑本设计的实际需要,我选择八位逐次比较式A/D转换器(ADC0809)。 第三步:发送端的数据采集与传输控制器 第四步:人机通道的接口电路 第五步:数据传输接口电路 用单片机作为控制系统的核心,处理来自ADC0809的数据。经处理后通过串口传送,由于系统功能简单,键盘仅由两个开关和一个外部中断组成,完成采样通道的选择,单片机通过接口芯片与LED数码显示器相连,驱动显示器相应同采集到的数据。 经过分析,本系统数据采集部分核心采用ADC0809,单片机系统采用8051构成的最小系统,用LED动态显示采集到的数据。数据采集与传输系统一般由信号调理电路,多路开关,采样保持电路,A/D,单片机,电平转换接口,接收端(单片机、PC或其它设备)组成。本设计没有通信部分。系统框图如下图所示。

4.硬件系统的设计 4.1信号调理 信号调理的任务:将被测对象的输出信号变换成计算机要求的输入信号。多路数据采集输入通道的结构图如下图: 图5-1-1多路数据采集输入通道结构图 注:缓慢变化的信号和直流信号,采样保持电路可以省略。 4.2 A/D转换器的选取 转换速度是指完成一次A/D转换所需时间的倒数,是一个很重要的指标。A/D 转换器型号不同,转换速度差别很大。通常,8位逐次比较式ADC的转换时间为100us左右。由于本系统的控制时间允许,可选8位逐次比较式A/D转换器。

实时操作系统UCOS-II,学会RTOS给你的身价增值

实时操作系统UCOS-II,学会RTOS给你的身价增值 如果,你最近关注一些嵌入式招聘职位描述,你可能会经常看到看到使用过uCOS、Vxworks、QNX等RTOS者优先。 随便打开一个20K的嵌入式开发工作职责: 你会发现熟悉RTOS的开发、移植、剪裁真的很吃香! 今天,我们就来介绍一下实时操作系统UCOS-II。 一、嵌入式操作系统概览 嵌入式操作系统的主要好处就是屏蔽了底层硬件的差别,给上层应用提供统一的接口,并管理进程调度和资源(如CPU时间、内存)分配等。并且可以充分利用硬件资源,如在单任务时(大循环结构,如大部分51程序)遇到delay函数时,CPU在空转。而在多任务系统,遇到delay或需等待资源时系统会自动运行下一个任务,等条件满足再回来运行先前的任务,这样就充分利用了CPU,提高了效率。 uC/OS操作系统与裸机程序的最大不同点就在于uC/OS有任务调度,可以根据任务的重要程度(优先级)优先执行重要的任务,从而确保能及时处理最重要的数据。(所以对于一个系统有必要使用OS的判断是能否划分一个个的任务,并且各任务间的耦合很小)可以思考下裸机程序中断的时候发生的过程。利用堆栈可以很自由的在A、B中切换,如果切换足够快,A、B看以来好像同时在执行,这就是并行,A、B就是任务。如果这个切换操作放到定时器函数中来做,就可以严格按照时间来切换。另外,各个任务之间有存在一定的关系,有逻辑上的先后等,必须引进全局的结构体、变量来标记一些信息,全局的这些数据是不会被释放的,所以所有的任务可以去通过读、写这些数据来实现各个程序块交流信息,实现所谓的同步、互斥。这就是操作系统的原理,而这些不同的通信方式按功能细分就成事件管理、内存管理等。

基于Ucos的多通道数据采集系统(DOC)(可编辑修改word版)

课程设计(论文)任务书 信息工程学院物联网专业2014-2 班 一、课程设计(论文)题目基于Ucos 的多通道数据采集系统 二、课程设计(论文)工作自2017 年06 月26 日起至2017 年06 月30 日止。三、 课程设计(论文) 地点:嵌入式系统实验室 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)使学生掌握嵌入式开发板(实验箱)各功能模块的基本工作原理; (2)培养嵌入式系统的应用能力及嵌入式软件的开发能力; (3)使学生较熟练地应用嵌入式操作系统及其API 开发嵌入式应用软件; (4)培养学生分析、解决问题的能力; (5)提高学生的科技论文写作能力。 2.课程设计的任务及要求 1)基本要求: (1)分析所设计嵌入式软件系统中各功能模块的实现机制; (2)选用合适嵌入式操作系统及其API; (3)编码实现最终的嵌入式软件系统; (4)在实验箱上调试、测试并获得最终结果。 2)创新要求: 在基本要求达到后,可进行创新设计,如改善嵌入式软件实时性能;扩展嵌入式软件功能及改善其图形用户界面。 3)课程设计论文编写要求 (1)要按照书稿的规格打印誊写课程设计论文。 (2)论文包括目录、正文、小结、参考文献、谢辞、附录等(以上可作微调)。 (3)课程设计论文装订按学校的统一要求完成。 4)课程设计评分标准: (1)学习态度:20 分; (2)回答问题及系统演示:30 分 (3)课程设计报告书论文质量:50 分。 成绩评定实行优秀、良好、中等、及格和不及格五个等级。不及格者需重做。 5)参考文献: (1)罗蕾.《嵌入式实时操作系统及应用开发》北京航空航天大学出版社 (2)Jean https://www.wendangku.net/doc/c513320035.html,brosse. 《嵌入式实时操作系统uC/OS-II》北京航空航天大学出版社 (3)王田苗.《嵌入式设计与开发实例》.北京航空航天大学出版社 (4)北京博创科技公司. 《嵌入式系统实验指导书》

数据采集系统简介研究意义和应用.doc

一前言 1.1 数据采集系统简介 数据采集,是指从传感器和其它待测设备等模拟和数字被测单元中自动采集信息的过程。数据采集系统是结合基于计算机(或微处理器)的测量软硬件产品来实现灵活的、用户自定义的测量系统。该数据采集系统是一种基于TLC549模数转换芯片和单片机的设备,可以把ADC采集的电压信号转换为数字信号,经过微处理器的简单处理而交予数码管实现电压显示功能,并且通过与PC的连接可以实现计算机更加直观化显示。 1.2 数据采集系统的研究意义和应用 在计算机广泛应用的今天,数据采集的在多个领域有着十分重要的应用。它是计算机与外部物理世界连接的桥梁。利用串行或红外通信方式,实现对移动数据采集器的应用软件升级,通过制订上位机(PC)与移动数据采集器的通信协议,实现两者之间阻塞式通信交互过程。在工业、工程、生产车间等部门,尤其是在对信息实时性能要求较高或者恶劣的数据采集环境中更突出其应用的必要性。例如:在工业生产和科学技术研究的各行业中,常常利用PC或工控机对各种数据进行采集。这其中有很多地方需要对各种数据进行采集,如液位、温度、压力、频率等。现在常用的采集方式是通过数据采集板卡,常用的有A/D 卡以及422、485等总线板卡。卫星数据采集系统是利用航天遥测、遥控、遥监等技术,对航天器远地点进行各种监测,并根据需求进行自动采集,经过卫星传输到数据中心处理后,送给用户使用的应用系统。 1.3 系统的主要研究内容和目的 本课题研究内容主要包括:TLC549的工作时序控制,常用的单片机编辑C语言,VB 串口通信COMM控件、VB画图控件的运用等。 本课题研究目的主要是设计一个把TLC549(ADC)采集的模拟电压转换成八位二进制数字数据,并把该数据传给单片机,在单片机的控制下在实验板的数码管上实时显示电压值并且与计算机上运行的软件示波器连接,实现电压数据的发送和接收功能。

基于LabVIEW的多通道数据采集系统信号处理

目:基于LabVIEW的多通道数据采集系统 2010 年 03 月 20 日 互联网会议PPT资料大全技术大会产品经理大会网络营销大会交互体验大会 毕业设计开题报告 1.结合毕业论文课题情况,根据所查阅的文献资料,撰写2000字左右的文献综述: 文献综述 1. 本课题的研究背景及意义 近年来,以计算机为中心、以网络为核心的网络化测控技术与网络化测控得到越来越多的应用,尤其是在航空航天等国防科技领域。网络化的测控系统大体上由两部分组成:测控终端与传输介质,随着个人计算机的高速发展,测控终端的位置原来越多的被个人计算机所占据。其中,软件系统是计算机系统的核心,设置是整个测控系统的灵魂,应用于测控领域的软件系统成为监控软件。传输介质组成的通信网络主要完成数据的通信与采集,这种数据采集系统是整个测控系统的主体,是完成测控任务的主力。因此,这种“监控软件-数据采集系统”构架的测控系统在很多领域得到了广泛的应用,并形成了一套完整的理论。 2. 本课题国内外研究现状 早期的测控系统采用大型仪表集中对各个重要设备的状态进行监控,通过操作盘进行集中式操作;而计算机系统是以计算机为主体,加上检测装置、执行机构与被控对象共同构成的整体。系统中的计算机实现生产过程的检测、监督和控制功能。由于通信协议的不开放,因此这种测控系统是一个自封闭系统,一般只能完成单一的测控功能,一般通过接口,如RS-232或GPIB接口可与本地计算机或其他仪器设备进行简单互联。随着科学技术的发展,在我国国防、通信、航空、气象、环境监测、制造等领域,要求测控和处理的信息量越来越大、速度越来越快。同时测控对象的空间位置日益分散,测控任务日益复杂,测控系统日益庞大,因此提出了测控现场化、远程化、网络化的要求。传统的单机仪器已远远不能适应大数量、高质量的信息采集要求,产生由计算机控制的测控系统,系统内单元通过各种总线互联,进行信息的传输。 网络化的测控技术兴起于国外,是在计算机网络技术、通信技术高速发展,以及对大容量分布的测控的大量需求背景下发展起来,主要分为以下几个阶段:第一阶段: 起始于20世纪70年代通用仪器总线的出现,GPIB实现了计算机与测控系统的首次 结合,使得测量仪器从独立的手工操作单台仪器开始总线计算机控制的多台仪器的测控系统。此阶段是网络化测控系统的雏形与起始阶段。第二阶段:

8路数据采集及报警控制系统 ADC0809

安徽建筑工业大学 计算机控制技术 课程设计 课题名称8路数据采集及报警控制系统 系别电子与信息工程学院 专业电子信息工程 班级10城建电子(2)班 姓名邵磊 学号10205900235 指导老师严辉夏巍丁刚 时间2013年6月17日至 2013年6月30日

目录 一、总体设计: 1.1 设计思路 1.2 课题目的 二、方案论证: 2.1 A/D模数转换的选择 2.2 单片机的选择 2.3 按键选择 2.4 系统框图 三、硬件电路设计: 3.1 单片机介绍 3.2 ADC0809结构功能 3.3 ADC0809的工作时序 3.4 ADC0809工作过程 四、系统程序设计: 4.1 程序流程框图 4.2 主程序 五、结束语 六、附录

一、总体设计 1.1 设计思路 我们选择单片机与A/D转换芯片结合的方法实现本设计。使用的基本元器件是:AT89C52单片机,ADC0809模数转换芯片,LCD显示器,按键,电容,电阻,晶振等。 数字电压测量电路由A/D转换、数据处理及显示控制等组成。A/D 转换由集成电路ADC0809完成。ADC0809具有8路拟输入端口,地址线(23~- 25脚)可决定对哪一路模拟输入作A/D换。22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。6脚为测试控制,当输入一个2uS宽高电平脉冲时,就开始A/D转换。7脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平。9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。10脚为0809的时钟输入端。单片机的P1.5~P1.7、P3端口作1602液晶显示控制。P2端口作A/D转换数据读入用,P0端口用作0809的A/D转换控制。 通过对单片机p3.5口置低电平控制LED亮灯,p3.4口置高电平

基于STM32单片机的多路数据采集系统设计

基于STM32单片机的多路数据采集系统设计 The Design Of Multi-channel Data Acquisition System Based On STM32 中国地质大学(北京) 指导教师 2013.3.31

摘要 本文是基于ARM Cortex-M3的STM32系列嵌入式微控制器的应用实践,介绍了基于STM32单片机的数据采集的硬件设计和软件设计,数据采集系统是模拟域与数字域之间必不可少的纽带,它的存在具有着非常重要的作用。本文介绍的重点是数据采集系统,而该系统硬件部分的重心在于单片机。数据采集与通信控制采用了模块化的设计,数据采集与通信控制采用了单片机STM32来实现,硬件部分是以单片机为核心,还包括A/D模数转换模块,显示模块,和串行接口部分。该系统从机负责数据采集并应答主机的命令。输入数据是由现场模拟信号产生器产生,8路被测电压再通过模数转换器ADC0809进行模数转换,实现对采集到的数据进行模拟量到数字量的转换,并将转换后的数据传输到上位机,由上位机负责数据的接受、处理和显示,并用LCD数码显示器来显示所采集的结果。软件部分应用Keil uVision4通过C++编写控制软件,对数据采集系统、模数转换系统、数据显示、数据通信等程序进行了设计。 关键词:数据采集 89C52单片机 ADC0809 Keil uVision4

Abstract This article is an application of STM32 series embedded ARM controller based on Cortex-M3 and it describes the hardware design and software design of the data on which based on signal-chip microcomputer .The data collection system is the link between the digital domain and analog domain. It has an very important function. The introductive point of this text is a data to collect the system. The hardware of the system focuses on signal-chip microcomputer .Data collection and communication control use modular design. The data collected to control with correspondence to adopt a machine 8051 to carry out. The part of hardware’s core is STM32, is also includes A/D conversion module, display module, and the serial interface. Slave machine is responsible for data acquisition and answering the host machine.8 roads were measured the electric voltage to pass the in general use mold-few conversion of ADC0809,the realization carries on the conversion that imitates to measure the numeral to measure towards the data that collect .Then send the data to the host machine.the host machine is responsible for data and display, LED digital display is responsible display the data. The software is partly programmed with C++ of the Keil uVision4. The software can realize the function of monitoring and controlling the whole system. It designs much program like data-acquisition treatment,data-display and data-communication ect. Keyword: data acquisition AT89C52 ADC0809 Keil uVision4 目录

8路温度采集系统

实习报告 课题:八路温度采集仪 日期:2015.8.3

目录: 一、实验目的 (3) 二、实验内容 (3) 三、实验步骤与结果 (3) 四、实验存在的问题 (14) 五、总结 (14) 六、附录(上位机、下位机) (14)

一、实验目的: 1、DXP与Labview软件的运用; 2、单片机编程的掌握; 3硬件的焊接与调试; 4、熟练运用和掌握原理图设计、PCB板的制作、元器件焊接与调试、虚拟仪器的使用。 二、实验内容: 运用单片机搭建一个小系统。此系统可以同时采集8路温度信息(由于硬件条件的限制,没人只有4个温度传感器,所以最后只能为四路温度采集),而此信息来自与8个DS18B20,同时循环显示于数码管。然后后期运用虚拟仪器Labview采集单片机所发送的温度信息进行处理,并形成完整的虚拟仪器。 三、实验步骤与结果: 1、原理图的设计 采集系统主要元器件介绍: STC89C52RC: STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选. 其I/O口、中断的运用可以参照89C51的任何类型。 DS18B20: DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有

ucos-ii操作系统复习大纲

ucos-ii操作系统复习大纲 一.填空题 1.uC/OS-II是一个简洁、易用的基于优先级的嵌入式【抢占式】多任务实时内核。 2.任务是一个无返回的无穷循环。uc/os-ii总是运行进入就绪状态的【最高优先级】的任务。 3.因为uc/os-ii总是运行进入就绪状态的最高优先级的任务。所以,确定哪 个任务优先级最高,下面该哪个任务运行,这个工作就是由【调度器(scheduler)】来完成的。 4.【任务级】的调度是由函数OSSched()完成的,而【中断级】的调度 是由函数OSIntExt() 完成。对于OSSched(),它内部调用的是【OS_TASK_SW()】完成实际的调度;OSIntExt()内部调用的是【 OSCtxSw() 】实现调度。 5.任务切换其实很简单,由如下2步完成: (1)将被挂起任务的处理器寄存器推入自己的【任务堆栈】。 (2)然后将进入就绪状态的最高优先级的任务的寄存器值从堆栈中恢复到【寄存器】中。 6.任务的5种状态。 【睡眠态(task dormat) 】:任务驻留于程序空间(rom或ram)中,暂时没交给ucos-ii处理。 【就绪态(task ready)】:任务一旦建立,这个任务就进入了就绪态。 【运行态(task running)】:调用OSStart()可以启动多任务。OSStart()函数只能调用一次,一旦调用,系统将运行进入就绪态并且优先级最高的任务。 【等待状态(task waiting)】:正在运行的任务,通过延迟函数或pend(挂起)相关函数后,将进入等待状态。

【中断状态(ISR running)】:正在运行的任务是可以被中断的,除非该任务将中断关闭或者ucos-ii将中断关闭。 7.【不可剥夺型】内核要求每个任务自我放弃CPU的所有权。不可剥夺型调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。 8.当系统响应时间很重要时,要使用【可剥夺型】内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。 9.使用可剥夺型内核时,应用程序不应直接使用不可重入型函数。调用不可重入型函数时,要满足互斥条件,这一点可以用【互斥型信号量】来实现。 10.【可重入型】函数可以被一个以上的任务调用,而不必担心数据的破坏。 11.可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数或者只使用【局部变量】,即变量保存在CPU寄存器中或堆栈中。如果使用全局变量,则要对全局变量予以【保护】。 12.每个任务都有其优先级。任务越重要,赋予的优先级应【越高】。 13.μC/OS-Ⅱ初始化是通过调用系统函数【OSIint()】实现的,完成μC/OS-Ⅱ所有的变量和数据结构的初始化。 14.多任务的启动是用户通过调用【OSStart()】实现的。然而,启动μC/OS-Ⅱ之前,用户至少要建立一个应用【任务】。 15. μC/OS-Ⅱ的参数配置文件名为【】。 16.删除任务,是说任务将返回并处于【休眠状态】,并不是说任务的代码被删除了,只是任务的代码不再被μC/OS-Ⅱ调用。 17.μC/OS-Ⅱ要求用户提供【定时中断】来实现延时与超时控制等功能。 18.定时中断也叫做【时钟节拍】,它应该每秒发生10至100次。 19. 时钟节拍的实际频率是由用户的应用程序决定的。时钟节拍的频率越高,系统的负荷就【越重】。 20.μC/OS-II中的信号量由两部分组成:一个是信号量的【计数值】,它是一个16位的无符号整数(0 到65,535之间);另一个是由等待该信号量的任务组成的【等待任务表】。用户要在中将OS_SEM_EN开关量常数置成【1 】,这样μC/OS-II 才能支持信号量。 21. μC/OS-II中表示当前已经创建的任务数全局变量名为:【 OSTaskCtr 】。

-基于Labview的多通道数据采集系统设计

第一节系统整体结构 系统的整体组成结构是测量目标经过传感器模块后转换成电信号,在由信号调理模块对信号做简单的调理工作,例如,scc-sg04全桥应变调整模块,scc-td02模块,scc-rtd01热电偶热电阻制约模块等,将调理好的信号传送到数据采集模块中进行数据采集,然后在用软件进行特定的处理。在采集的过程中同时将数据保存到指定数据库里。如图4-1多通道数据采集系统硬件结构图所示。 图4-1 多通道数据采集系统硬件结构图 第二节数据采集系统的硬件设计 一、PC机 传统仪器很多情况完成某些任务必须借助复杂的硬件电路,而由于计算机数据具备极强的信号处理能力,可以替代这些复杂的硬件电路,这便是虚拟仪器最大的特点。数据采集系统能够正常运行的前提便是选择一个优良的计算机平台。由于数据采集功能器件通常工作在工业领域中,往往伴随着强烈的振动,噪声,电源线的干扰和电磁干扰等。为了保证记录仪正常的运行,设计系统时选定工业计算机。考虑到计算机平台的可靠运行工业计算机通常采取了抗干扰措施。另一方面的考虑是工业计算机通常具有很多类型的接口,这样有利于功能进一步的扩展。 二、传感器 传感器设备能接受到来自测量目标发来的信号,而且把接受到的讯息,通

过设定的变换比例将其改变成为电信号亦或其它形式,从而能够完成数据信号的处理、存储、显示、记录和控制等任务。传感器是系统进行检测与控制的第一步。 三、信号调理 经过传感器的信号大多是要经过信号调理才可以被数据采集设备所接收,调理设备能够对信号进行放大、隔离、滤波、激励、线性化等处理。由于不同类型的传感器各有不同的功能,除了考虑一些通用功能之外,还要依据不同传感器的性质和要求来实现特殊的信号调理功能。信号调理电路的通用功能由如下几个方面: (1)放大功能为了提高系统的分辨率以及降低噪声干扰,微弱信号必须要进行放大,从而使放大之后信号电压与模数转换的电压范围一致。信号在经过传感器之后便直接进入信号调理模进行调理,这样就不易受到外部环境的影响,从而使得信噪比进一步的改善。 (2)隔离功能隔离是指为了避免直接的电连接,通过光线、交互电源或变压等方法,使得数据信息在系统之间进行传递。使用隔离的原因:一是为了安全考虑;二是能够保证采集到的数据不会受到其它原因的影响。 (3)滤波滤波是为了保证测量的信号的纯洁性,滤去不需要的信号。大部分的信号调理模块具有一个低通滤波器是用来过滤噪声。通常还需要抗混叠滤波器,滤除信号中感兴趣的最高频率以上的所有频率的信号。 (4)激励功能信号调理模块能够为某些传感器提供激励信号,而且很多信号调理模块都提供有电流源和电压源以便给传感器提供激励。 (5)线性化大部分的传感器是测量信号的线性和非线性响应的结合,为了使传感器误差补偿,对输出信号的线性化是必要的。目前,该数据采集系统可以通过软件解决这个问题。 四、输入信号的类型 要知道信号采集到的数据集,这是因为信号的要求和系统性能的不同的测量是不同的,只有了解被测信号的性质,才可以准确地选择合适的采集系统。 一个任意的信号在时间上是一个物理量的变化。在一般情况下,信号携带的信息是非常广泛的,如:状态,率,水平,形式,频率等。根据信号运载信息的不同,可以将信号分为数字信号或模拟信号。其中数字信号包括脉冲信号和开关信号两种类型。模拟信号包括直流信号、时域信号、频域信号等。 (1)数字信号 第一类数字信号为开关量信号,如图4-2所示。一个开关信号携带信息信

单片机数据采集控制系统

《单片机数据采集控制系统》课程设计报告一、前言 通常是指有若干相互连接、相互作用的基本电路组成的具有特定功能的电 路整体。由于大规模集成电路和模拟-数字混合集成电路的大量出现,在单 个芯片上可能集成许多种不同种类的电路。 二、课程设计的目的和要求 2.1、课程设计的目的 运用模拟电子技术、数字电子技术、单片机原理及其应用等课程知识,根据题目要求进行软硬件系统的设计和调试,从而加深对本课程知识的理解, 把学过的比较零碎的知识系统化,比较系统的学习开发单片机应用系统的基本步骤和基本方法,使学生应用知识能力、设计能力、调试能力以及报告撰写能力等有一定的提高。 2.2、课程设计要求 用8051单片机设计数据采集控制系统,基本要求如下: 1、可实现8路数据的采集,假设8路信号均为0-5V的电压信号; 2、采集数据可通过数码管显示,显示格式为:[通道号] 电压值,如[01] 4.5 3、可通过键盘设置采集方式;(单点采集、多路巡测、采集时间间隔*) 4、具有异常数据声音报警功能:对第一路数据可设置正常数据的上限值和 下限值,当采集的数据出现异常,发出报警信号。(LED显示报警) 5、可输出8路顺序控制信号,设每路顺序控制信号为一位,顺序控制的流 程为:

三、总体设计 实验原理:从A/D 转换器入手,通过编程,实现硬件上的八路数据采集、采集数据显示、通过键盘设计采集、实现上下限的报警功能、八路顺序控制信号。 四、硬件设计 4.1各种芯片的功能、引脚、相应的命令控制字格式的介绍 1、MCS-51 芯片介绍:MCS-51系列单片机是美国Intel 公司开发的8位单片机又可以分为多个子系列。MCS-51 123456789101112131415403938373635343332313029282726P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RST INT0/P3.2INT1/P3.3V CC P0.0/AD 0P0.1/AD 1P0.2/AD 2P0.3/AD 3P0.4/AD 4P0.5/AD 5P0.6/AD 6P0.7/AD 7EA/V PP ALE/PROG PSEN P2.7/A 15P2.6/A 14P2.5/A 13803180518751 八路数据采集模块 显示模块 键盘模块 报警模块 八路顺序控制模块 8051单片机

嵌入式实时操作系统UCOS 2优劣势分析

嵌入式实时操作系统ucos ii的优劣势分析 引言 早在20世纪60年代,就已经有人开始研究和开发嵌入式操作系统。但直到最近,它才在国内被越来越多的提及,在通信、电子、自动化等需要实时处理的领域所曰益显现的重要性吸引了人们越来越多的注意力。但是,人们所谈论的往往是一些著名的商业内核,诸如VxWorks、PSOS等。这些商业内核性能优越,但价格昂贵,主要用于16位和32位处理器中,针对国内大部分用户使用的51系列8位单片机,可以选择免费的ucos ii。 ucos ii的特点 1.ucos ii是由Labrosse先生编写的一个开放式内核,最主要的特点就是源码公开。这一点对于用户来说可谓利弊各半,好处在于,一方面它是免费的,另一方面用户可以根据自己的需要对它进行修改。缺点在于它缺乏必要的支持,没有功能强大的软件包,用户通常需要自己编写驱动程序,特别是如果用户使用的是不太常用的单片机,还必须自己编写移植程序。 2.ucos ii是一个占先式的内核,即已经准备就绪的高优先级任务可以剥夺正在运行的低优先级任务的CPU使用权。这个特点使得它的实时性比非占先式的内核要好。通常我们都是在中断服务程序中使高优先级任务进入就绪态(例如发信号),这样退出中断服务程序后,将进行任务切换,高优先级任务将被执行。拿51单片机为例,比较一下就可以发现这样做的好处。假如需要用中断方式采集一批数据并进行处理,在传统的编程方法中不能在中断服务程序中进行复杂的数据处理,因为这会使得关中断时间过长。所以经常采用的方法是置一标志位,然后退出中断。由于主程序是循环执行的,所以它总有机会检测到这一标志并转到数据处理程序中去。但是因为无法确定发生中断时程序到底执行到了什么地方,也就无法判断要经过多长时间数据处理程序才会执行,中断响应时间无法确定,系统的实时性不强。如果使用μC/OS-II的话,只要把数据处理程序的优先级设定得高一些,并在中断服务程序中使它进入就绪态,中断结束后数据处理程序就会被立即执行。这样可以把中断响应时间限制在一定的范围内。对于一些对中断响应时间有严格要求的系统,这是必不可少的。但应该指出的是如果数据处理程序简单,这样做就未必合适。因为ucos ii要求在中断服务程序末尾使用OSINTEXIT函数以判断是否进行任务切换,这需要花费一定的时间。 3.ucos ii和大家所熟知的Linux等分时操作系统不同,它不支持时间片轮转法。ucos ii是一个基于优先级的实时操作系统,每个任务的优先级必须不同,分析它的源码会发现,ucos ii把任务的优先级当做任务的标识来使用,如果优先级相同,任务将无法区分。进入就绪态的优先级最高的任务首先得到CPU的使用权,只有等它交出CPU的使用权后,其他任务才可以被执行。所以它只能说是多任务,不能说是多进程,至少不是我们所熟悉的那种多进程。显而易见,如果只考虑实时性,它当然比分时系统好,它可以保证重要任务总是优先占有CPU。但是在系统中,重要任务毕竟是有限的,这就使得划分其他任务的优先权变成了一个让人费神的问题。另外,有些任务交替执行反而对用户更有利。例如,用单

Saleae 8通道24M采样逻辑分析手册

Saleae minilogic 24M 8CH 逻辑分析仪使用手册 MIRROROK QQ 4641452 https://www.wendangku.net/doc/c513320035.html,/ite m.htm?id=12378862970

一、软件的安装 1,首先安装软件Logic Setup 1.1.4 (32-bit),可从https://www.wendangku.net/doc/c513320035.html,/downloads 下载,还有支持其他操作系统的软件版本,可选择对应的操作系统下载 2,选取安装的软件Logic Setup 1.1.4 (32-bit).exe,双击进行安装:

3.选择NEXT,进入下一步: 4.按照上图选择后,点击NEXT,出现下面界面

默认安装路径已经设置在C:\PROGRAM FILES\SALEAE LLC,不选的话按照默认的安装目录,此时选择NEXT;也可以设置自己设定的目录. 5.安装过程可能需要1-2分钟

6.安装完成后出现下面界面: 7.安装完毕之后启动一下我们可以到可以看到以下界面: 二、基本使用方法:

在没有连接MINILOGIC的时候软件处于模拟状态Simulation,此时可以进行软件的信号模拟; 2.1选取 Analyzers右侧的加号 + 如下图 提示增加一个协议分析 Add a protocol analyzer 2.2出现右侧一组协议分析类型共7种如下: CAN,I2C 1-WIRE ASYNC SERIAL,SPI,INI/O,I2S/PCM; 协议类型简介:请看附件选取I2C 协议类型,如下图 选择模拟I2C,出现分析设置界面: 选取默认设置,SDA信号模拟在通道0,SCL信号模拟在通道1,地址显示设置选用默认的。

LMS-SCADAS多功能数据采集系统简介

数据采集系统 LMS SCADAS多功能数据采集系统 当今,产品的研发周期越来越短,用于产品性能测试的时间越来越少。在全 球的各个行业中,试验部门正承受着巨大的压力——要用尽量少的时间和资 源配合产品的设计与更新,完成尽可能多的试验任务。LMS SCADAS数据采 集系统能够保证完成各种类型的试验任务,并且其高性能、高效率的特点, 可以让试验工程师更充分地利用资源,同时完成多项试验任务,大大地缩短试验周期。 LMS SCADAS硬件以其卓越的性能和高度的可靠性著称,无论是进行试验室 测试还是现场测试都能保证最优的测试质量和精度。LMS SCADAS硬件与LMS https://www.wendangku.net/doc/c513320035.html,b和LMS Test.Xpress软件无缝集成,可以快速完成所有的测试设 置,在保证最佳数据质量和精度的同时,高效地完成测试任务。正由于LMS SCADAS硬件具有如此多的优点,全球范围内每天都有数以万计的用户正在 使用LMS产品进行着测试工作,采集各种试验数据。 为您量身定制的LMS SCADAS解决方案——保证随时随地的完美表现 LMS SCADAS硬件的最大优点是灵活性与可扩展性,有多种型号可供客户选 择-从紧凑的便携式系统,全自动的智能记录仪,直至大通道数的试验室系统。LMS SCADAS硬件支持多种传感器,具有多种信号调理功能,是进行噪 声、振动、声学和耐久性等试验任务的理想前端。最重要的是,LMS SCADAS 注重多功能性,即可以作为一个移动的前端使用,也可以作为独立的记录仪 在外场使用。同时,LMS SCADAS硬件还为在恶劣条件下进行声学测试或耐 久性数据采集提供了统一的测试系统。 “LMS SCADAS系统注重于应用的多样性,使用户 的投入获得最大的回报。” ?通用的硬件平台,同时适用于试验室测试、外场测试,并支持记录仪模式,独立地完成数据采集 ?专业用于噪声、振动、声学和疲劳耐久性能测试

单路数据采集系统设计

1 引言 1.1 数据采集系统的意义 数据采集系统是结合基于计算机的测量软硬件产品来实现灵活的、用户自定义的测量系统。数据采集是指从传感器和其它待测设备等模拟和数字被测单元中自动采集信息的过程。本设计采用A/D转换器和51单片机组成数据采集系统,该设计具有结构简单、操作方便、高性价比、具有显示、记录存储功能,能够适应油田野外恶劣环境,具有性能稳定、可靠性高、响应速度快操作简单、费用低廉、回放过程的信号可以直观的观察。它与有线数传相比主要有布线成本低、安装简便、便于移动等性能。 经调查,目前数据采集器的市场需求量大,以数据采集器为核心构成的小系统应用广泛,因此开发高性能的数据采集器具有良好的市场前景。随着计算机技术的飞速发展和普及,数据采集系统在多个领域有着广泛的应用。数据采集是工、农业控制系统中至关重要的一环,在医药、化工、食品、等领域的生产过程中,往往需要随时检测各生产环节的温度、湿度、流量及压力等参数。同时,还要对某一检测点任意参数能够进行随机查寻,将其在某一时间段内检测得到的数据经过转换提取出来,以便进行比较,做出决策,调整控制方案,提高产品的合格率,产生良好的经济效益。随着工、农业的发展,多路数据采集势必将得到越来越多的应用,为适应这一趋势,作这方面的研究就显得十分重要。在科学研究中,运用数据采集系统可获得大量的动态信息,也是获取科学数据和生成知识的重要手段之一。单片机构成的数据采集处理系统适用于各种现场自动化监测及控制,能够适应油田野外恶劣环境,具有性能稳定、可靠性高、响应速度快操作简单、费用低廉、等优点。1.2 数据采集系统的主要功能 数据采集是指从传感器和其它待测设备等模拟和数字被测单元中自动采集信息的过程。数据采集系统是结合基于计算机的测量软硬件产品来实现灵活的、用户自定义的测量系统。比如条码机、扫描仪等都是数据采集工具。 数据处理系统是指运用计算机处理信息而构成的系统。其主要功能是将输入的数据信息进行加工、整理,计算各种分析指标,变为易于被人们所接受的信息形式,并将处理后的信息进行有序贮存,随时通过外部设备输给信息使用者。

8通道温度数据采集系统

8通道温度数据采集系统 一、设计题目与要求: 设计一个8通道温度数据采集系统,系统误差小于1%;其中4路测量范围0-200?C ,选用Pt100热电阻;另4路测量范围0-600?C ,选用K 分度热电偶。 二、设计过程: 1、画出系统组成框图; 2、完成硬、软件功能分配和完成芯片选型; (1)运算放大器采用单电源,低功耗,精密四运算放大器MAX479 (2)AD 转换芯片采用带有8位A/D 转换器、8路多路开关的ADC0809 (3)硬件主要的功能是把采集到的温度信号转换成电信号,再经过运算放大器放大信号,传递给AD 转换芯片把模拟信号转换成数字信号,最后传给单片机处理信号并显示温度。 (4)软件主要的功能是对ADC0809 AD 转换芯片控制读取数据,读到单片机里对数据的处理转换成对应的温度值并显示。 3、ADC0809原理和应用: ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D 转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D 转换器进行转换。三态输出锁器用于锁存A/D 转换完的数字量,当OE 端为高电平时,才可以从三态输出锁存器取走转换完的数据。 ADC0809引脚图 IN0-IN7:8条模拟量输入通道 ADC0809对输入模拟量要求:信号单极性,电压 范围是0-5V ,若信号太小,必须进行放大;输 入的模拟量在转换过程中应该保持不变,如若模 拟量变化太快,则需在输入前增加采样保持电路。 地址输入和控制线:4条 ALE 为地址锁存允许输入线,高电平有效。当ALE 线为高电平时,地址锁存与译码器将A ,B ,C 三条地址线的地址信号进行锁存,经译码后被选 中的通道的模拟量进转换器进行转换。A ,B 和C 为地址输入线,用于选通IN0-IN7上的一路模 拟量输入。 数字量输出及控制线:11条 ST 为转换启动信号。当ST 上跳沿时,所有内部

单片机多通道数据采集系统

单片机多通道数据采集系统

目录 1.功能描述 (3) 2 方案设计 (3) 2.1 系统分析 (3) 2.2 器件选择 (4) 2.2.1 微处理器 (4) 2.2.2 显示器 (4) 2.2.3 按键 (4) 2.2.4 闹铃 (4) 3、硬件电路设计 (5) 3.1 最小系统设计 (5) 3.2 显示电路设计 (6) 3.3 按键电路设计 (7) 3.4 声音报警电路设计 (6) 3.5多通道数据采集电路设计 (8) 4、软件设计 (9) 4.1 操作功能设计 (9) 4.2程序编制思想 (9) 4.3 主程序 (10) 5 程序调试 (17) 6 技术小结 (18) 7多通道数据采集系统的使用说明 (19) 8心得体会 (20) 9参考文献 (21) 附录1:电路原理图 (22) 附录2:程序参考清单 (23)

设计报告 1.功能描述 利用单片机控制A/D转换器实现多通道数据采集系统。具有如下功能: 1.基本功能 (1)采集的数据为0-5V电压信号; (2)通过按键选择任意通道的数据显示或轮流显示; (3)可以设定报警上下限。 2.扩展功能 自行扩展功能,如音乐铃声,通讯功能等。 2 方案设计 2.1 系统分析 根据系统功能要求,可将系统组成结构分成五大部分:单片机控制中心、按键接口、多通道数据采集、数码管显示和报警播放音乐,如下图为系统的组成结构图。其中,单片机控制中心是核心。MCU根据按键输入,可切换不同的模式或设置不同的参数,从而实现多通道数据的采集。报警播放音乐可设置最高或最低温度报警值。 图2.1 系统总体结构图

2.2 器件选择 2.2.1 微处理器 市场上微处理器种类很多。这里,选取微处理器从多方面考:成本低、性能高、能够满足功能要求等等。 这里,选取STC89C52芯片。因为其功能与普通51芯片相同,其价格非常低廉、程序空间大、资源较丰富、在线下载非常方便。同时,使用该芯片,编程上亦可采用所熟悉的KEIL软件,使课程设计非常简单。 2.2.2 显示器 常见的显示器件LED数码管和LCD液晶器件。 LED数码管能够显示数字和部分字符,价格便宜,硬件电路、软件编程均非常简单,而且使用动态扫描技术可节省大量硬件成本。 LCD液晶显示器件,显示字迹清晰、能够显示数字、字符,本实验主要是用于显示所采集的电压与温度的显示。 系统显示主要还是数字,根据这两种显示器件的特性,选取LED数码管器件。由于系统要求显示所采集的通道数据,采用四位数码管显示即可。 2.2.3 按键 按键是用来变换显示模式以及设置传送上位机信息等功能的。这里采用普通按键即可,选用原则:以最少的按键,实现尽可能多的功能。所以这里,设置两个按键:模式键、传送键。 2.2.4 闹铃 选用最常见,亦最常用的声音提示方式——蜂鸣器,用于报警音乐定时播放。

基于单片机的八路数据采集系统

基于单片机的八路数据采集系统(一) 摘要:单片机数据采集系统是计算机在工业控制中最为普遍的应用系统?它的任务是采集生产过程中的各种工况参数经过处理后送入内存储器,CPU再对这些参数数据进行分析, 运算和处理。 本系统设计一个单片机系统,负责数据的采集和显示,设计一个多路数据输入输出系统,实现8路输入和输出。采用89C51系列单片机、ADC0809、LED数码管等芯片实现硬件仿真,采用汇编语言。最后硬件电路在Proteaus下仿真实现。 关键词:数据采集;8路输入输出;LED显示。 0.前言 随着科学技术的进步,人们越来越多地用计算机来实现控制系统,因此,充分理解计算机控制系统是十分重要的。 计算机控制系统的工作原理可归纳为以下三个步骤: 1.实时数据采集:对来自测量变送装置已的被控量的瞬时值进行检测和输入。 2.实时控制决策:对采集到的被控量进行分析和处理,并按已定的控制规律,决定将要采取的控制行为。 3.实时控制输出:根据控制决策,适时地对执行机构发出控制信号,完成控制任务。 工业控制机包括硬件和软件两部分: 硬件包括主机板、内部总线和外部总线、人-机接口、系统支持板、磁盘系统、通信接口、输入输出通道。软件包括系统软件、支持软件和应用软件。 本系统设计一个单片机系统,负责数据的采集和显示,设计一个多路数据输入输出系统,实现8路输入和输出。采用89C51系列单片机、ADC0809、LED数码管等芯片实现硬件仿真,采用汇编语言。最后硬件电路在Proteaus下仿真实现。 1.基单片机的八路数据采集的基本理论 基于单片机的八路数据采集电路的主要原理是:通过电位计控制输入信号(电压值)的幅值,经单片机对八路信号进行实时同步采样,并用键盘选择通道控制LED显示八路数据采集结果。 本课题只要掌握单片机与ADC0809,LED数码管的接口方式,ADC0809的工作原理,LED数码管的驱动原理,就能实现Proteus仿真。 2.方案设计 数据采集电路的原理框图1所示。

相关文档
相关文档 最新文档