第三章 数据采集常用程序设计.docx
《第三章 数据采集常用程序设计.docx》由会员分享,可在线阅读,更多相关《第三章 数据采集常用程序设计.docx(23页珍藏版)》请在冰豆网上搜索。
第三章数据采集常用程序设计
第三章数据采集常用程序设计
数据采集和处理是计算机在生产过程中应用的基础,任何计算机检测及控制系统都离不开信息的采集、处理及存储。
两种典型的系统:
生产过程控制系统——工况数据采集、数据处理、决策输出、驱动执行机构;
检测监控系统——工况数据采集、数据处理、显示或描绘成曲线;
我们已经介绍过数据采集的硬件结构,本章主要介绍数据采集中一些常用的程序设计。
第一节计算机数据采集系统
一、计算机数据采集系统的任务
在现代冶金、化工、石油、电力等工业生产过程中,往往需要对大量的过程参数进行监视和测量。
计算机数据采集系统的任务,就是要对生产现场的过程参数定时进行检测、记录、存储、处理、打印报表、显示及超限报警。
其结构如图3-1所示。
图3-1计算机采集系统结构图
二、计算机数据采集系统的优点
计算机数据采集系统的优点:
灵活、方便、速度快、判断能力强、图形功能强。
如在化工生产中,
(1)用不同的色彩,代表不同的管线中的流质;
(2)在测量点上,显示温度和压力的设定值、测量值、误差值;
(3)超限时用红灯闪烁表示,并发出报警声;
(4)可以由历史数据,生成历史趋势图、各种报表。
——注:
虚拟仪器LabView和LabWindows中,有各种典型的按钮、开关、测量仪器,可以刻度、曲线、表格、棒状图等多种显示数据。
该开发平台是图形化编程,适合工程人员使用。
三、计算机数据采集常用程序
计算机数据采集中的常用程序,包括中断、定时器、采样、看门狗、判断、上下限报警、LED数码管显示、小型行列式键盘控制等。
以数字信号处理器TMS320C24X为例,介绍常用的中断、定时、采样、看门狗的程序设计知识;以单片机MCS-51系列为例,介绍判断程序设计。
第二节中断程序设计
一、中断分类
图3-2中断分类图
从中断的来源看,分为硬件中断和软件中断;从中断是否可屏蔽来看,分为可屏蔽中断和不可屏蔽中断。
1、硬件中断和软件中断
硬件中断是由DSP的硬件所产生的中断,可由DSP的外部中断引脚(6个)产生,也可由DSP自身的外围设备产生(如定时器、A/D转换器、串行通信接口)。
软件中断是由DSP的指令产生的,如INTR、TRAP、RESET等。
2、可屏蔽中断和不可屏蔽中断
(1)可屏蔽中断:
可以用软件来屏蔽或者使能的硬件和软件中断。
(2)不可屏蔽中断:
中断不能够被屏蔽,DSP总是响应的中断。
二、中断优先级和向量地址
1、优先级
DSP的所有中断被赋予1~10的优先级(1为最高级)。
当有多于1个的中断被挂起等待响应时,中断按照优先级别从高到低依次被响应。
所有的软件中断和硬件中断,都对应于某一个优先级。
2、向量地址
在DSP中有专门的I/0空间,存在着一系列中断向量地址,每一个优先级都对应相应的中断向量地址。
中断向量地址为两个字长,可存储跳转指令。
当中断到来时,中断向量地址被加载到程序计数器,从而获取跳转指令,跳转到相应的中断处理子程序。
三、相关的寄存器
1、中断屏蔽寄存器(IMR)
IMR包含所有可屏蔽中断的屏蔽位,用于设置和读取中断的屏蔽状态。
(1)读IMR寄存器可以识别出已被屏蔽或未被屏蔽的中断。
(2)为了能够响应中断,把IMR相应位设置为1;屏蔽中断时,把IMR相应位设置为0。
(3)复位时,IMR所有位都被设置为0,屏蔽掉所有可屏蔽的中断
2、中断标志寄存器(IFR)
IFR中包含所有可屏蔽中断的标志位,可以识别和清除有效的中断。
当一个可屏蔽中断被请求时,IFR的相应的标志位被置1,指示中断正在被挂起或者等待响应(不论是否被CPU响应);当中断未被屏蔽时,如果IFR的相应位是1,则该中断将被CPU响应。
下列情况中断标志都将被清除:
(1)系统复位
(2)中断得到处理
(3)把1写到IFR的相应位,使其变成0,即可清除尚未处理完的中断
四、中断操作步骤
1、初始化
设置中断屏蔽寄存器IMR,开启需要的中断,屏蔽不需要的中断;
2、接收中断
当硬件或软件指令产生中断请求时,IFR寄存器中相应的中断标志位被置位;
3、响应中断
(1)CPU根据中断屏蔽寄存器的设置,决定是否响应中断;
(2)若允许响应中断,CPU根据中断标志寄存器的标志位,装载中断向量地址;
(3)从中断向量地址存储的跳转指令,跳转到相应的中断服务子程序;
(4)执行中断服务程序(需考虑保存、恢复寄存器的数据)。
注:
蓝色的表示自己需要编写程序
第三节定时器程序设计
可采用软件方式和硬件方式,达到定时的目标。
一、软件定时程序
依据:
1、执行指令需要时间;
2、如果知道CPU的时钟频率,就可以计算出每一条指令的所需时间;
3、通过内循环次数、外循环次数、指令数,可以计算出定时时间
图3-3软件定时程序流程图
二、硬件定时程序
TMS320C24X有三个通用定时器Tx(x=1、2、3),能够独立使用,自动计数。
1、时钟
(1)CPU时钟:
最重要的时钟,决定CPU的指令周期,由专门的时钟源产生;
(2)通用定时器时钟:
可由CPU时钟分频获得;
2、控制寄存器
(1)时钟控制寄存器(CKCR)
通过设置CKCR决定CPU的时钟模式,可以直接使用外部时钟、或者倍频外部时钟。
(2)定时器控制器(TxCON,x=1、2、3)
每个定时器都有一个控制器,可以设置该定时器的时钟频率(对CPU时钟分频)和计数模式。
(3)比较寄存器(CMPRx,x=1、2、3)
存储着设定的计数值,当通用定时器的数值和比较寄存器相等时,将产生中断事件。
3、通用定时器Tx的计数模式(6种)
图3-4计数模式示意图
(1)停止/保持模式
通用定时器的操作停止,保持当前状态。
(2)单增模式
通用定时器按照规定频率的输入时钟计数,直到定时计数器的值与比较寄存器的值匹配为止。
匹配之后的下一个输入时钟的上升沿,通用定时器复位为0并且禁止继续计数。
(3)连续增模式
通用定时器按照规定频率的输入时钟计数,直到定时计数器的值与比较寄存器的值匹配。
匹配之后的下一个输入时钟的上升沿,通用定时器复位为0,重复上述操作。
(4)定向增/减模式
由引脚TMRDIR来确定计数方向。
当TMRDIR保持高时,通用定时器将增计数,直到计数值与比较寄存器的值匹配为止。
当通用定时器的计数值与比较寄存器值相等,并且TMRDIR保持高时,定时器保持该值。
当TMRDIR保持低时,通用定时器将减计数,直到计数值为0。
当通用定时器的计数值为0,且TMRDIR保持低时,定时器保持为0。
(5)单增/减模式
通用定时器按照规定频率的输入时钟计数,直到定时计数器的值与比较寄存器的值匹配。
然后通用定时器改变它的计数方向,直到0为止。
当通用定时器为0时,停止计数并保持它的当前状态。
(6)连续增/减模式
每个周期与单增/减模式相似。
当通用定时器复位为0时,重复单增/减模式下的操作。
3、定时器的使用
(1)初始化:
设置CPU时钟(时钟控制寄存器)、定时器时钟、计数模式(定时器控制器)、比较寄存器的值。
(2)启动定时器。
(3)当定时器计数值和比较寄存器的值相等时,产生中断。
(4)处理中断。
第四节采样程序设计
一、概述
1、TMS320C24X的A/D转换模块,包括两个带有内部“采样—保持”电路的A/D转换器,其字长为10位;
2、每个A/D转换器有8个模拟输入通道,总共可处理16个模拟量输入;
3、每八个模拟输入通道,通过8到1的多路开关,给A/D转换器提供数据;
4、两个A/D转换器可同时工作,所以能够同时测量两个模拟输入;
5、A/D转换器的转换模式,可以分为单转换和连续转换两种;
6、转换可以由A/D转换器自身启动,也可以由通用定时器的中断事件启动;
二、转换结果
A/D转换模块的基准电压由外部提供,被测信号通过传感器转换成电压信号,作为输入电压。
转换结果=1024×(输入电压/基准电压)
三、转换时间
A/D的“采样-转换”需要6个模数转换周期,最少是6us的时间。
满足下列公式:
系统时钟周期×A/D的倍频系数×6>=6us
四、相关寄存器
1、模数转换控制寄存器1
用于控制转换启动、终止转换、选择模数转换模式、选择转换通道。
2、模数转换控制寄存器2
用于设置A/D转换的倍频系数、标识模数转换结果寄存器是否有内容。
3、模数转换结果寄存器
A/D转换结束时,将产生A/D转换中断。
转换结果寄存器是一个两级的FIFO寄存器,储存对应的A/D转换器的转换结果。
4、通用定时器控制寄存器
用于决定由哪个定时器、采用该定时器的何种中断事件来启动A/D转换。
五、A/D转换器的使用——由定时器启动
1、通过模数转换控制寄存器1,设置A/D转换模式、选择转换通道;
2、通过模数转换控制寄存器2,设置A/D转换的倍频系数;
3、通过通用定时器控制寄存器,设置由哪个定时器的中断事件来启动A/D转换;
4、定时器中断到来时(即采样周期到来时),启动A/D转换;
5、A/D转换结束时,产生A/D转换中断;
6、在A/D转换中断子程序中,从模数转换结果寄存器中取出A/D转换结果,进行处理。
注:
通过对转换通道的循环选择,可以实现巡回检测。
(一节)
第五节看门狗程序设计
看门狗(WatchDog)在CPU异常时、或者软件进入一个不正确的循环时,实现系统复位功能。
一、相关寄存器
1、WD计数寄存器
是一个8位可以复位的增数计数器,当WD定时器溢出时会导致系统复位,从而解除系统的软件错误和CPU崩溃。
2、WD定时器控制寄存器(WDCR)
设置WD计数寄存器的时钟频率。
3、WD复位关键字寄存器(WDKEY)
向WDKEY首先写55H、接着写AAH,将清除WD计数寄存器的值。
除此以外,任何组合都不能复位WD计数寄存器。
二、看门狗的使用
1、设置WD计数寄存器的时钟频率
2、启动WD计数寄存器
3、在适当的主程序或者分支程序中,向WDKEY首先写55H、接着写AAH,清除WD计数寄存器的值。
第六节判断程序设计
判断程序就是分支执行程序。
程序在执行时,首先判定给定的条件是否满足,根据判定的结果(真或假)再执行相应的操作。
例如:
在转速控制系统中,电机的恒速运转一般是通过控制输入电压来实现的。
首先检测出电机的实际转速,再比较电机的实际转速和给定转速。
(1)如果电机的转速低于给定转速,就需要增加输入电压;
(2)如果电机的转速高于给定转速,就需要降低输入电压。
重点介绍三类判断程序的设计思路:
1、算术判断程序:
对两个数值进行比较判断;
2、逻辑判断程序:
对一个字节的某些位,进行1或0的判断;
3、标志判断程序:
对某个标志位进行判断;
我们以单片机MCS-51系列为例,介绍判断程序的设计方法。
一、相关寄存器介绍
1、累加器ACC
是一个八位寄存器,它是CPU中工作最频繁的寄存器。
在进行算术、逻辑运算时,累加器ACC往往在运算前暂存一个操作数(如被加数),而运算后又保存其结果(如代数和)。
范围:
无符号数——0~255;有符号数——-127~128。
2、标志寄存器PSW
也是一个八位寄存器,用来存放运算结果的一些特征,如有无进位、借位等。
图3-5PSW的位定义
平常我们最关心的是以下四位。
(1)进位标志CY(PSW7)
它表示了运算是否有进位(或借位)。
如果操作结果在最高位有进位(加法)或者借位(减法),则该位为1,否则为0。
(2)辅助进位标志AC(PSW6)
又称半进位标志,它反映了两个八位数运算低四位是否有半进位,即低四位相加(或减)有否进位(或借位)。
如有则AC为1状态,否则为0。
(3)溢出标志位OV(PSW2)
反映运算结果是否有溢出。
有溢出时,此位为1,否则为0。
(4)奇偶标志P(PSW0)
反映累加器ACC内容的奇偶性,如果ACC中的运算结果有偶数个1(如11001100B,其中有4个1),则P为0,否则,P=1。
二、算术判断程序
✧两个8位无符号数比较
✧两个8位有符号数的比较
✧两个16位无符号数比较
1、两个8位无符号数比较(M、N)——根据进位标志
CLRCY;进位标志清零
MOVA,M;A←M
SUBBA,N;求M-N
JZEQU;累加器A=0,则M=N,转EQU
JCLESS;CY=1,有借位,则MBIG:
M>N处理程序;无借位,则M>N,执行BIG处理程序
EQU:
M=N处理程序
LESS:
M2、两个8位有符号数的比较——根据溢出标志和ACC的最高位
由于M和N均为有符号数,M和N两数在比较时,可能出现以下四种情况:
(1)M>0,N>0,即两数均为正数。
(2)M>0,N<0,即M为正数,N为负数。
(3)M<0,N>0,即M为负数,N为正数。
(4)M<0,N<0,即两数均为负数。
有符号数的比较相对复杂。
可利用“溢出标志PSW.2”和“ACC.7最高位”,判断两个8位有符号数的大小。
根据:
(1)正数——最高位为0;负数——最高位为1;
(2)溢出时,ACC最高位为1表示正溢出,ACC最高位为0表示负溢出;
MOVA,M;A←M
SUBBA,N;M和N比较
JZEQU;M和N相等,转相等处理程序
JBPSW.2,FLOW;判断是否溢出,有溢出则跳转FLOW
JBACC.7,LESS;无溢出,且A的最高位为1,则M;如
(2)-(3)、(-2)-(3)、(-3)-(-2)
AJMPBIG;;无溢出,且A的最高位为0,则M>N,执行BIG程序
;如(3)-
(2)、(3)―(―2)、(-2)-(-3)
FLOW:
JBACC.7,BIG;溢出分为两种情况
;
(1)有溢出,且A最高位为1,表示正溢出
;则M>N,执行BIG程序
;如(126)-(-10)
;
(2)有溢出,且A最高位为0,表示负溢出
;则M;如(-10)-(124)
LESS:
MBIG:
M>N处理程序
EUQ:
M=N处理程序
3、两个16位无符号数比较——根据进位标志
由于MCS-51系列的累加器只有8位,所以当进行两个16位无符号数比较时,需要把它们分为“高8位”和“低8位”,分别比较。
CLRCY;标志位清零
MOVA,MH;A←MH
MOVR2,NH;R2←NH
SUBBA,R2;高8位比较
JZHEQU;高8位相等,转低8位比较
JCLESS;高8位不相等,有借位,转MAJMPBIG;无借位,转M>N理程序
HEQU:
CLRCY;标志位清零(高8位相等)
MOVA,ML;A←ML
MOVR2,NL;R2←NL
SUBBA,R2;低8位比较
JZEQU;A=0,则M=N,转EQU
JCLESS;有借位,则M;无借位,执行M>N理程序
BIG:
M>N处理程序
EUQ:
M=N处理程序
LESS:
M二、逻辑判断程序
1、逻辑判断程序的设计步骤
(1)读入数据(开关状态或阀门的位置);
(2)屏蔽不需要的状态位;
(3)与所要求的状态比较;
(4)判断比较结果,选择程序入口。
2、例子
图3-6逻辑判断例子图3-7标志判断例子
图3-6中,A、B、C、D表示4个开关,当四个开关均闭合时,顺序执行相应的程序,否则,继续检测。
(注:
闭合后,电平为0)
逻辑判断程序清单:
CHECK:
MOVA,P1;读入开关状态
ANLA,#55H;用01010101,屏蔽无用位
XRLA,#00H;判断开关A、B、C、D是否全部闭合,全部闭合后为0
;异或,相同为0,相异为1
JNZCHECK;若ACC中不是0,结果也非0
;表示开关A、B、C、D没全部闭合,继续检测
PROCESS:
…………;全部闭合时,顺序执行相应的处理程序
三、标志判断程序
1、标志判断的设计思想
根据某一设定的标志单元(或标志位)的状态,决定程序的执行方向。
2、例子
电机旋转方向控制程序流程图如图3-7所示。
FLAGBIT00H;设定00H为电机旋转方向控制位,FLAG代表该位
JBFLAG RIGHT;FLAG=1,转RIGHT
LEFT:
…;FLAG=0,顺时针旋转控制程序
RIGHT:
…;逆时针旋转控制程序
第七节上下限报警处理程序设计
报警程序主要有以下几个步骤组成:
(1)采样被测参数;
(2)比较采样值和给定的上下限;
(3)根据比较结果执行相应的处理程序。
第八节LED数码管显示程序设计
一、LED显示器件工作原理
图3-8七段LED数码显示器的结构
LED显示器件是通过发光二极管显示字段的器件。
在单片机控制系统中常用的是由7段LED数码管,它的显示块中有8个发光二极管,7个发光二极管组成字符“8”,1个发光二极管构成小数点,因此有人称7段LED数码管为8段显示器。
LED数码管的管脚配置如图3-8(a)所示。
LED数码管有共阴极和共阳极两类。
共阴极LED数码管的发光二极管的阴极共地,如图3-8(b),当某个发光二极管的阳极电压为高电平时,二极管发光;而共阳极LED数码管是发光二极管的阳极共接,如图3-8(c),当某个二极管的阴极电压为低电平时,二极管发光。
二、LED显示方式
图3-9N位LED显示器构成原理图
在微机控制系统中,一般利用N块LED显示器件构成N位LED显示器。
构成原理图如图3-9所示。
通过I/O口位选控制哪个LED管显示,通过I/O口段选控制所显示的数字。
LED所显示的字符,与其段选码是一一对应的。
图3-107段LED段选码
1.LED静态显示方式
图3-11表示的是一个四位静态LED显示电路。
(1)把所有LED的3和8引脚串连起来,根据共阳极或者共阴极,连接到+5V或接地;
(2)段选控制直接由不同I/O口控制。
注:
需要占用多个I/O口。
图3-11LED静态显示电路
2.LED动态显示方式
图3-12LED动态显示电路
动态驱动显示接口特点是:
将多位LED同名的段选择线都并联在一起(即8位中的所有同名段a接在一起,所有b段都接在一起……),用一个8位的锁存器来控制段码;另外用一个锁存器来控制点亮的位。
因此需要2个8位的I/O端口。
I/O端口输出相应字符的段选择码,决定要显示的字符;同时通过位选择码,控制要显示的位。
如此循环下去,使每一位都显示该位应显示的字符,并保持延时一段时间(1~5ms),然后再选中下一位。
利用发光显示器的余辉及人眼的视觉暂留特点,给人一种显示器同时被点亮的效果。
三、LED动态显示程序设计
图3-13LED动态显示流程图
(1)缓冲区:
存放显示的数;
(2)数变成段码:
由专门的译码程序实现。
第九节小型行列式键盘控制程序设计
键盘是一个由开关组成的矩阵,是重要的输入设备,在小型微机系统中,如单板微计算机、带有微处理器的专用设备中,键盘的规模小,可采用简单实用的接口方式,在软件控制下完成键盘的输入功能。
常用键盘的类型包括:
◆编码键盘:
用硬件来识别、检测按了哪一键,并产生相应的代码
◆非编码键盘:
没有独立的硬件,用软件来识别按下的键、并产生代码
一、键盘工作原理
图3-14键盘原理图
将各键连接成一个矩阵,即成n行×m列,各键分别连接于某个行线与某个列结之间。
当某个键按下时,对应的行线和列线均为低电平,因此通过扫描程序,可判明按键位置(位置码、扫描码),再转换为按键编码。
为了方便键处理程序的设计,一般采用依次排列键值的方法,以保证键值和键号一致。
二、编码键盘
图3-15编码键盘电路连接
8279和51系列的单片机的连接非常简单,当有键按下时,8279内部由硬件自动生成一个与之相应的代码。
三、键盘扫描程序设计
较常用的键盘扫描的工作方式有“编程扫描方式”和“中断扫描方式”两种。
1、编程行扫描方式原理及程序流程图
图3-16用锁存器连接的键盘接口(4×4)
将行线接输出口,列线接输入口。
采用行扫描法:
(1)先将某一行输出为低电平,其它行输出为高电平,用输入口来查询列线上的电平。
(2)逐次读入列值
<1>如果行线上的值为0时,列线上的值也为0,则表明有键按下。
<2>由行与列的交连信号,确定某闭合键的坐标,即得到被按键对应的扫描码。
<3>主程序调用译码程序,将扫描码翻译为相应键的编码信息。
<4>否则,接着读入下一列,直到找到该行有按下的键为止。
(3)如该行没有找到有键按下,就按此方法逐行找下去,直到扫描完全部的行和列。
扫描键盘应注意的问题:
消除键的抖动:
在认可键号之前,程序中插入一段延时,让开按键机械抖动的周期,形成正确的键号。
2、中断扫描工作方式
图3-17中断扫描的接口电路(4×4)
(1)键按下时,产生中断信号;
(2)通过读P端口的4~7,可以直接确定行;
(3)在INT1中断服务程序中,通过判断P端口的0~3位,可以确定列;
(4)由行列组合成扫描码。