1、第三章第三章 常用控制程序设计常用控制程序设计第三章第三章 常用控制程序设计常用控制程序设计 3.1 判断程序设计判断程序设计 3.2 巡回检测程序设计巡回检测程序设计 3.3 数字滤波程序设计数字滤波程序设计 3.4 标度变换程序设计标度变换程序设计 3.5 上下限报警处理程序设计上下限报警处理程序设计 3.6 LED数码管显示程序设计数码管显示程序设计 3.7 定时程序设计定时程序设计 3.8 键盘控制程序设计键盘控制程序设计 3.9 抗干扰技术抗干扰技术 3.10 电机控制程序设计电机控制程序设计 3.11 步进电机控制步进电机控制 第三章第三章 常用控制程序设计常用控制程序设计3.1
2、判断程序设计判断程序设计 3.1.1 算术判断程序算术判断程序 3.1.2 逻辑判断程序逻辑判断程序 3.1.3 标志判断程序标志判断程序 返回本章首页第三章第三章 常用控制程序设计常用控制程序设计判断程序就是分支执行程序。程序在执行时,首先判定给判断程序就是分支执行程序。程序在执行时,首先判定给定的条件是否满足,根据判定的结果(真或假)再执行相定的条件是否满足,根据判定的结果(真或假)再执行相应的操作。应的操作。例如:在转速控制系统中,电机的恒速运转一般是通过控例如:在转速控制系统中,电机的恒速运转一般是通过控制输入电压来实现的,首先检测出电机的实际转速,再比制输入电压来实现的,首先检测出电
3、机的实际转速,再比较电机的实际转速和给定转速,如果电机的转速低于给定较电机的实际转速和给定转速,如果电机的转速低于给定转速,就需要增加输入电压;如果电机的转速高于给定转转速,就需要增加输入电压;如果电机的转速高于给定转速,就需要降低输入电压。上述功能的执行过程如图速,就需要降低输入电压。上述功能的执行过程如图3-1所示。所示。第三章第三章 常用控制程序设计常用控制程序设计图图3-1 判断程序框图判断程序框图检测电机转速是否大于给定转速降低输入电压提高输入电压是否第三章第三章 常用控制程序设计常用控制程序设计MCS-51系列的程序状态字(系列的程序状态字(PSW)是一个用于存储程序是一个用于存储
4、程序运行状态信息的运行状态信息的8位寄存器,其位定义如表位寄存器,其位定义如表3-1所示。其中所示。其中有些位状态是根据程序运算结果由硬件自动设置;而有些有些位状态是根据程序运算结果由硬件自动设置;而有些位状态则是通过软件设定的。位状态则是通过软件设定的。PSW的位状态可通过指令读的位状态可通过指令读出,以实现程序的转移。出,以实现程序的转移。返回本节第三章第三章 常用控制程序设计常用控制程序设计3.1.1 算术判断程序算术判断程序1.两个两个8位无符号数比较位无符号数比较 2.两个两个16位无符号数比较位无符号数比较 3.两个两个8位有符号数的比较位有符号数的比较 第三章第三章 常用控制程序
5、设计常用控制程序设计1.两个两个8位无符号数比较位无符号数比较 图图3-2 8位无符号数的比较流程框图位无符号数的比较流程框图第三章第三章 常用控制程序设计常用控制程序设计 CLRCY;进位标志清零进位标志清零 MOVA,M;AMSUBBA,N;求求MNJZEQU;累加器累加器A=0,则则M=N,转转EQUJCLESS;CY=1,有借位,则有借位,则MN处理程序处理程序;无借位,则;无借位,则MN,执行执行BIG处理程序处理程序EQU:M=N处理程序处理程序LESS:MN处理程序MN处理程序借位否?是是是否否否第三章第三章 常用控制程序设计常用控制程序设计16位无符号数的比较程序清单:位无符号
6、数的比较程序清单:CLRCY;标志位清零标志位清零 MOVA,MH;AMHMOVR2,NH;R2NHSUBBA,R2;高高8位比较位比较JZHEQU;高高8位相等,转低位相等,转低8位比较位比较 JCLESS;有借位,转有借位,转MN 理程序理程序第三章第三章 常用控制程序设计常用控制程序设计HEQU:CLRCY;标志位清零标志位清零 MOVA,ML;AMLMOVR2,NL;R2NLSUBBA,R2;低低8位比较位比较JZEQU;A=0,则则M=N,转转EQUJCLESS;有借位,则有借位,则MN处理程序处理程序;无借位,执行;无借位,执行MN 理程序理程序EUQ:M=N 处理程序处理程序 L
7、ESS:M0,N0,即两数均为正数。即两数均为正数。(2)M0,N0,即即M为正数,为正数,N为负数。为负数。(3)M0,即即M为负数,为负数,N为正数。为正数。(4)M0,N0,即两数均为负数。即两数均为负数。第三章第三章 常用控制程序设计常用控制程序设计图图3-4 8位有符号数的比较流程框图位有符号数的比较流程框图M AM-N=0?溢出否?ACC.7=1?ACC.7=1?否否否否是是是是转M=N程序转MN程序第三章第三章 常用控制程序设计常用控制程序设计8位有符号数比较程序清单:位有符号数比较程序清单:MOVA,M;AMMOVR2,N;R2NSUBBA,R2;M和和N 比较比较JZEQU;
8、M和和N相等,转相等处理程序相等,转相等处理程序JBPSW.2,FLOW;判断是否溢出判断是否溢出JBACC.7,LESS;无溢出,且无溢出,且A的最高位为的最高位为1,则,则MNFLOW:JBACC.7,BIG;有溢出,且有溢出,且A的最高位为的最高位为1,则,则MNLESS:MN处理程序处理程序;否则,;否则,MN处理程序处理程序 EUQ:M=N处理程序处理程序 返回本节第三章第三章 常用控制程序设计常用控制程序设计3.1.2 逻辑判断程序逻辑判断程序 逻辑判断程序的设计步骤:逻辑判断程序的设计步骤:(1)读入数据(开关状态或阀门的位置);读入数据(开关状态或阀门的位置);(2)屏蔽不需要
9、的状态位;屏蔽不需要的状态位;(3)与所要求的状态比较;与所要求的状态比较;(4)判断比较结果,选择程序入口。)判断比较结果,选择程序入口。第三章第三章 常用控制程序设计常用控制程序设计例例3-1图图3-5中中A、B、C、D表示表示4个开个开关,当四个开关均关,当四个开关均闭合时,顺序执行闭合时,顺序执行相应的程序,否则,相应的程序,否则,继续检测。继续检测。逻辑判断程序流程逻辑判断程序流程框图如图框图如图3-6所示。所示。P1.0P1.2P1.4P1.68031+5VABDCR1R4R3R2.图图3-5 开关位置检测图开关位置检测图 第三章第三章 常用控制程序设计常用控制程序设计读入开关状态
10、屏蔽不需要的位满足要求否?继续执行是否 图图3-6 开关状态检测流程图开关状态检测流程图第三章第三章 常用控制程序设计常用控制程序设计逻辑判断程序清单:逻辑判断程序清单:CHECK:MOVA,P1;读入开关状态读入开关状态 ANLA,#55H;屏蔽无用位屏蔽无用位XRLA,#00H;判断判断A、B、C、D是否全部闭合是否全部闭合JNZCHECK;A、B、C、D没全部闭合,继续检测没全部闭合,继续检测;否则顺序执行相应程序;否则顺序执行相应程序 返回本节第三章第三章 常用控制程序设计常用控制程序设计3.1.3 标志判断程序标志判断程序 标志判断的设计思想标志判断的设计思想是:根据某一设定的是:根
11、据某一设定的标志单元(或标志位)标志单元(或标志位)的状态,决定程序的的状态,决定程序的执行方向。电机旋转执行方向。电机旋转方向控制程序流程图方向控制程序流程图如图如图3-7所示。所示。图图3-7 电机旋转方向控制程序流程图电机旋转方向控制程序流程图标志位判断标志位为1否?是否执行顺时针旋转控制程序执行逆时针旋转控制程序第三章第三章 常用控制程序设计常用控制程序设计电机旋转方向控制程序清单:电机旋转方向控制程序清单:FLAGBIT 00H;设定设定00H为电机旋转方向控制位为电机旋转方向控制位 JBFLAGRIGHT;FLAG=1,转转RIGHTLEFT:;FLAG=0,顺时针旋转控制程序顺时
12、针旋转控制程序 RIGHT:;逆时针旋转控制程序逆时针旋转控制程序 返回本节第三章第三章 常用控制程序设计常用控制程序设计3.2 巡回检测程序设计巡回检测程序设计 3.2.1 概述概述 3.2.2 巡回检测举例巡回检测举例 返回本章首页第三章第三章 常用控制程序设计常用控制程序设计3.2.1 概述概述 所谓的巡回检测就是对生产过程中的各个参数按所谓的巡回检测就是对生产过程中的各个参数按照一定的周期进行检查和测量,检测的数据通过照一定的周期进行检查和测量,检测的数据通过计算机处理后可以进行显示、打印和报警等操作。计算机处理后可以进行显示、打印和报警等操作。巡回检测程序主要由以下几个方面构成:巡回
13、检测程序主要由以下几个方面构成:1.采样周期采样周期T的确定的确定 2.采样开关通道号的控制采样开关通道号的控制 3.A/D转换转换 4.数据处理数据处理 返回本节第三章第三章 常用控制程序设计常用控制程序设计3.2.2 巡回检测举例巡回检测举例 1.利用利用8位位A/D转换芯片(转换芯片(ADC0809)2.采用采用12位位A/D转换芯片(转换芯片(AD574A)第三章第三章 常用控制程序设计常用控制程序设计1.利用利用8位位A/D转换芯片(转换芯片(ADC0809)图图3-8 炉温巡回检测电路原理图炉温巡回检测电路原理图P0.0 0.7D0 7Q0Q2Q1ADDAADDBADDCALEST
14、ART2-7 2-2isb2-8msb2-12分频CLOCKENABLEEOCADC080974007400740674LS3738031.P2.7WRRDALE/PINT0IN0IN1IN2IN3IN4IN5IN6IN7第三章第三章 常用控制程序设计常用控制程序设计系统的硬件电路介绍:系统的硬件电路介绍:(1)测量元件和变送器)测量元件和变送器(2)A/D转换电路转换电路(3)二分频电路)二分频电路 第三章第三章 常用控制程序设计常用控制程序设计本程序由系统初始化程序和中断本程序由系统初始化程序和中断程序组成。初始化程序完成中断程序组成。初始化程序完成中断向量和定时器初值的设定;中断向量和定
15、时器初值的设定;中断程序完成数据采样工作,实现对程序完成数据采样工作,实现对8个通道的巡回检测。个通道的巡回检测。初始化程序功能:设置定时器初始化程序功能:设置定时器0、外部中断外部中断0和外部中断和外部中断1的中断程的中断程序入口;设置定时器序入口;设置定时器0的工作方式的工作方式为方式为方式1,定时时间为,定时时间为100ms;设设置计数单元(置计数单元(30H)初值。初值。初始化程序流程框图如图初始化程序流程框图如图3-9所示。所示。开中断中断初始化启动定时器等待中断开始设置中断向量定时器初始化图图3-9 初始化程序流程图初始化程序流程图第三章第三章 常用控制程序设计常用控制程序设计初始
16、化程序清单:初始化程序清单:ORG0000H AJMPSTART ORG0003H AJMPSAMPLE;转采样中断程序转采样中断程序 ORG000BH AJMPTIME0;转转8秒定时中断程序秒定时中断程序ORG0013HAJMPEOC;转转EOC中断处理程序中断处理程序START:MOVTMOD,#01H;置定时器置定时器0为工作方式为工作方式1 MOVTH0,#3CH第三章第三章 常用控制程序设计常用控制程序设计MOV TL0,#0B0H;定时器初值设定定时器初值设定 MOV 30H,#00H;置计数初值置计数初值SETB IT0;中断请求信号为脉冲方式中断请求信号为脉冲方式 SETB
17、IT1;中断请求信号为脉冲方式中断请求信号为脉冲方式 SETB EX0;外部中断外部中断0中断允许中断允许SETB ET0;定时器定时器0中断允许中断允许 SETB EA;开中断开中断SETB TR0;启动定时器启动定时器HERE:AJMP HERE;等待中断等待中断第三章第三章 常用控制程序设计常用控制程序设计定时器中断程序流程框图如图定时器中断程序流程框图如图3-10所示。所示。图图3-10 定时器中断程定时器中断程序流程框图序流程框图关中断计数单元加18s定时到否?触发INTO重新加载数据开中断否是开 始 返 回第三章第三章 常用控制程序设计常用控制程序设计定时器中断程序程序清单:定时器
18、中断程序程序清单:TIME0:CLREA;关中断关中断INC30H MOVA,30H XRLA,#50H;判断是否到判断是否到8秒秒JZS_8;8秒定时到,转至秒定时到,转至S_8AJMPRECOUN;未到未到8秒,继续计时秒,继续计时S_8:SETBP3.2;触发外部中断触发外部中断0NOP CLRP3.2 NOPRECOUN:MOVTH0,#3CH MOVTL0,#0B0H;设定定时器初值设定定时器初值SETBEA;开中断开中断RETI;中断返回中断返回第三章第三章 常用控制程序设计常用控制程序设计数据采样程序流程框图如图数据采样程序流程框图如图3-11所示。所示。第三章第三章 常用控制程
19、序设计常用控制程序设计数据采样程序程序清单:数据采样程序程序清单:SAMPLE:SETB00H;设置标志位设置标志位 MOVDPTR,#0F00H;设置通道初值设置通道初值 MOVR6,#08H;设置通道数设置通道数 MOVR7,#05H;设置采样次数设置采样次数 MOVR0,#40H;设置数据区首址设置数据区首址 TRAN_S:MOVX DPTR,A;启动启动A/D转换程序流程图转换程序流程图WAIT:JB00H,WAIT;标志位为标志位为1等待等待A/D转换完成中断转换完成中断 第三章第三章 常用控制程序设计常用控制程序设计SETB00H;置标志位置标志位INCDPTR;通道号加通道号加1
20、INCR0INCR0INCR0INCR0INCR0;45H为下一通道采样数据存放首址为下一通道采样数据存放首址DJNZR6,#TRAN_S;8个通道采样未完,继续采样个通道采样未完,继续采样MOVDPTR,#0F00H;8个通道采样结束,重置通道初值个通道采样结束,重置通道初值INCR0;修改采样数据存放地址修改采样数据存放地址DJNZR7,TRAN_S;未完成未完成5次采样,继续次采样,继续;数据处理程序;数据处理程序.RETI第三章第三章 常用控制程序设计常用控制程序设计2.采用采用12位位A/D转换芯片(转换芯片(AD574A)图图3-14 AD574A和和8031的硬件接口电路图的硬件
21、接口电路图Q0DB10P0.0P0.1P0.3P0.2P0.7P0.6P0.5P0.4D0D0D0D0D0D0D0D0Q0Q1OEmsb-11DB10DB3DB4DB5DB6DB7DB8DB9DB2DB11sbBD0STATUSCECSA0/SCR/C12/8RDWRP2.7INT08031AH7400AN-GND.393837363532333412161728181714138743152474LS3735316171819202122232425262762139AD574A+15V-15V+Vs-Vs10Vspn模拟温度信号输入28117132.BIP OFFREF OUTREF IN
22、+15V-15V100K100100K100 12.108第三章第三章 常用控制程序设计常用控制程序设计图图3-15 AD574A A/D转换程序流程框图转换程序流程框图开 始中断向量设置AD574地址设置数据存储首址设置外部中断0设置启动A/D转换结 束中断等待返 回开 始关中断读A/D转换数据高8位保存数据改变存储地址读A/D转换数据低4位开中断(a)转换主程序(b)中断服务程序第三章第三章 常用控制程序设计常用控制程序设计D574A A/D转换程序清单:转换程序清单:ORG0000HAJMPSTARTORG0003HAJMPSAMPLE;转至数据采样程序转至数据采样程序START:MOV
23、DPTR,#0000H;建立建立AD574A的地址的地址MOVR0,#40H;设置数据存储初址设置数据存储初址SETBEX0;允许外部中断允许外部中断0SETBIT0;设置外部中断设置外部中断0请求信号方式为脉冲方式请求信号方式为脉冲方式SETBEA;中断允许中断允许MOVX DPTR,A;启动启动A/D转换转换HERE:AJMPHERE;等待中断等待中断第三章第三章 常用控制程序设计常用控制程序设计中断服务程序清单:中断服务程序清单:SAMPLE:CLREA;关中断关中断MOVDPTR,#0002H MOVX A,DPTR;读读A/D转换数据的高转换数据的高8位位MOVR0,A;保存数据保存
24、数据INCR0INCDPTR MOVX A,DPTR;读读A/D转换数据的低转换数据的低4位位SETBEA;开中断开中断RETI 返回本节第三章第三章 常用控制程序设计常用控制程序设计3.3 数字滤波程序设计数字滤波程序设计 3.3.1 概述概述 3.3.2 数字滤波的方法数字滤波的方法返回本章首页第三章第三章 常用控制程序设计常用控制程序设计3.3.1 概述概述 和模拟滤波装置相比,数字滤波有以下几个优点:和模拟滤波装置相比,数字滤波有以下几个优点:(1)数字滤波通过程序实现,不需硬件设备,系统的可数字滤波通过程序实现,不需硬件设备,系统的可靠性较高。靠性较高。(2)数字滤波可实现多通道共用
25、。数字滤波可实现多通道共用。(3)可对低频信号(如可对低频信号(如0.01Hz)实现滤波。实现滤波。(4)采用不同的算法和参数就可实现对不同信号的滤波,)采用不同的算法和参数就可实现对不同信号的滤波,使用起来灵活、方便。使用起来灵活、方便。返回本节第三章第三章 常用控制程序设计常用控制程序设计3.3.2 数字滤波的方法数字滤波的方法 1.程序判断滤波程序判断滤波 2.中值滤波中值滤波 3.算术平均滤波算术平均滤波 4.加权平均滤波加权平均滤波 5.一阶滞后滤波一阶滞后滤波 6.防脉冲干扰平均值法防脉冲干扰平均值法 第三章第三章 常用控制程序设计常用控制程序设计 1.程序判断滤波程序判断滤波 限
26、幅滤波就是把相邻的两次采样值相减,求出其增量限幅滤波就是把相邻的两次采样值相减,求出其增量(以以绝对值表示绝对值表示),然后与两次采样允许的最大偏差值,然后与两次采样允许的最大偏差值(由被控由被控对象的实际情况决定对象的实际情况决定)y进行比较,如果小于等于进行比较,如果小于等于y,则取本次采样值;如果大于则取本次采样值;如果大于y,则仍取上次采样值作为则仍取上次采样值作为本次采样值。本次采样值。即:即:Yn-Yn-1y,则则Yn=Yn,取本次采样值取本次采样值Yn-Yn-1 y,则则Yn=Yn-1,取上次采样值取上次采样值 (3-1)第三章第三章 常用控制程序设计常用控制程序设计限幅滤波程序
27、流程框图如图限幅滤波程序流程框图如图3-16所示。所示。图图3-16 限幅滤波程序流程框图限幅滤波程序流程框图现场保护Yn-1-Yn0读Yn-1,Yn求 Yn-Yn-1Yn-1-Yn Y取上次采样值取本次采样值现场恢复否否是是开 始返 回第三章第三章 常用控制程序设计常用控制程序设计限幅滤波程序程序清单:限幅滤波程序程序清单:PUSHPSW;保护现场保护现场PUSHA CLRC;进位标志位清零进位标志位清零MOVDATA,DATA2 MOVA,DATA1SUBBA,DATA;求求Yn-1-YnJNCCOMPARE;如果如果Yn-1-Yn0,转转COMPARECPLA;如果如果Yn-1-Yny,
28、DATA1DATAOVER:POPA;恢复现场恢复现场 POPPSWRET;返回返回第三章第三章 常用控制程序设计常用控制程序设计限速滤波的滤波原理如下:限速滤波的滤波原理如下:设在顺序采样时刻设在顺序采样时刻T1、T2、T3所采集的数据分别所采集的数据分别为为Y1、Y2、Y3,则当则当 Y2-Y1 y,则则Y2作为采样值;作为采样值;Y2-Y1 y,则保留则保留Y2,但不作为采样值,但不作为采样值,继续采样得继续采样得Y3;如果如果 Y3-Y2 y,则则Y3作为采样值;作为采样值;Y3-Y2 y,则取作为采样值。则取作为采样值。第三章第三章 常用控制程序设计常用控制程序设计2.中值滤波中值滤
29、波 所谓中值滤波法就所谓中值滤波法就是对某一被测参数是对某一被测参数连续采样连续采样n次(次(n一一般取奇数),然后般取奇数),然后把把n次采样值按顺次采样值按顺序排列,取其中间序排列,取其中间值做为本次采样值。值做为本次采样值。中值滤波程序的流中值滤波程序的流程框图如图程框图如图3-17所所示。示。图图3-17 中值滤波程序流程框图中值滤波程序流程框图 现场保护设置数据个数读数据排序取中值据现场恢复排序完成否?是设置数据区首址 开 始返 回是否第三章第三章 常用控制程序设计常用控制程序设计中值滤波程序程序清单:中值滤波程序程序清单:PUSHPSWPUSHASORT:MOVR0,DATA;数据
30、存储区单元首址数据存储区单元首址MOVR7,TIME;读比较次数读比较次数CLRFLAG;清交换标志位清交换标志位 LOOP:MOVA,R0;取第一个数取第一个数MOVFIRST,A;保存第一个数保存第一个数INCR0MOVSECOND,R0;保存第二个数保存第二个数CLRCSUBBA,R0;两数比较两数比较第三章第三章 常用控制程序设计常用控制程序设计JCNEXT;第一数小于第二数,不交换第一数小于第二数,不交换MOVR0,FIRST DECR0MOVR0,SECOND;交换两数交换两数INCR0SETBFLAG;置交换标志位置交换标志位NEXT:DJNZR7,LOOP;进行下一次比较进行下
31、一次比较JBFLAG,SORT;进行下一轮比较进行下一轮比较DECR0CLRCMOVA,TIME 第三章第三章 常用控制程序设计常用控制程序设计RRCAMOVR7,ACONT:DEC R0DJNZ R7,CONTMOV SAMP,R0;取中值取中值POPAPOPPSWRET第三章第三章 常用控制程序设计常用控制程序设计3.算术平均滤波算术平均滤波所谓算术平均滤波就是所谓算术平均滤波就是把把n个采样值相加,然后个采样值相加,然后取其算术平均值作为本取其算术平均值作为本次有效的采样信号,即:次有效的采样信号,即:图图3-18 算术平均滤波程序流程图算术平均滤波程序流程图现场保护设置数据区首址设置循
32、环次数累加求和恢复现场所有数据加完否?求平均值否是开 始返 回读数据第三章第三章 常用控制程序设计常用控制程序设计算术平均滤波程序清单:(本例中取采样次数算术平均滤波程序清单:(本例中取采样次数n=8)PUSHPSW;现场保护现场保护 PUSHAMOVFLAG,#00H;进位位清零进位位清零MOVR0,DATA;设置数据存储区首址设置数据存储区首址MOVR7,#08H;设置采样数据个数设置采样数据个数CLRA;清累加器清累加器LOOP:ADDA,R0;两数相加两数相加JNCNEXT;无进位,转无进位,转NEXTINCFLAG;有进位,进位位加有进位,进位位加1NEXT:INCR0;数据指针加数
33、据指针加1DJNZR7,LOOP;未加完,继续加未加完,继续加MOVR7,#03H;设置循环次数设置循环次数第三章第三章 常用控制程序设计常用控制程序设计DIVIDE:MOVTEMP,A;保存累加器中的内容保存累加器中的内容MOVA,FLAG;累加结果除累加结果除2CLRC RRCAMOVFLAG,A MOVA,TEMP RRCA DJNZR7,DIVIDE;未结束,继续执行未结束,继续执行 MOVSAMP,A;保存结果至保存结果至SAMP中中POPA;恢复现场恢复现场POPPSW RET 第三章第三章 常用控制程序设计常用控制程序设计4.加权平均滤波加权平均滤波 在算术平均滤波程序中,在算术
34、平均滤波程序中,n次采样值在最后的结果中所占次采样值在最后的结果中所占的比重是相等的,这样虽然消除了随机干扰,但有用信号的比重是相等的,这样虽然消除了随机干扰,但有用信号的灵敏度也随之降低。为了提高滤波效果,将各个采样值的灵敏度也随之降低。为了提高滤波效果,将各个采样值取不同的比重,然后再相加求平均值,这种方法称为加权取不同的比重,然后再相加求平均值,这种方法称为加权平均滤波。一个平均滤波。一个n项加权平均式为:项加权平均式为:第三章第三章 常用控制程序设计常用控制程序设计图图3-19 加权平均滤波程序流程图加权平均滤波程序流程图第三章第三章 常用控制程序设计常用控制程序设计加权平均滤波程序清
35、单:加权平均滤波程序清单:PUSHPSW;保护现场保护现场PUSHAMOVR7,TIME;数据个数设置数据个数设置MOVR0,DATA;数据区首址设置数据区首址设置MOVR1,COEFF;系数存储首址设置系数存储首址设置MOVFLAG,#00H;累加结果存储区清零累加结果存储区清零MOVSAMP_L,#00H MOVSAMP_H,#00HLOOP:MOVA,R0;读采样值读采样值MOVB,AMOVA,R1;读加权平均系数读加权平均系数第三章第三章 常用控制程序设计常用控制程序设计MULABCLRCADDA,SAMP_L;累加和累加和MOVSAMP_L,AMOVA,BADDC A,SAMP_HJ
36、NCNEXT INCFLAG NEXT:MOVSAMP_H,A INCR0;数据区地址加数据区地址加1 INCR1;系数地址加系数地址加1 DJNZR7,LOOP;未加完,继续未加完,继续MOVR7,#07H;设置循环次数设置循环次数第三章第三章 常用控制程序设计常用控制程序设计DIV128:CLRCMOVA,FLAG;累加结果除累加结果除2RRCA MOVFLAG,AMOVA,SAMP_HRRCAMOVSAMP_H,AMOVA,SAMP_LRRCAMOVSAMP_L,ADJNZR7,DIV128;未除完,继续未除完,继续MOVSAMP,SAMP_L;保存滤波后采样值保存滤波后采样值POPA;
37、恢复现场恢复现场POPPSWRET第三章第三章 常用控制程序设计常用控制程序设计5.一阶滞后滤波一阶滞后滤波图图3-20 一阶滞后滤波程序流程图一阶滞后滤波程序流程图求求求1nyanxa)1(1)1(nnyaxannyy1开 始返 回第三章第三章 常用控制程序设计常用控制程序设计一阶滞后滤波程序清单:一阶滞后滤波程序清单:MOV MUL1_H,COEFF1_HMOV MUL1_L,COEFF1_LMOV MUL2_H,DATA1_HMOV MUL2_H,DATA1_LACALLMULTD;MOV BUFF1,PR_H MOV BUFF2,PR_L MOV MUL1_H,COEFF2_H MOV
38、 MUL1_L,COEFF2_L1nya第三章第三章 常用控制程序设计常用控制程序设计MOVMUL2_H,DATA2_HMOVMUL2_H,DATA2_L ACALLMULTD;CLR CMOVA,PR_H;ADD A,BUFF1 MOVPR_H,AMOVA,PR_LADDCA,BUFF2;MOVPR_L,A 第三章第三章 常用控制程序设计常用控制程序设计双字节无符号位乘法子程序(双字节无符号位乘法子程序(MULTD)。)。入口条件:乘数入口条件:乘数MUL1存于存于MUL1_H和和MUL1_L单元中单元中,被乘数被乘数MUL2存于存于MUL2_H和和MUL2_L单单元中。元中。出口条件:乘积
39、按顺序存于出口条件:乘积按顺序存于PR_H、PR_L、MUL1_H、MUL1_L单元中。单元中。第三章第三章 常用控制程序设计常用控制程序设计MULTD:CLR C;清进位标志位清进位标志位MOVPR_L,#00H;乘积高乘积高8位清零位清零 MOVPR_H,#00HMOVR7,#11H;设置循环次数设置循环次数LOOP1:JNCLOOP2;进位标志位为零,转进位标志位为零,转LOOP2MOVA,PR_L;PR+MUL2ADDA,MUL2_LMOVPR_L,AMOVA,PR_HADDC A,MUL2_HMOVPR_H,A第三章第三章 常用控制程序设计常用控制程序设计LOOP2:MOVA,PR_
40、H;PR右移一位右移一位RRCAMOVPR_H,AMOVA,PR_LRRCAMOVPR_L,AMOVA,MUL1_H;MUL1右移一位右移一位RRCAMOVMUL1_H,AMOVA,MUL1_L RRCAMOVMUL1_L,A DJNZR7,LOOP1;循环未结束,继续循环未结束,继续第三章第三章 常用控制程序设计常用控制程序设计6.防脉冲干扰平均值法防脉冲干扰平均值法 图图3-21 防脉冲干扰平均值法程防脉冲干扰平均值法程序流程框图序流程框图 设置数据区首址数据排序设比较次数去掉最小值求平均值剩余数据求和是排序完成否?去掉最大值否开 始返 回第三章第三章 常用控制程序设计常用控制程序设计防脉
41、冲干扰平均值法程序清单:防脉冲干扰平均值法程序清单:PUSHA;保护现场保护现场PUSHPSWSORT:MOVR0,DATA;数据存储区单元首址数据存储区单元首址MOVR7,#10H;读比较次数读比较次数CLRCHANGE;清交换标志位清交换标志位 LOOP:MOVA,R0;取第一个数取第一个数MOVFIRST,A;保存第一个数保存第一个数INCR0MOVSECOND,R0;保存第二个数保存第二个数CLRCSUBBA,R0;两数比较两数比较第三章第三章 常用控制程序设计常用控制程序设计JCNEXT;第一数小于第二数,不交换第一数小于第二数,不交换MOVR0,FIRST DECR0MOVR0,S
42、ECOND;交换两数交换两数INCR0SETBCHANGE;置交换标志位置交换标志位NEXT:DJNZR7,LOOP;进行下一次比较进行下一次比较JBCHANGE,SORT;进行下一轮比较进行下一轮比较 MOVFLAG,#00H;进位位清零进位位清零 INCDATA;去掉最小值去掉最小值MOVR0,DATA;设置数据存储区首址设置数据存储区首址MOVR7,#08H;设置累加循环次数,去掉最大值设置累加循环次数,去掉最大值 CLRA;清累加器清累加器 LOOP:ADDA,R0;两数相加两数相加 JNCNEXT;无进位,转无进位,转NEXT INCFLAG;有进位,进位位加有进位,进位位加1 第三
43、章第三章 常用控制程序设计常用控制程序设计NEXT:INCR0;数据指针加数据指针加1 DJNZR7,LOOP;未加完,继续加未加完,继续加MOVR7,#03H;设置循环次数设置循环次数DIVIDE:MOVTEMP,A;保存累加器中的内容保存累加器中的内容MOVA,FLAG;累加结果除累加结果除2CLRC RRCAMOVFLAG,AMOVA,TEMPRRCA DJNZR7,DIVIDE;未结束,继续执行未结束,继续执行MOVSAMP,A;保存结果至保存结果至SAMP中中POPA;恢复现场恢复现场POPPSWRET返回本节第三章第三章 常用控制程序设计常用控制程序设计3.4 标度变换程序设计标度
44、变换程序设计 对于一般的线性仪表而言,标度变换公式为:对于一般的线性仪表而言,标度变换公式为:为了简化程序设计,一般把被测参数的起点为了简化程序设计,一般把被测参数的起点A0所对应的所对应的A/D转换值设定为转换值设定为0,即,即N0=0,这样式(这样式(3-6)可以改写为:)可以改写为:返回本章首页第三章第三章 常用控制程序设计常用控制程序设计例例3-2某温度测量仪表的量程为某温度测量仪表的量程为100900,利用利用8031和和ADC0809进行进行A/D转换。在某一时刻计算机采样并经过数转换。在某一时刻计算机采样并经过数字滤波后的的数字量为字滤波后的的数字量为0CDH求此时对应的温度值是
45、多少?求此时对应的温度值是多少?(设仪表的量程是线性的)(设仪表的量程是线性的)解:由式(解:由式(3-7)可知,)可知,A0=100,Am=900,Nx=0CDH=(205)D,Nm=0FFH=(255)D,所以此时对应的温度为:所以此时对应的温度为:第三章第三章 常用控制程序设计常用控制程序设计标度变换程序清单:标度变换程序清单:BDCHAN:MOVSUB1_L,AM;INCAM MOVSUB1_H,AMMOVSUB2_L,A0INCA0MOVSUB2_H,A0ACALLSUB2MOVMUL1_H,DIFF_HMOVMUL1_L,DIFF_LMOVSUB1_L,NX;第三章第三章 常用控制
46、程序设计常用控制程序设计INCNX MOVSUB1_H,NXMOVSUB2_L,N0INCN0MOVSUB2_H,N0ACALLSUB2MOVMUL2_H,DIFF_HMOVMUL2_L,DIFF_LACALLMULTD;求求MOVDIV1_H,PR_HMOVDIV1_L,PR_LMOVSUB1_L,NM;第三章第三章 常用控制程序设计常用控制程序设计INCNMMOVSUB1_H,NMMOVSUB2_L,N0INCN0MOVSUB2_H,N0ACALLSUB2MOVDIV2_H,DIFF_HMOVDIV2_L,DIFF_LACALLDUBDIV;CLRCMOVA,DIV1_L第三章第三章 常用
47、控制程序设计常用控制程序设计ADDCA,A0MOVAX,AINC A0MOVA,DIV1_HADDCA,A0MOVAX,A;RET第三章第三章 常用控制程序设计常用控制程序设计双字节减法子程序(双字节减法子程序(SUB2)双字节减法子程序(双字节减法子程序(SUB2)程序入口:被减数放在程序入口:被减数放在SUB1_H、SUB1_L单元中,减数放在单元中,减数放在 SUB2_H、SUB2_L单元中;单元中;程序出口:差放在程序出口:差放在 DIFF_H、DIFF_L单元中。单元中。SUB2:CLRCMOVA,SUB1_L;ASUB1_LSUBBA,SUB2_L;低低8位相减位相减MOVDIFF
48、_L,A;保存低保存低8位差值位差值MOVA,SUB1_H;ASUB1_HSUBBA,SUB2_H;高高8位相减位相减MOVDIFF_H,A;保存高保存高8位差值位差值RET第三章第三章 常用控制程序设计常用控制程序设计双字节无符号数除法(双字节无符号数除法(DUBDIV)程序入口:被除数存放程序入口:被除数存放在在DIV1_H、DIV1_L单元中单元中,除数存放在除数存放在 DIV2_H、DIV2_L单元中;单元中;程序出口:商存放在程序出口:商存放在 DIV1_H、DIV1_L单元中,余数存放在单元中,余数存放在L_L和和L_H单元中。单元中。DUBDIV:CLRA;余数单元清零余数单元清
49、零MOVL_H,AMOVL_L,AMOVR0,#10H;设置除法移位次数设置除法移位次数 LOOP:CLRC;移位移位MOVA,DIV1_L第三章第三章 常用控制程序设计常用控制程序设计RLCAMOVDIV1_L,AMOVA,DIV1_HRLCAMOV DIV1_H,AMOV A,L_LRLCAMOV L_L,AMOV A,L_HRLCAMOV L_H,AMOV PSW.5,C第三章第三章 常用控制程序设计常用控制程序设计LP1:MOVA,L_L;余数单元减除数余数单元减除数SUBBA,DIV2_LMOVR1,AMOVA,L_HSUBBA,DIV2_H JBPSW.5 ADD1JCSMALLA
50、DD1:MOVL_H,AMOVA,R1MOVL_L,AINCDIV1_L;商加一商加一 SAMLL:DJNZR0,LOOP第三章第三章 常用控制程序设计常用控制程序设计MOV 20H,L_H;四舍五入四舍五入 JB07H,ADD_D;商的最高位为商的最高位为1,则转,则转ADD_DCLRC;判断小数部分是否大于判断小数部分是否大于0.5MOV A,L_LRLCAMOV L_L,AMOV A,L_HRLCASUBB A,DIV2_H第三章第三章 常用控制程序设计常用控制程序设计JCRETURN;小数部分小于小数部分小于0.5,退出,退出JNZADD1;小数部分大于小数部分大于0.5,则转,则转A