第10章系统实用程序_第1页
第10章系统实用程序_第2页
第10章系统实用程序_第3页
第10章系统实用程序_第4页
第10章系统实用程序_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第10章章 系系 统统 实实 用用 程程 序序本章将介绍主程序、子程序的概念本章将介绍主程序、子程序的概念以及应用系统的一些实用程序。以及应用系统的一些实用程序。10.1 主程序和子程序主程序和子程序10.2 数据采集及简单控制程序数据采集及简单控制程序10.3 数据处理程序数据处理程序10.4 代码转换程序代码转换程序10.5 软件抗干扰软件抗干扰10.6 最短程序最短程序10.1.1 主程序主程序 主程序是单片机系统控制程主程序是单片机系统控制程序的主框架。序的主框架。 是一个顺序执行的无限循环是一个顺序执行的无限循环的程序的程序 运行过程必须构成一运行过程必须构成一个圈。个圈。10.1

2、 主程序和子程序主程序和子程序10.1.2 子程序及参数传递子程序及参数传递 在程序设计中,有时需反复执在程序设计中,有时需反复执行某段程序。通常行某段程序。通常把具有一定功把具有一定功能的公用程序段作为子程序能的公用程序段作为子程序。 在主程序需要执行这种操作的地在主程序需要执行这种操作的地方执行一条调用指令,转到子程方执行一条调用指令,转到子程序去执行;序去执行; 完成规定操作以后,再返回到完成规定操作以后,再返回到原来的程序原来的程序(主程序主程序)继续执行。继续执行。子程序调用中的参数传递问题子程序调用中的参数传递问题 常用工作寄存器、累加器、地址指针寄存器或堆栈来传递参数。常用工作寄

3、存器、累加器、地址指针寄存器或堆栈来传递参数。1.用工作寄存器用工作寄存器 Rn 或累加器或累加器 A 来传递参数来传递参数【例例10-1】用程序实现用程序实现 c=a+b。 设:设:a、b和和c分别存于内部分别存于内部RAM的的DA、DB和和DC 3个单元中。个单元中。 通过两次调用子程序查平方表,结果在主程序中相加得到。通过两次调用子程序查平方表,结果在主程序中相加得到。 其入口条件是:其入口条件是:(A)=待查表的数;出口条件是待查表的数;出口条件是(A)=平方平方值。值。 主程序片段:主程序片段:STAR:MOV A,DA ;取第一操作数;取第一操作数 ACALL SQR ;调用查表程

4、序;调用查表程序 MOV R1,A ;a暂存暂存R1中中 MOV A,DB ;取;取b ACALL SQR ;第;第2次调用查表程序次调用查表程序 ADD A,R1 ;a MOV DC,A ;结果存于;结果存于DC中中 SJMP ;等待;等待子程序片段:子程序片段:SQR:INC A ;偏移量调整;偏移量调整(RET一字节一字节) MOVC A,A+PC ;查平方表;查平方表 RETTAB:DB 0,1,4,9,16 DB 25,36,49,64,81 END2. 用指针寄存器来传递参数用指针寄存器来传递参数 如果参数在片内如果参数在片内RAM中,则可用中,则可用 R0 或或 R1 作指针;作

5、指针; 如参数在片外如参数在片外RAM或程序存储器中,则可用或程序存储器中,则可用 DPTR 作指针。作指针。【例例10-2】 将将R0和和R1指出的内部指出的内部RAM中两个中两个3字节无符号整数相加,字节无符号整数相加,结果送到由结果送到由R0指出的内部指出的内部RAM中。中。 入口时,入口时,R0和和R1分别指向加数和被加数的低位字节;分别指向加数和被加数的低位字节; 出口时,出口时,R0指向结果的高位字节。低字节在低地址。指向结果的高位字节。低字节在低地址。 NADD: MOV R7,#3 ;3字节加法字节加法 CLR C NADD1:MOV A,R0 ;取加数低字节;取加数低字节 A

6、DDC A,R1 ;取被加数低字节并加到;取被加数低字节并加到A MOV R0,A DEC R0 DEC R1 DJNZ R7,NADD1 INC R0 RET 10.1.3 中断服务子程序中断服务子程序 主程序调用子程序与主程序被中断而去执行中断服主程序调用子程序与主程序被中断而去执行中断服务子程序的过程是务子程序的过程是不同不同的:的: 调用子程序是当主程序运行到调用子程序是当主程序运行到 “LCALL DIS” 指令时,指令时,先自动压入断点先自动压入断点2003H,再进入中断服务子程序;,再进入中断服务子程序; 程序中断是随机的。当主程序运行时,遇到中断申请,程序中断是随机的。当主程序

7、运行时,遇到中断申请,则则CPU执行完当前指令后,首先自动压入断点执行完当前指令后,首先自动压入断点1002H,然后转去执行中断服务子程序。然后转去执行中断服务子程序。上述两个过程的上述两个过程的共同点共同点都是自动压入断点。都是自动压入断点。 当执行子程序到最后一条指令当执行子程序到最后一条指令RET时,自动弹出断点时,自动弹出断点2003H送送PC,返回主程序;,返回主程序; 当中断服务程序执行到最后一条指令当中断服务程序执行到最后一条指令RETI 时,同样弹时,同样弹出断点出断点1002H送送PC,返回主程序。,返回主程序。 除此之外,两种子程序都需要保护现场和恢复现场。除此之外,两种子

8、程序都需要保护现场和恢复现场。10.2 数据采集及简单控制程序数据采集及简单控制程序10.2.1 3 位数据采集程序位数据采集程序 双积分型双积分型 3 3 位位A AD MC14433D MC14433芯片功能:芯片功能: 输出数值范围:输出数值范围: 01999(三位半(三位半BCD码)码) 分辨率分辨率 : 约为约为11位(二进制)位(二进制) 电压输入范围:电压输入范围: 199.0mv1.999V两档两档 相应的基准电压:为相应的基准电压:为200 mv2V 转换速度:转换速度:3次次10次秒次秒 自动极性转换;自动极性转换; 过量程欠量程标志。过量程欠量程标志。引脚功能引脚功能VR

9、EFVREF: 参考电压输入参考电压输入VXVX: 模拟信号电压输入模拟信号电压输入R1R1、R1R1C1C1、C1C1: 外接积分阻容元件外接积分阻容元件CO1CO1、CO2CO2: 外接补偿电容外接补偿电容0.1F0.1FDUDU: 输出控制,正脉冲使转换结果输出控制,正脉冲使转换结果A/DA/D结果寄存器结果寄存器EOCEOC: 转换结束,转换结束时发正脉冲(一般与转换结束,转换结束时发正脉冲(一般与DUDU相连)相连)CLK1CLK1、CLKOCLKO: 外接时钟信号输入输出外接时钟信号输入输出OROR: 过量程标志,过量程标志,VX VX VREFVREF时,时,OROR0 0DS4

10、DS4DS1DS1: 个、十、百、千位输出选通正脉冲个、十、百、千位输出选通正脉冲Q3Q3Q0Q0: BCDBCD码码A AD D转换结果输出转换结果输出VAGVAG: 模拟地模拟地VEEVEE: 模拟负电源模拟负电源VDDVDD: 正电源正电源VSSVSS: 数字地数字地* *对于对于5V5V数字系统,数字系统,VDDVDD、VEEVEE为为5V5V输出时序:输出时序:EOCEOC:转换结束脉冲:转换结束脉冲DS1DS1:千位输出标志:千位输出标志Q3Q3:千位值:千位值0-10-1,1-01-0Q2Q2:极性,:极性,0 0负、负、 1 1正正Q0Q0:量程:量程 0 -0 -正常正常 1

11、 -1 -Q3=1Q3=1欠量程欠量程 Q3=0Q3=0过量程过量程DS2DS2:百位输出标志:百位输出标志DS1DS1:十位输出标志:十位输出标志DS1DS1:个位输出标志:个位输出标志 MC14433MC14433与与80318031接口(非总线型)接口(非总线型)Q0Q0Q3Q3: 接接P1.0P1.0P1.3P1.3DS1DS1DS4DS4: 接接P1.4P1.4P1.7P1.7EOCEOC与与DUDU相连,反相后接相连,反相后接INT1INT1VREFVREF:由基准电压源由基准电压源5G14035G1403(2.5V2.5V)分压产生分压产生2V2V基准电压。基准电压。数据采集程序

12、是以中断方式数据采集程序是以中断方式进行的,中断服务子程序进行的,中断服务子程序 ,名名为为INTL1。由图中硬件由图中硬件 可知可知: : MC14433 MC14433采用连续转换方式采用连续转换方式, ,每每次转换结束,在次转换结束,在EOCEOC端输出一正脉端输出一正脉冲,经反相器接冲,经反相器接89C5189C51的的 INT0 INT0 端端, ,申请中断申请中断 89C51 89C51 响应中断响应中断, ,进入进入INTL1INTL1执行采集任务。执行采集任务。 将采集的千、百、十、个位数将采集的千、百、十、个位数据分别存放在据分别存放在RAMRAM中的中的21H21H24H2

13、4H单单元。元。数据采集数据采集(中断服务中断服务)程序清单如下:程序清单如下: INTL1:MOV A,P1 ;输入一次,;输入一次,(P1)A JNB ACC.4,INTL1 ;DS1=1?即千位选通即千位选通 JB ACC.0,ERR ;Q0=1(过量程过量程),出错,出错 JB ACC.3,L2 ;Q3=1,转千位为,转千位为0 MOV 21H,#01H ;Q3=0,千位为,千位为1,存,存21H单元单元 AJMP L3 L2: MOV 21H,#00H ;千位为;千位为0,存,存21H单元单元 L3: MOV A,P1 ;输入一次;输入一次 JNB ACC.5,L3 ;DS2=1?

14、MOV R0,#22H XCHD A,R0 ;Q3Q022H单元单元 L4: MOV A,P1 ;输入一次;输入一次 JNB ACC.6,L4 ;DS3=1? INC R0 ;指向;指向23H单元单元 XCHD A, R0 ;十位存;十位存23H单元低单元低4位位 L5: MOV A, P1 ;输入一次;输入一次 JNB ACC.7,L5 ;DS4=1? INC R0 ;指向;指向24H单元单元 XCHD A,R0 ;个位存;个位存24H单元低单元低4位位 AJMP L6 ERR:MOV 20H,#0FH ;0FH20H单元,最高位单元,最高位LED显示出错信息显示出错信息“F” L6:RET

15、I10.2.2 航标灯控制程序航标灯控制程序【例【例10-3】用】用89C2051单片机试制一个单片机试制一个“航标灯航标灯”。 fOSC12 MHZ要求:要求: 黑夜定时周期循环发光黑夜定时周期循环发光,定时间隔为定时间隔为2 s,即亮即亮2 s,灭灭2 s。 当白天到来时,航标灯应熄灭,停止定时器工作。当白天到来时,航标灯应熄灭,停止定时器工作。采用定时加计数的方法定时采用定时加计数的方法定时2 s2 s。 如图如图10.610.6所示的光敏三极管来区分白天所示的光敏三极管来区分白天与黑夜。与黑夜。 黑夜时黑夜时, ,无光照,无光照,T1T1和和T2T2均截止,使均截止,使INT0INT0

16、0 0,发出中断请求。,发出中断请求。CPUCPU进入外部中断处进入外部中断处理程序理程序, ,启动定时器工作,利用定时器中断启动定时器工作,利用定时器中断控制灯定时闪闪发光。用软件查询控制灯定时闪闪发光。用软件查询INT0INT0引引脚,只要脚,只要INT0INT00,0,定时器便继续工作。定时器便继续工作。 白天时白天时, ,日光使日光使T1T1导通导通,T2,T2输出低电输出低电平平,INT0,INT01,1,立即关闭定时器,结束外部中立即关闭定时器,结束外部中断处理并返回到主程序。断处理并返回到主程序。设设: T0定时和定时和R7软件计数可以延时软件计数可以延时2s。R7软件计数为软件

17、计数为40次;次;T0定时定时50ms,模式模式1,计数初值为计数初值为:212501000123CB0H主程序:主程序: ORG 0000H AJMP MAIN ORG 0003H AJMP WBINT ;外部中断;外部中断0入口地址入口地址 ORG 000BH AJMP T0INT ;T0中断入口地址中断入口地址 ORG 0100H MAIN: MOV SP,#30H ;设置堆栈指针;设置堆栈指针 CLR P1.7 ;设灯的初态为;设灯的初态为“灭灭” CLR IT0 ;外部中断;外部中断0为电平触发方式为电平触发方式 CLR PX0 ;外部中断;外部中断0为低优先级为低优先级 SETB

18、EX0 ;允许外部中断;允许外部中断0中断中断 SETB EA ;CPU允许中断允许中断 HERE: AJMP HERE ;等待外部中断请求;等待外部中断请求外部中断外部中断0中断服务程序中断服务程序(由由0003H转来转来): WBINT:MOV TMOD,#01H ;T0定时,模式定时,模式1 MOV TL0,#0B0H ;T0计数初值计数初值 MOV TH0,#3CH SETB PT0 ;设;设T0为高优先级中断为高优先级中断 SETB TR0 ;启动;启动T0 SETB ET0 ;T0开中断开中断 MOV R7, #40 ;软件计数值;软件计数值 HERE1:JNB P3.2,HERE

19、1 ;查询;查询INT0,为低为低(黑夜黑夜),等待等待T0中断中断 CLR ET0 ;为高;为高(白天白天),禁止,禁止T0中断中断 CLR TR0 ;关;关T0 CLR P1.7 ;熄灯;熄灯 RETI ;返回主程序;返回主程序定时器定时器0中断服务程序中断服务程序(由由000BH转来转来): T0INT:MOV TL0,#0B0H ;重赋;重赋T0初值初值 MOV TH0,#3CH DJNZ R7,EXIT ;软件计数为;软件计数为0吗吗? MOV R7, #40H ;计数已到,重赋初值;计数已到,重赋初值 CPL P1.7 ;输出取反控制灯;输出取反控制灯“亮亮”或或“灭灭” EXIT

20、:RETI ;中断返回;中断返回 END10.2.3 水位控制程序水位控制程序1. 水位控制原理水位控制原理u 图图10-7中虚线表示允许水位变化的上、下限。水中虚线表示允许水位变化的上、下限。水塔安装固定的塔安装固定的3根金属棒。其中,根金属棒。其中,A棒处于下限水棒处于下限水位,位,A棒接棒接+5V电源,电源,C棒处于上限水位,棒处于上限水位,B棒在上、棒在上、下限水位之间。下限水位之间。B棒、棒、C棒各通过一个电阻与地相棒各通过一个电阻与地相连。连。u 单片机控制电机转动单片机控制电机转动,电机带动水泵供水供水时电机带动水泵供水供水时,水水位上升位上升,当当达到上限时达到上限时,由于水导

21、电,由于水导电,B、C棒连通棒连通+5V。b和和c两端均为两端均为”1”.这时,应停止电机工作,这时,应停止电机工作,不再供水。不再供水。l 当水位当水位降到下限时降到下限时,B、C棒都不能与棒导通,棒都不能与棒导通,b和和c两端均为两端均为”0”。启动电机供水启动电机供水.l 当水位处于当水位处于上下限之间上下限之间,棒与棒与A棒导通棒导通.棒不棒不能与棒导通,能与棒导通,b端为端为”1”,c端为端为“0”状态。应状态。应继续维持原有的工作状态。继续维持原有的工作状态。2. 水位控制电路水位控制电路图图10-8 水塔水位控制电路水塔水位控制电路3. 信号输入与输出信号输入与输出 水位信号由水

22、位信号由P1.0和和P1.1输入输入 由由P1.2端输出,去控制电机。端输出,去控制电机。 由由P1.3输出报警信号,驱动一输出报警信号,驱动一 只发光二极管进行光报警。只发光二极管进行光报警。C (P1.1)B (P1.0)操操 作作00电机运转电机运转01维持原状维持原状10故障报警故障报警11电机停转电机停转4. 控制程序控制程序主程序清单:主程序清单: ORG 0030HLOOP: ORL R1,#03H ;为检查水位状态作准备;为检查水位状态作准备 MOV A,P1 JNB ACC.0,ONE ;P1.0=0则转则转 JB ACC.1, TWO ;P1.1=1则转则转BACK: AC

23、ALL D10S ;延时;延时10 s AJMP LOOPONE: JNB ACC.1,THREE ;P1.1=0则转则转 CLR 93H ;0P1.3,启动报警装置,启动报警装置 SETB 92H ;1P1.2,停止电机工作,停止电机工作FOUR: SJMP FOURTHREE:CLR 92H ;启动电机;启动电机 AJMP BACKTWO: SETB 92H ;停止电机工作;停止电机工作 AJMP BACK延时子程序延时子程序D10 S(延时延时10 s): ORG 0100H D10S: MOV R3, #19H LOOP3:MOV R1, #85H LOOP1:MOV R2, #0FA

24、H LOOP2:DJNZ R2,LOOP2 DJNZ R1,LOOP1 DJNZ R3,LOOP3 RET 10.2.4 蜂鸣音报警子程序蜂鸣音报警子程序 压电式蜂鸣器约需压电式蜂鸣器约需10 mA的驱动电流的驱动电流 当当P1.0输出高电平输出高电平1时,压电蜂鸣器两端时,压电蜂鸣器两端获得约获得约+5V电压而鸣叫;电压而鸣叫; 当当P1.0输出低电平输出低电平0时,压电蜂鸣器两引时,压电蜂鸣器两引线间的直流电压降至线间的直流电压降至接近于接近于0 V,蜂鸣器停,蜂鸣器停止发声。止发声。连续鸣音连续鸣音30 ms的控制子程序清单:的控制子程序清单:SND:SETB P1.0 ;P1.0高,蜂

25、鸣器鸣叫高,蜂鸣器鸣叫 MOV R7,#1EH ;延时;延时30 msDL:MOV R6, #0F9H DL1:DJNZ R6,DL1 ;小循环延时;小循环延时1 ms DJNZ R7,DL CLR P1.0 ;P1.0低,停止蜂鸣器低,停止蜂鸣器 RET10.3 数据处理程序数据处理程序 10.3.1 排序程序排序程序【例【例10-4】 将片内将片内RAM 50H59H中的数据按从小到大的顺序排序中的数据按从小到大的顺序排序 解解: 这是一个排序问题。这是一个排序问题。l 按从小到大排列称升序排列,反之称降序排列。按从小到大排列称升序排列,反之称降序排列。l 根据题意,排序程序在执行时,取前

26、数与后数比较:根据题意,排序程序在执行时,取前数与后数比较: p 如果前数小于后数,则继续顺序比较下去;如果前数小于后数,则继续顺序比较下去;p 如果前数大于后数,则前数和后数交换后再继续比较下去。如果前数大于后数,则前数和后数交换后再继续比较下去。p 第一次循环将在最后单元中得到最大的数第一次循环将在最后单元中得到最大的数(冒泡法冒泡法)。l 得到所有数据的升序排列需要经过多重循环。得到所有数据的升序排列需要经过多重循环。程序清单如下:程序清单如下: CLR 00H ;清除交换标志位;清除交换标志位 QUE:MOV R3,#9H ;10个数据循环次数个数据循环次数 MOV R0,#50H ;

27、数据存放区首址;数据存放区首址 MOV A,R0 ;取前数;取前数 L2:INC R0 MOV R2,A ;保存前数;保存前数 SUBB A,R0 ;前数减后数;前数减后数 MOV A,R2 ;恢复前数;恢复前数 JC L1 ;顺序则继续比较;顺序则继续比较 SETB 00H ;逆序则建立标志位;逆序则建立标志位 XCH A,R0 ;前数与后数交换;前数与后数交换 DEC R0 XCH A,R0 INC R0 ;仍指向后数单元;仍指向后数单元 L1:MOV A, R0 DJNZ R3,L2 ;依次重复比较;依次重复比较 JB 00H,QUE ;交换后重新比较;交换后重新比较 RET10.3.2

28、 数字滤波程序数字滤波程序u 前向通道中,必须消除被测信号中的噪音和干扰。前向通道中,必须消除被测信号中的噪音和干扰。u 噪音有两大类:噪音有两大类: l 一类为周期性的。典型为一类为周期性的。典型为50 Hz的工频干扰。采用硬件滤波电的工频干扰。采用硬件滤波电路能有效地消除其影响。路能有效地消除其影响。l 另一类为不规则随机性的,可以用数字滤波方法予以削弱或滤另一类为不规则随机性的,可以用数字滤波方法予以削弱或滤除。除。u 数字滤波,就是通过程序计算或判断来减少干扰在有用信号中数字滤波,就是通过程序计算或判断来减少干扰在有用信号中的比重,实际是一种程序滤波。的比重,实际是一种程序滤波。u 经

29、常采用的经常采用的中值法、去极值法中值法、去极值法可对采样信号进行数字滤波,以可对采样信号进行数字滤波,以消除常态干扰。消除常态干扰。u 中值滤波是对某一参数连续采样中值滤波是对某一参数连续采样n次次(n一般取奇数一般取奇数),然后把,然后把n次的采样值从小到大或从大到小排列,再取中间值作为本次采样值。次的采样值从小到大或从大到小排列,再取中间值作为本次采样值。u 该算法的采样次数常为该算法的采样次数常为3次或次或5次。对于变化很慢的参数,有时次。对于变化很慢的参数,有时也可增加次数,例如也可增加次数,例如15次。可采用常规的排序算法,如冒泡算法。次。可采用常规的排序算法,如冒泡算法。u中值滤

30、波对于去掉由于偶然因素引起的波动或采样器不稳定而造中值滤波对于去掉由于偶然因素引起的波动或采样器不稳定而造成的脉动干扰比较有效。变量变化比较缓慢成的脉动干扰比较有效。变量变化比较缓慢,效果比较好。对于变化效果比较好。对于变化较为剧烈的参数,此法不宜。较为剧烈的参数,此法不宜。现以现以3次采样为例。次采样为例。 3次采样值分别存放在次采样值分别存放在R2、R3和和R4中,程序运行之后,将中,程序运行之后,将3个数个数据从小到大顺序排列,仍然存放在据从小到大顺序排列,仍然存放在R2、R3和和R4中,中值在中,中值在R3中。中。 程序清单:程序清单: FILT2: MOV A,R2 ;R2R3吗吗?

31、 CLR C SUBB A,R3 JC FILT21 MOV A,R2 ;R2R3时,交换时,交换R2和和R3 XCH A,R3 MOV R2,A FILT21:MOV A,R3 ;R3R4吗吗? CLR C SUBB A,R4 JC FILT22 ;R3R4时,排序结束时,排序结束 MOV A,R4 ;R3R4时,交换时,交换R3和和R4 XCH A,R3 XCH A,R4 ;R3R2吗吗? CLR C SUBB A,R2 JNC FILT22 ;R3R2时,排序结束时,排序结束 MOV A,R2 ;R3R2时,以时,以R2为中值为中值 MOV R3,A ;中值在;中值在R3中中 FILT2

32、2:RET指导思想:指导思想: 连续采样连续采样n次后累加求和,同时找出其中的最大值与次后累加求和,同时找出其中的最大值与最小值,再从累加和中减去最大值和最小值,按最小值,再从累加和中减去最大值和最小值,按n个采样值个采样值求平均,即可得到有效采样值。求平均,即可得到有效采样值。 为使平均滤波算法简单,为使平均滤波算法简单,n-2 应为应为2、4、6、8或或16,故,故 n 常取常取4、6、8、10或或18。具体作法有两种:具体作法有两种: 对于快变参数,先连续采样对于快变参数,先连续采样n次,然后再处理,但要在次,然后再处理,但要在RAM中中开辟出开辟出n个数据的暂存区;个数据的暂存区; 对

33、于慢变参数,可一边采样,一边处理,而不必在对于慢变参数,可一边采样,一边处理,而不必在RAM中开辟中开辟数据暂存区。数据暂存区。 下面以下面以n4为例,即连续进行为例,即连续进行4次数据采样,去掉其中最大值和次数据采样,去掉其中最大值和最小值,然后求剩下两个数据的平均值。最小值,然后求剩下两个数据的平均值。以以n4为例:为例: 连续进行连续进行4次数据次数据采样,去掉其中最大采样,去掉其中最大值和最小值,然后求值和最小值,然后求剩下两个数据的平均剩下两个数据的平均值。值。R2、R3存放最大值,存放最大值,R4、R5存放最小值,存放最小值,R6、R7存放累加和及存放累加和及 最后结果。最后结果。

34、 连续采样不只限连续采样不只限4次,可以进行任意次,次,可以进行任意次,这时,只须改变这时,只须改变R0中中的数值。的数值。程序清单:程序清单: CLR A MOV R2,A ;0最大值寄存器最大值寄存器R2R3 MOV R3,A MOV R6,A ;0累加和寄存器累加和寄存器R6R7 MOV R7,A MOV R4,#3FH ;3FFFH最小值寄存器最小值寄存器R4R5 MOV R5,#0FFH MOV R0,#4H DAV1:LCALL RDXP ;读;读B,A(调采样子程序调采样子程序) MOV R1,A ;采样值低位暂存;采样值低位暂存R1,高位在,高位在B ADD A,R7 MOV

35、R7,A ;低位加到;低位加到R7 MOV A,B ADDC A,R6 MOV R6,A ;高位加到;高位加到R6,(R6R7)+(BA)R6R7 CLR C MOV A,R3 SUBB A,R1 MOV A,R2 SUBB A,B JNC DAV2 ;输入值;输入值(R2R3)? MOV A,R1 MOV R3,A MOV R2,B ;输入值;输入值R2R3DAV2DAV2:CLR CCLR C MOV A MOV A,R1R1 SUBB A SUBB A,R5R5 MOV A MOV A,B B SUBB A SUBB A,R4R4 JNC DAV3 JNC DAV3 ;输入值;输入值(R

36、4R5)?(R4R5)? MOV A MOV A,R1R1 MOV R5 MOV R5,A A ;输入值;输入值R4R5R4R5 MOV R4 MOV R4,B BDAV3:DJNZ R0,DAV1 ;n-1=0? CLR C MOV A ,R7 SUBB A ,R3 XCH A ,R6 SUBB A ,R2 XCH A ,R7 SUBB A ,R5 XCH A ,R6 SUBB A,R4 ;n个采样值的累加和减去最大值和最小值,个采样值的累加和减去最大值和最小值,n=4 CLR C RRC A XCH A ,R6 RRC A MOVC R7,A ;剩下数据求平均值;剩下数据求平均值(除除2)

37、 RET10.3.3 标度变换标度变换(工程量变换工程量变换) 生产现场的各种参数都有不同的数值和量纲,例如,温度单位生产现场的各种参数都有不同的数值和量纲,例如,温度单位用用,压力用,压力用Pa(帕帕),流量用,流量用ms。 这些参数经转换后,统一变为这些参数经转换后,统一变为0个数码,例如,个数码,例如,8位位转换器输出的数码为转换器输出的数码为0255。 这些数码虽然代表参数值的大小,但是并不表示带有量纲的参这些数码虽然代表参数值的大小,但是并不表示带有量纲的参数值,必须将其转换成有量纲的数值,才能进行显示和打印。这种数值,必须将其转换成有量纲的数值,才能进行显示和打印。这种转换称为转换

38、称为标度变换标度变换或或工程量转换。工程量转换。前提条件是参数值与转换结果前提条件是参数值与转换结果(采样值采样值)之间应呈线性关系。之间应呈线性关系。l 当输入信号为当输入信号为0(即参数值起点值即参数值起点值),输出值不为,输出值不为0时,标度变换公式为:时,标度变换公式为:式中:式中: 参数量程起点值,一次测量仪表的下限;参数量程起点值,一次测量仪表的下限; 参数量程终点值,一次测量仪表的上限;参数量程终点值,一次测量仪表的上限; 参数测量值,实际测量值参数测量值,实际测量值(工程量工程量); N量程起点对应的量程起点对应的A/D转换后的值,仪表下限所对应的数字量;转换后的值,仪表下限所

39、对应的数字量; N量程终点对应的值,仪表上限所对应的数字量;量程终点对应的值,仪表上限所对应的数字量; N测量值对应的测量值对应的A/D值值(采样值采样值),是经数字滤波后确定的采样值。,是经数字滤波后确定的采样值。 其中,、和对一个检测系统来说是常数。其中,、和对一个检测系统来说是常数。l 在参数量程起点在参数量程起点(输入信号为输入信号为0),值为,值为0(即即)。标度变换:。标度变换:l 很多测量系统中,参数量程起点值很多测量系统中,参数量程起点值(即仪表下限值即仪表下限值)00,对应的,对应的0。可进一步简化为:可进一步简化为:例如例如:某测量点的温度量程为某测量点的温度量程为2004

40、00, 采用采用8位位A/D 转换器。转换器。那么,那么,0200 , 400 , 00, 255, 采样值为。其标采样值为。其标度变换公式为:度变换公式为: 200 200 只要把这一算式编成程序,只要把这一算式编成程序,将转换后经数字滤波将转换后经数字滤波处理后的值代入,即可处理后的值代入,即可计算出温度的真实值。计算出温度的真实值。如果传感器输出特性是非线性的,可采用如果传感器输出特性是非线性的,可采用查表法查表法进行标度变换。进行标度变换。例:用热敏电阻组成的惠斯顿电桥测温电路。例:用热敏电阻组成的惠斯顿电桥测温电路。 R1是热敏电阻是热敏电阻,当温度当温度T0时时,R1取值取值R1(

41、T0) 电桥达到平衡。平衡条件为:电桥达到平衡。平衡条件为:R1(T0)24此时,电桥输出电压出此时,电桥输出电压出 V。 若温度改变若温度改变,则则R1的阻值改变的阻值改变,电桥平衡遭到破坏电桥平衡遭到破坏,产生输出电压产生输出电压出。通过测量电压出值就能推得出。通过测量电压出值就能推得R1的阻值变化的阻值变化,测得环境温度的变化。测得环境温度的变化。l 进行标度变换时,首先测量出温度检测回路的温度电压特性曲线,如图进行标度变换时,首先测量出温度检测回路的温度电压特性曲线,如图10-16所示;所示;l 然后按照然后按照A/D转换器的位数转换器的位数(即分辨精确度即分辨精确度)及相应的电压值范

42、围,从温度及相应的电压值范围,从温度电压特性曲线中查出各输出电压所对应的环境温度值,将其列成一张表,固电压特性曲线中查出各输出电压所对应的环境温度值,将其列成一张表,固化在化在Flash ROM中;中;l 当采集到数字量后,查表就能准确地得出环境温度值,据此再去进行显示当采集到数字量后,查表就能准确地得出环境温度值,据此再去进行显示和控制。和控制。 表表10-2 温度电压特性表温度电压特性表 (P296)10.4 代码转换程序代码转换程序各种代码之间的转换常采用算法处理和查表方式。各种代码之间的转换常采用算法处理和查表方式。【例【例10-5】单字节二翻十子程序。】单字节二翻十子程序。 将将00

43、HFFH 内二进制数转换为内二进制数转换为 BCD 数数(0256)。解:解: 入口:入口: (A)=二进制数。二进制数。 出口出口:百、十和个位分别存入百、十和个位分别存入R0指出的两个指出的两个RAM单单元元程序清单:程序清单:BINBCD:MOV B,#100 DIV AB ;(A)=百位数百位数 MOV R0 ,A ;百位;百位BCD存入存入RAM INC R0 MOV A,#10 XCH A,B DIV AB ;(A)=十位数,十位数,(B)=个位数个位数 SWAP A ADD A,B ;(A)=压缩压缩BCD码码(十位个位十位个位) MOV R0 ,A ;存入;存入RAM RET【

44、例【例10-6】单字节十翻二子程序。】单字节十翻二子程序。 将将2位位BCD数数(压缩为压缩为1字节字节)转换成二进制数。转换成二进制数。解:解: 将累加器将累加器A中的压缩中的压缩BCD码转换成二进制数,结果仍在码转换成二进制数,结果仍在A中。中。 方法是将方法是将A中的高位乘以中的高位乘以10,再加上,再加上A的低位字节。的低位字节。DTOB:MOV R2,A ;暂存;暂存 ANL A,#0F0H ;屏蔽低;屏蔽低4位位 SWAP A MOV B,#10 MUL AB ;高位乘以;高位乘以10 MOV R3,A ;暂存;暂存 MOV A,R2 ;取;取BCD数数 ANL A,#0FH ;取

45、;取BCD数个位数个位 ADD A,R3 ;得转换结果;得转换结果 RET【例【例10-7】一位十六进制数转换成】一位十六进制数转换成ASCII码码。 解:解: 本程序中,由本程序中,由R0指出十六进制数存放单元,指出十六进制数存放单元, 经转换后结果仍存于原处。经转换后结果仍存于原处。HEXASC1:MOV A,R0 ;取十六进制数;取十六进制数 ANL A,#0FH ;屏蔽高;屏蔽高4位位 ADD A, #03H ;修正偏移量;修正偏移量 MOVC A, A+PC ;查表,取;查表,取ASCII代码代码 XCH A,R0 ;存储;存储 INC R0 ;更新地址;更新地址 RETASCTAB

46、: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H【例【例10-8】十六进制数的】十六进制数的ASCII代码转换成二进制数代码转换成二进制数。解:解: 对于小于或等于对于小于或等于9的数的的数的ASCII代码,减去代码,减去30H得得4位二进制数;位二进制数; 对于大于对于大于 9的十六进制数的的十六进制数的ASCII代码,减去代码,减去37H得得4位二进制数。则正好位二进制数。则正好是是0AH0FH的结果。的结果。 程序以程序以R2作为入口和出口。程序清单如下:作为入口和出口。程序清单如下:AS

47、CHEX:MOV A,R2 ;取操作数;取操作数 CLR C SUBB A,#30H ;09的转换的转换 MOV R2,A ;暂存结果;暂存结果 SUBB A,#0AH ;结果是否;结果是否9? JC SBIO ;9则转换正确,返回则转换正确,返回 XCH A,R2 SUBB A,#37H ;9,则减,则减37HSBIO: MOV R2,A ;存放结果;存放结果 RET10.5 软件抗干扰软件抗干扰l 干扰可以沿各种线路侵入,也可以以场的形式干扰可以沿各种线路侵入,也可以以场的形式(高电压、大电流、高电压、大电流、电火花等电火花等)从空间侵入微机系统;电网中各种浪涌电压入侵,系统从空间侵入微机

48、系统;电网中各种浪涌电压入侵,系统的接地装置不良或不合理等,也是引入干扰的重要途径。的接地装置不良或不合理等,也是引入干扰的重要途径。l 干扰对微机系统的影响有干扰对微机系统的影响有3个部位:个部位: 前向通道、前向通道、CPU内核及后向内核及后向通道。对前向通道的干扰会使输入的模拟信号失真,数字信号出错。通道。对前向通道的干扰会使输入的模拟信号失真,数字信号出错。对这一部位的抗干扰,硬件方面可采用光电隔离、硬件滤波电路等对这一部位的抗干扰,硬件方面可采用光电隔离、硬件滤波电路等措施,在软件方面可采用前面讲的数字滤波方法。措施,在软件方面可采用前面讲的数字滤波方法。l 干扰可使微机系统内核三总

49、线上的数字信号错乱,从而引发一系干扰可使微机系统内核三总线上的数字信号错乱,从而引发一系列无法预料的后果,形成一系列错误。列无法预料的后果,形成一系列错误。CPU得到错误的地址信号后,得到错误的地址信号后,引起程序计数器出错,使程序运行离开正常轨道,导致程序失控、引起程序计数器出错,使程序运行离开正常轨道,导致程序失控、飞跑或死循环,进而使后向通道的输出信号混乱,不能正常反映微飞跑或死循环,进而使后向通道的输出信号混乱,不能正常反映微机系统的真实输出,从而导致一系列严重后果。机系统的真实输出,从而导致一系列严重后果。l 本节主要讨论软件抗干扰的问题,关于硬件的抗干扰措施这里不本节主要讨论软件抗

50、干扰的问题,关于硬件的抗干扰措施这里不再论述。再论述。10.5.1 软件陷阱技术软件陷阱技术l 当当CPU受到干扰后,会将一些操作数当作指令码来执行,造成程序执行混乱。受到干扰后,会将一些操作数当作指令码来执行,造成程序执行混乱。这时,首先要尽快将程序纳入正轨这时,首先要尽快将程序纳入正轨(执行真正的指令序列执行真正的指令序列)。l l 真正的软件陷阱由真正的软件陷阱由3条指令构成:条指令构成: NOP NOP LJMP ERRERR:一段专门对程序出错进行处理的程序,以使程序:一段专门对程序出错进行处理的程序,以使程序 按既定目标执行。按既定目标执行。 ORG 0000H 0000 STAR

51、T:LJMP MAIN ;引向主程序入口;引向主程序入口0003 LJMP PGINT0 ;INT0中断正常入口中断正常入口0006 NOP ;冗余指令;冗余指令0007 NOP0008 LJMP ERR ;陷阱;陷阱000B LJMP PGT0 ;T0中断正常入口中断正常入口000E NOP ;冗余指令;冗余指令000F NOP0010 LJMP ERR ;陷阱;陷阱0013 LJMP ERR ;未使用;未使用INT1,设陷阱,设陷阱0016 NOP ;冗余指令;冗余指令0017 NOP0018 LJMP ERR ;陷阱;陷阱001B LJMP PGT1 ;T1中断正常入口中断正常入口001

52、E NOP ;冗余指令;冗余指令001F NOP0020 LJMP ERR ;陷阱;陷阱0023 LJMP ERR ;未用串口中断,设陷阱;未用串口中断,设陷阱0026 NOP ;冗余指令;冗余指令0027 NOP0028 LJMP ERR ;陷阱;陷阱 在未使用的中断在未使用的中断向量区设置陷阱,向量区设置陷阱,就能及时捕捉到错就能及时捕捉到错误中断。误中断。设:使用了设:使用了3个中个中断:断:INT0、T0和和T1, 可以按如左方式可以按如左方式来设置中断向量区。来设置中断向量区。l 未编程未编程ROM,都维持都维持(0FFH),是一条单字节指令是一条单字节指令“MOV R7,A”,l

53、只要每隔一段设置一个陷阱,就能捕捉到弹飞的程序。只要每隔一段设置一个陷阱,就能捕捉到弹飞的程序。 软件陷阱要指向出错处理过程软件陷阱要指向出错处理过程ERR才稳妥,才稳妥, ERR可安排在可安排在0030H开始的地方。开始的地方。l 可以用可以用“00 00 20 00 30” 5字节作为陷阱来填充字节作为陷阱来填充ROM中的未使中的未使用用 空间。即指令:空间。即指令: NOP / NOP / LJMP 0030H, 或隔一段设置一个陷阱或隔一段设置一个陷阱“02 00 30”,即指令:,即指令: LJMP 0030H, 其它单元保持其它单元保持0FFH不变。不变。 表格有两类:表格有两类:

54、 一类是数据表格,供一类是数据表格,供“MOVC A,A+PC”指令指令或或“MOVC A,A+DPTR”指令使用;指令使用; 另一类是散转表格,供另一类是散转表格,供“JMP A+DPTR”指令使用,其内容为指令使用,其内容为一系列的一系列的3字节指令字节指令LJMP或两字节指令或两字节指令AJMP。 只能在表格的最后安排只能在表格的最后安排5字节陷阱字节陷阱 (NOP / NOP / LJMP ERR)。 程序区的指令串中间常有一些断裂点,正常执行程序到不会继续往下执程序区的指令串中间常有一些断裂点,正常执行程序到不会继续往下执行了,这类指令有行了,这类指令有LJMP、SJMP、AJMP、

55、RET和和RETI。在这种地方安。在这种地方安排陷阱后,就能有效地捕获到它,而又不会影响正常执行的程序流程。排陷阱后,就能有效地捕获到它,而又不会影响正常执行的程序流程。例如例如:根据:根据A中内容的正、负、零情况进行三分支的程序中,软件陷阱的中内容的正、负、零情况进行三分支的程序中,软件陷阱的安置方式如下:安置方式如下: JNZ XYZ ;零处理;零处理 AJMP ABC ;断裂点;断裂点 NOP NOP LJMP ERR ;陷阱;陷阱 XYZ: JB ACC.7,VUW ;正处理;正处理 AJMP ABC ;断裂点;断裂点 NOP NOP LJMP ERR ;陷阱;陷阱 VUW: ;负处理

56、;负处理 ABC: MOV A,R0 ;取结果;取结果 RET ;断裂点;断裂点 NOP NOP LJMP ERR ;陷阱;陷阱10.5.2 软件看门狗软件看门狗程序运行监视系统程序运行监视系统 (WATCHDOG)特性:特性: uu 本身能独立工作,基本上不依赖于本身能独立工作,基本上不依赖于CPU; uu CPU在一个固定的时间间隔内和该系统打一次交道在一个固定的时间间隔内和该系统打一次交道 (喂一次狗喂一次狗),以表明系统目前尚正常;,以表明系统目前尚正常; uu 当当CPU陷入死循环后,能及时发觉并使系统复位。陷入死循环后,能及时发觉并使系统复位。 在在8096系列单片机和增强型系列单

57、片机和增强型89C51系列单片机芯片内已经内嵌系列单片机芯片内已经内嵌了程序运行监视系统,使用起来很方便。了程序运行监视系统,使用起来很方便。 在普通型在普通型51系列单片机中,必须由用户自己建立。如果要实现系列单片机中,必须由用户自己建立。如果要实现WATCHDOG的真正目标,该系统还必须包括完全独立于的真正目标,该系统还必须包括完全独立于CPU之外之外的硬件电路,有时为了简化硬件电路,也可以采用纯软件的的硬件电路,有时为了简化硬件电路,也可以采用纯软件的WATCHDOG系统。系统。软件软件WATCHDOG是一个比较好的补救措施,是一个比较好的补救措施,只是其可靠性稍差一些。只是其可靠性稍差

58、一些。纯软件的纯软件的WATCHDOG系统系统l 当系统陷入死循环后,只有比它更高级的中断才能夺走对当系统陷入死循环后,只有比它更高级的中断才能夺走对CPU的控制。的控制。为此,用一个定时器来作为此,用一个定时器来作WATCHDOG,将它的溢出中断设定为高优先级,将它的溢出中断设定为高优先级中断,其他中断均设为低优先级中断。中断,其他中断均设为低优先级中断。l 例如:用例如:用T0,作定时约为,作定时约为16 ms,在初始化时建,在初始化时建WATCHDOG: MOV TMOD, #01H ;设置;设置T0为为16位定时器位定时器 SETB ET0 ;允许;允许T0中断中断 SETB PT0

59、;设置;设置T0为高级中断为高级中断 MOV TH0, #0E0H ;定时约;定时约16 ms(6 MHz晶振晶振) SETB TR0 ;启动;启动T0 SETB EA ;开中断;开中断l WATCHDOG启动以后,工作程序必须经常启动以后,工作程序必须经常“喂它喂它”,执行一条,执行一条 “MOV TH0,#0E0H”指令,且每两次间隔不大于指令,且每两次间隔不大于16 ms (如可以每如可以每 10 ms“喂喂”一次一次)。l 当程序陷入死循环后,当程序陷入死循环后,16 ms之内即可引起一次之内即可引起一次T0溢出,产生高优溢出,产生高优先级中断,从而跳出死循环。先级中断,从而跳出死循环

60、。 T0中断直接转向出错处理程序中断直接转向出错处理程序,在中断向量区放置一条在中断向量区放置一条“LJMP ERR”指令即可。由出错处理程序完成善后,并用软件方法使系统复位。指令即可。由出错处理程序完成善后,并用软件方法使系统复位。完整的看门狗程序完整的看门狗程序,它包括模拟主程序,喂狗,它包括模拟主程序,喂狗(DOG)程序和空弹返回程序和空弹返回(TOP)程序。程序。 ORG 0000H AJMP MAIN ORG 000BH LJMP TOP MAIN:MOV SP, #60H MOV PSW, #00H MOV SCON,#00H MOV IE, #00H MOV IP, #00H ;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论