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

下载本文档

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

文档简介

1、LOGO单片机原理单片机原理及接口技术及接口技术(高职高专版)(高职高专版) 第第9 9章章 系统实用程序系统实用程序LOGO9.1 主程序和子程序的概念主程序和子程序的概念9.2 数据采集及简单控制程序数据采集及简单控制程序9.3 数据处理程序数据处理程序9.4 代码转换程序代码转换程序9.5 软件抗干扰软件抗干扰9.6 最短程序最短程序第第9 9章章 系统实用程序系统实用程序LOGO9.1.1 主程序主程序 主程序是单片机系统控主程序是单片机系统控制程序的主框架。制程序的主框架。 是一个顺序执行的无限是一个顺序执行的无限循环的程序循环的程序 运行过程必须构运行过程必须构成一个圈成一个圈。9

2、.1 9.1 主程序和子程序的概念主程序和子程序的概念LOGO9.1.2 子程序及参数传递子程序及参数传递 在程序设计中,有时需反复执在程序设计中,有时需反复执行某段程序。通常行某段程序。通常把具有一定功把具有一定功能的公用程序段作为子程序能的公用程序段作为子程序。 在主程序需要执行这种操作的在主程序需要执行这种操作的地方执行一条调用指令,转到子地方执行一条调用指令,转到子程序去执行;程序去执行; 完成规定操作以后,再返回完成规定操作以后,再返回到原来的程序到原来的程序(主程序主程序)继续执行。继续执行。9.1 9.1 主程序和子程序的概念主程序和子程序的概念LOGO子程序调用中的参数传递问题

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

4、待查表的数;出口条件是(A)=平方值。平方值。 主程序片段:主程序片段:STAR:MOV A,DA ;取第一操作数;取第一操作数 ACALL SQR ;调用查表程序;调用查表程序 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 ;查平方表;查平方表 RET TAB:DB 0,1,4,9,16 DB 25,

5、36,49,64,81 END9 9.1.2.1.2 子程序及参数传递子程序及参数传递 LOGO2. 用指针寄存器来传递参数用指针寄存器来传递参数 如果参数在片内如果参数在片内RAM中,则可用中,则可用 R0 或或 R1 作指针;作指针; 如参数在片外如参数在片外RAM或程序存储器中,则可用或程序存储器中,则可用 DPTR 作作指针。指针。【例例9-2】 将将R0和和R1指出的内部指出的内部RAM中两个中两个3字节无符号整字节无符号整数相加,结果送到由数相加,结果送到由R0指出的内部指出的内部RAM中。中。 9 9.1.2.1.2 子程序及参数传递子程序及参数传递 LOGO 入口时,入口时,R

6、0和和R1分别指向加数和被加数的低位字节;分别指向加数和被加数的低位字节; 出口时,出口时,R0指向结果的高位字节。低字节在低地址。指向结果的高位字节。低字节在低地址。 NADD: MOV R7,#3 ;3字节加法字节加法 CLR C NADD1:MOV A,R0 ;取加数低字节;取加数低字节 ADDC A,R1 ;取被加数低字节并加到;取被加数低字节并加到A MOV R0,A DEC R0 DEC R1 DJNZ R7,NADD1 INC R0 RET 9 9.1.2.1.2 子程序及参数传递子程序及参数传递 LOGO9.1.3 中断服务子程序中断服务子程序 主程序调用子程序与主程序被中断而

7、去执行主程序调用子程序与主程序被中断而去执行中断服务子程序的过程是中断服务子程序的过程是不同不同的:的:v 调用子程序是当主程序运行到调用子程序是当主程序运行到 “LCALL DIS” 指令时,指令时,先自动压入断点先自动压入断点2003H,再进入中断服务子程序;,再进入中断服务子程序;v 程序中断是随机的。当主程序运行时,遇到中断申请,则程序中断是随机的。当主程序运行时,遇到中断申请,则CPU执行完当前指令后,首先自动压入断点执行完当前指令后,首先自动压入断点1002H,然,然后转去执行中断服务子程序。后转去执行中断服务子程序。9.1 9.1 主程序和子程序的概念主程序和子程序的概念LOGO

8、上述两个过程的上述两个过程的共同点共同点都是自动压入断点。都是自动压入断点。v 当执行子程序到最后一条指令当执行子程序到最后一条指令RET时,自动弹出断点时,自动弹出断点2003H送送PC,返回主程序;,返回主程序;v 当中断服务程序执行到最后一条指令当中断服务程序执行到最后一条指令RETI 时,同样弹时,同样弹出断点出断点1002H送送PC,返回主程序。,返回主程序。v 除此之外,两种子程序都需要保护现场和恢复现场。除此之外,两种子程序都需要保护现场和恢复现场。9.1.3 9.1.3 中断服务子程序中断服务子程序本节结束本节结束LOGO9.2 9.2 数据采集及简单控制程序数据采集及简单控制

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

10、00,发出中断请求。,发出中断请求。CPU进进入外部中断处理程序入外部中断处理程序,启动定时器工启动定时器工作,利用定时器中断控制灯定时闪闪作,利用定时器中断控制灯定时闪闪发光。用软件查询发光。用软件查询INT0引脚,只要引脚,只要INT00,定时器便继续工作。定时器便继续工作。 白天时白天时,日光使日光使T1导通导通,T2输出低电输出低电平平,INT01,立即关闭定时器,结束立即关闭定时器,结束外部中断处理并返回到主程序。外部中断处理并返回到主程序。9.2 9.2 数据采集及简单控制程序数据采集及简单控制程序LOGO设设: T0定时和定时和R7 软件计数可以延时软件计数可以延时2 s。 R7

11、 软件计数为软件计数为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为低优先级为低优

12、先级 SETB EX0 ;允许外部中断;允许外部中断0中断中断 SETB EA ;CPU允许中断允许中断 HERE: AJMP HERE ;等待外部中断请求;等待外部中断请求9.2.2 9.2.2 航标灯控制程序航标灯控制程序LOGO外部中断外部中断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

13、, #40 ;软件计数值;软件计数值 HERE1:JNB P3.2,HERE1 ;查询;查询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 ;计数已到,重赋初值;计数已到,重赋初值 CP

14、L P1.7 ;输出取反控制灯;输出取反控制灯“亮亮”或或“灭灭” EXIT:RETI ;中断返回;中断返回 END9.2.2 9.2.2 航标灯控制程序航标灯控制程序LOGO9.2.3 水位控制程序水位控制程序 水位控制原理水位控制原理u 单片机控制电机转动单片机控制电机转动,电机带动水泵供水供水电机带动水泵供水供水时时,水位上升水位上升,当当达到上限时达到上限时,由于水导电,由于水导电,B、C棒连通棒连通+5V。b和和c两端均为两端均为”1”.这时,应这时,应停止电机工作,不再供水。停止电机工作,不再供水。l 当水位当水位降到下限时降到下限时,B、C棒都不能与棒棒都不能与棒导通,导通,b和

15、和c两端均为两端均为”0”。启动电机供水启动电机供水.l 当水位处于当水位处于上下限之间上下限之间,棒与棒与A棒导通棒导通.棒不能与棒导通,棒不能与棒导通,b端为端为”1”,c端为端为“0”状态。应继续维持原有的工作状态。状态。应继续维持原有的工作状态。u 图图9-6中虚线表示允许水位变化的上、下限。水塔安装固定的中虚线表示允许水位变化的上、下限。水塔安装固定的3根金属棒。其中,根金属棒。其中,A棒处于下限水位,棒处于下限水位,A棒接棒接+5V电源,电源,C棒处于上限水位,棒处于上限水位,B棒在上、下限水位之间。棒在上、下限水位之间。B棒、棒、C棒各通过一个电阻与地相连。棒各通过一个电阻与地相

16、连。9.2 9.2 数据采集及简单控制程序数据采集及简单控制程序LOGO2. 水位控制电路水位控制电路图图9-7 水塔水位控制水塔水位控制电路电路9.2.3 9.2.3 水位控制程序水位控制程序LOGO3. 信号输入与输出信号输入与输出 水位信号由水位信号由P1.0和和P1.1输入输入 由由P1.2端输出,去控制电机。端输出,去控制电机。 由由P1.3输出报警信号,驱动一输出报警信号,驱动一 只发光二极管进行光报警。只发光二极管进行光报警。C (P1.1)B (P1.0)操操 作作00电机运转电机运转01维持原状维持原状10故障报警故障报警11电机停转电机停转9.2.3 9.2.3 水位控制程

17、序水位控制程序LOGO4. 控制程序控制程序主程序清单:主程序清单: ORG 0030H LOOP: ORL R1,#03H ;为检查水位状态作准备;为检查水位状态作准备 MOV A,P1 JNB ACC.0,ONE ;P1.0=0则转则转 JB ACC.1, TWO ;P1.1=1则转则转 BACK: ACALL D10S ;延时;延时10 s AJMP LOOP ONE: JNB ACC.1,THREE ;P1.1=0则转则转 CLR 93H ;0P1.3,启动报警装置,启动报警装置 SETB 92H ;1P1.2,停止电机工作,停止电机工作 FOUR: SJMP FOUR THREE:C

18、LR 92H ;启动电机;启动电机 AJMP BACK TWO: SETB 92H ;停止电机工作;停止电机工作 AJMP BACK延时子程序延时子程序D10 S(延时延时10 s): ORG 0100H D10S: MOV R3, #19H LOOP3:MOV R1, #85H LOOP1:MOV R2, #0FAH LOOP2:DJNZ R2,LOOP2 DJNZ R1,LOOP1 DJNZ R3,LOOP3 RET 9.2.3 9.2.3 水位控制程序水位控制程序LOGO9.2.4 蜂鸣音报警子程序蜂鸣音报警子程序 压电式蜂鸣器约需压电式蜂鸣器约需10 mA的的驱动电流驱动电流 当当P1

19、.0输出高电平输出高电平1时,压时,压电蜂鸣器两端获得约电蜂鸣器两端获得约+5V电压电压而鸣叫;而鸣叫; 当当P1.0输出低电平输出低电平0时,压时,压电蜂鸣器两引线间的直流电电蜂鸣器两引线间的直流电压降至接近于压降至接近于0 V,蜂鸣器停,蜂鸣器停止发声。止发声。9.2 9.2 数据采集及简单控制程序数据采集及简单控制程序LOGO连续鸣音连续鸣音30 ms的控制子程序清单:的控制子程序清单: SND:SETB P1.0 ;P1.0输出高电平,启动蜂鸣器鸣叫输出高电平,启动蜂鸣器鸣叫 MOV R7,#1EH ;延时;延时30 ms DL:MOV R6, #0F9H DL1:DJNZ R6,DL

20、1 ;小循环延时;小循环延时1 ms DJNZ R7,DL CLR P1.0 ;P1.0输出低电平,停止蜂鸣器鸣叫输出低电平,停止蜂鸣器鸣叫 RET9.2.4 9.2.4 蜂鸣音报警子程序蜂鸣音报警子程序本节结束本节结束LOGO9.3 9.3 数据处理程序数据处理程序采样到的数据要经过采样到的数据要经过必要的处理,才能用必要的处理,才能用于控制和显示。一般于控制和显示。一般单片机小系统的系统单片机小系统的系统软件应按图软件应按图9-11所示所示流程处理。流程处理。 LOGO 9.3.1 排序程序排序程序【例例9-4】将片内将片内RAM 50H59H中的数据按从小到大中的数据按从小到大的顺序排序

21、。的顺序排序。 解解: 这是一个排序问题。这是一个排序问题。l 按从小到大排列称升序排列,反之称降序排列。按从小到大排列称升序排列,反之称降序排列。l 根据题意,排序程序在执行时,取前数与后数比较:根据题意,排序程序在执行时,取前数与后数比较: p 如果前数小于后数,则继续顺序比较下去;如果前数小于后数,则继续顺序比较下去;p 如果前数大于后数,则前数和后数交换后再继续比较下去。如果前数大于后数,则前数和后数交换后再继续比较下去。l 第一次循环将在最后单元中得到最大的数第一次循环将在最后单元中得到最大的数(冒泡法冒泡法)。l 得到所有数据的升序排列需要经过多重循环。得到所有数据的升序排列需要经

22、过多重循环。9.3 9.3 数据处理程序数据处理程序LOGO程序清单如下:程序清单如下: CLR 00H ;清除交换标志位;清除交换标志位 QUE:MOV R3,#9H ;10个数据循环次数个数据循环次数 MOV R0,#50H ;数据存放区首址;数据存放区首址 MOV A,R0 ;取前数;取前数 L2:INC R0 MOV R2,A ;保存前数;保存前数 SUBB A,R0 ;前数减后数;前数减后数 MOV A,R2 ;恢复前数;恢复前数 JC L1 ;顺序则继续比较;顺序则继续比较 SETB 00H ;逆序则建立标志位;逆序则建立标志位 XCH A,R0 ;前数与后数交换;前数与后数交换

23、DEC R0 XCH A,R0 INC R0 ;仍指向后数单元;仍指向后数单元 L1:MOV A, R0 DJNZ R3,L2 ;依次重复比较;依次重复比较 JB 00H,QUE ;交换后重新比较;交换后重新比较 RET 9.3.1 9.3.1 排序程序排序程序LOGO9.3.2 数字滤波程序数字滤波程序u 前向通道中,必须消除被测信号中的噪音和干扰。前向通道中,必须消除被测信号中的噪音和干扰。u 噪音有两大类:噪音有两大类: l 一类为周期性的。典型为一类为周期性的。典型为50 Hz的工频干扰。采用硬件滤的工频干扰。采用硬件滤波电路能有效地消除其影响。波电路能有效地消除其影响。l 另一类为不

24、规则随机性的,可以用数字滤波方法予以削弱另一类为不规则随机性的,可以用数字滤波方法予以削弱或滤除。或滤除。u 数字滤波,就是通过程序计算或判断来减少干扰在有用数字滤波,就是通过程序计算或判断来减少干扰在有用信号中的比重,实际是一种信号中的比重,实际是一种程序滤波程序滤波。u 经常采用的经常采用的中值法、去极值法中值法、去极值法可对采样信号进行数字滤可对采样信号进行数字滤波,以消除常态干扰。波,以消除常态干扰。9.3 9.3 数据处理程序数据处理程序LOGOu 中值滤波是对某一参数连续采样中值滤波是对某一参数连续采样n次次(n一般取奇数一般取奇数),然后,然后把把n次的采样值从小到大或从大到小排

25、列,再取中间值作为本次的采样值从小到大或从大到小排列,再取中间值作为本次采样值。次采样值。u 该算法的采样次数常为该算法的采样次数常为3次或次或5次。对于变化很慢的参数,次。对于变化很慢的参数,有时也可增加次数,例如有时也可增加次数,例如15次。次。 u 中值滤波对于去掉由于偶然因素引起的波动或采样器不稳中值滤波对于去掉由于偶然因素引起的波动或采样器不稳定而造成的脉动干扰比较有效。变量变化比较缓慢定而造成的脉动干扰比较有效。变量变化比较缓慢,效果比较好。效果比较好。对于变化较为剧烈的参数,此法不宜。对于变化较为剧烈的参数,此法不宜。现以现以3次采样为例。次采样为例。 3次采样值分别存放在次采样

26、值分别存放在R2、R3和和R4中,程序运行之后,中,程序运行之后,将将3个数据从小到大顺序排列,仍然存放在个数据从小到大顺序排列,仍然存放在R2、R3和和R4中,中,中值在中值在R3中。中。 9.3.2 9.3.2 数字滤波程数字滤波程序序LOGO程序清单:程序清单: FILT2: MOV A,R2 ;R2R3吗吗? 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时,排序结束时,排序结

27、束 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中中 FILT22:RET9.3.2 9.3.2 数字滤波程数字滤波程序序LOGO9.3.3 标度变换标度变换(工程量变换工程量变换)u 生产现场的各种参数都有不同的数值和量纲,例如,温生产现场的各种参数都有不同的数值和量纲,例如,温度单位用度单位用,压力用,压力用Pa(帕帕),流量用,流量用ms

28、。u 这些参数经转换后,统一变为这些参数经转换后,统一变为0个数码,例个数码,例如,如,8位转换器输出的数码为位转换器输出的数码为0255。u 这些数码虽然代表参数值的大小,但是并不表示带有量这些数码虽然代表参数值的大小,但是并不表示带有量纲的参数值,必须将其转换成有量纲的数值,才能进行显纲的参数值,必须将其转换成有量纲的数值,才能进行显示和打印。这种转换称为示和打印。这种转换称为标度变换标度变换或或工程量转换工程量转换。9.3 9.3 数据处理程序数据处理程序LOGO前提条件是参数值与转换结果前提条件是参数值与转换结果(采样值采样值)之间应呈线性关系。之间应呈线性关系。l 当输入信号为当输入

29、信号为0(即参数值起点值即参数值起点值),输出值不为,输出值不为0时,标度变换公式为:时,标度变换公式为:式中:式中: 参数量程起点值,一次测量仪表的下限;参数量程起点值,一次测量仪表的下限; 参数量程终点值,一次测量仪表的上限;参数量程终点值,一次测量仪表的上限; 参数测量值,实际测量值参数测量值,实际测量值(工程量工程量); N量程起点对应的量程起点对应的A/D转换后的值,仪表下限所对应的数字量;转换后的值,仪表下限所对应的数字量; N量程终点对应的值,仪表上限所对应的数字量;量程终点对应的值,仪表上限所对应的数字量; N测量值对应的测量值对应的A/D值值(采样值采样值),是经数字滤波后确

30、定的采样值。,是经数字滤波后确定的采样值。 其中,、和对一个检测系统来说是常数。其中,、和对一个检测系统来说是常数。9.3.3 9.3.3 标度变换标度变换( (工程量变换工程量变换) )LOGOl 在参数量程起点在参数量程起点(输入信号为输入信号为0),值为,值为0(即即)。标度变换:。标度变换:l 很多测量系统中,参数量程起点值很多测量系统中,参数量程起点值(即仪表下限值即仪表下限值)00,对应的,对应的0。可进一步简化为:可进一步简化为:上述上述3个公式即为在不同情况下,线性刻度仪表测量参数的标度变换公式。个公式即为在不同情况下,线性刻度仪表测量参数的标度变换公式。9.3.3 9.3.3

31、 标度变换标度变换( (工程量变换工程量变换) )LOGO9.3.3 9.3.3 标度变换标度变换( (工程量变换工程量变换) )例如例如:某测量点的温度量程为某测量点的温度量程为200400, 采用采用8位位A/D 转换器。转换器。那么,那么,0200 , 400 , 00, 255,采样值为。其标度变换公式为:采样值为。其标度变换公式为: 200 200 只要把这一算式编成程序,将转只要把这一算式编成程序,将转换后经数字滤波处理后的值换后经数字滤波处理后的值代入,即可代入,即可计算出温度的真实值。计算出温度的真实值。LOGO如果传感器输出特性是非线性的,可采用如果传感器输出特性是非线性的,

32、可采用查表法查表法进行标度变换。进行标度变换。例:用热敏电阻组成的惠斯顿电桥测温电路。例:用热敏电阻组成的惠斯顿电桥测温电路。 R1是热敏电阻是热敏电阻,当温度当温度T0时时,R1取值取值R1(T0) 电桥达到平衡。平衡条件为:电桥达到平衡。平衡条件为: R1(T0)24此时,电桥输出电压此时,电桥输出电压出出 V。 若温度改变若温度改变,则则R1的阻值改变的阻值改变,电桥平衡遭到破坏电桥平衡遭到破坏,产生输出电压产生输出电压出出。通过测量电压。通过测量电压出出值就能推得值就能推得R1的阻值变化的阻值变化,测得环境温度的变化。测得环境温度的变化。9.3.3 9.3.3 标度变换标度变换( (工

33、程量变换工程量变换) )本节结束本节结束LOGO9.4 9.4 代码转换程序代码转换程序【例例9-5】单字节二翻十子程序。单字节二翻十子程序。 将将00HFFH内二进制数转换为内二进制数转换为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)=十位数,十位数

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

35、OV B,#10 MUL AB ;高位乘以;高位乘以10 MOV R3,A ;暂存;暂存 MOV A,R2 ;取;取BCD数数 ANL A,#0FH ;取;取BCD数个位数个位 ADD A,R3 ;得转换结果;得转换结果 RET9.4 9.4 代码转换程序代码转换程序LOGO【例例9-7】一位十六进制数转换成一位十六进制数转换成ASCII码码。 解:解: 本程序中,由本程序中,由R0指出十六进制数存放单元,指出十六进制数存放单元, 经转换后结果仍存于原处。经转换后结果仍存于原处。HEXASC1:MOV A,R0 ;取十六进制数;取十六进制数 ANL A,#0FH ;屏蔽高;屏蔽高4位位 ADD

36、 A, #03H ;修正偏移量;修正偏移量 MOVC A, A+PC ;查表,取;查表,取ASCII代码代码 XCH A,R0 ;存储;存储 INC R0 ;更新地址;更新地址 RET ASCTAB: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H9.4 9.4 代码转换程序代码转换程序LOGO【例例9-8】十六进制数的十六进制数的ASCII代码转换成二进制数代码转换成二进制数。 解:解: 对于小于或等于对于小于或等于9的数的的数的ASCII代码,减去代码,减去30H得得4位二进制数;位二进制数;

37、 对于大于对于大于 9的十六进制数的的十六进制数的ASCII代码,减去代码,减去37H得得4位二进制数。则位二进制数。则正好是正好是0AH0FH的结果。的结果。 程序以程序以R2作为入口和出口。程序清单如下:作为入口和出口。程序清单如下:ASCHEX: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 ;存放结果;存

38、放结果 RET9.4 9.4 代码转换程序代码转换程序本节结束本节结束LOGO9.5 9.5 软件抗干扰软件抗干扰l 干扰可以沿各种线路侵入,也可以以场的形式干扰可以沿各种线路侵入,也可以以场的形式( (高电压、大电流、电火高电压、大电流、电火花等花等) )从空间侵入微机系统;电网中各种浪涌电压入侵,系统的接地装置不从空间侵入微机系统;电网中各种浪涌电压入侵,系统的接地装置不良或不合理等,也是引入干扰的重要途径。良或不合理等,也是引入干扰的重要途径。l 干扰对微机系统的影响有干扰对微机系统的影响有3 3个部位:个部位: 前向通道、前向通道、CPUCPU内核及后向通道。内核及后向通道。对前向通道

39、的干扰会使输入的模拟信号失真,数字信号出错。对这一部位对前向通道的干扰会使输入的模拟信号失真,数字信号出错。对这一部位的抗干扰,硬件方面可采用光电隔离、硬件滤波电路等措施,在软件方面的抗干扰,硬件方面可采用光电隔离、硬件滤波电路等措施,在软件方面可采用前面讲的数字滤波方法。可采用前面讲的数字滤波方法。l 干扰可使微机系统内核三总线上的数字信号错乱,从而引发一系列无法干扰可使微机系统内核三总线上的数字信号错乱,从而引发一系列无法预料的后果,形成一系列错误。预料的后果,形成一系列错误。CPUCPU得到错误的地址信号后,引起程序计数得到错误的地址信号后,引起程序计数器出错,使程序运行离开正常轨道,导

40、致程序失控、飞跑或死循环,进而器出错,使程序运行离开正常轨道,导致程序失控、飞跑或死循环,进而使后向通道的输出信号混乱,不能正常反映微机系统的真实输出,从而导使后向通道的输出信号混乱,不能正常反映微机系统的真实输出,从而导致一系列严重后果。致一系列严重后果。l 本节主要讨论软件抗干扰的问题,关于硬件的抗干扰措施这里不再论述。本节主要讨论软件抗干扰的问题,关于硬件的抗干扰措施这里不再论述。LOGO9.5.1 软件陷阱技术软件陷阱技术l 当当CPU受到干扰后,会将一些操作数当作指令码来执行,造成程序执受到干扰后,会将一些操作数当作指令码来执行,造成程序执行混乱。这时,首先要尽快将程序纳入正轨行混乱

41、。这时,首先要尽快将程序纳入正轨(执行真正的指令序列执行真正的指令序列)。l l 真正的软件陷阱由真正的软件陷阱由3条指令构成:条指令构成: NOP NOP LJMP ERRERR:一段专门对程序出错进行处理的程序,以使程序:一段专门对程序出错进行处理的程序,以使程序 按既定目标执行。按既定目标执行。9.5 9.5 软件抗干扰软件抗干扰LOGO 在未使用的中断在未使用的中断向量区设置陷阱,向量区设置陷阱,就能及时捕捉到错就能及时捕捉到错误中断。误中断。设:使用了设:使用了3个中个中断:断:INT0、T0和和T1, 可以按如左方式可以按如左方式来设置中断向量区。来设置中断向量区。 未使用的中断向

42、量区未使用的中断向量区 ORG 0000H START:LJMP MAIN ;引向主程序入口;引向主程序入口 LJMP PGINT0 ;INT0中断正常入口中断正常入口 NOP ;冗余指令;冗余指令 NOP LJMP ERR ;陷阱;陷阱 LJMP PGT0 ;T0中断正常入口中断正常入口 NOP ;冗余指令;冗余指令 NOP LJMP ERR ;陷阱;陷阱 LJMP ERR ;未使用;未使用INT1,设陷阱,设陷阱 NOP ;冗余指令;冗余指令 NOP LJMP ERR ;陷阱;陷阱 LJMP PGT1 ;T1中断正常入口中断正常入口 NOP ;冗余指令;冗余指令 NOP LJMP ERR

43、;陷阱;陷阱 LJMP ERR ;未用串口中断,设陷阱;未用串口中断,设陷阱 NOP ;冗余指令;冗余指令 NOP LJMP ERR ;陷阱;陷阱9.5.1 9.5.1 软件陷阱技术软件陷阱技术LOGOl 未编程未编程ROM,都维持都维持(0FFH),是一条单字节指令是一条单字节指令“MOV R7,A”,l 只要每隔一段设置一个陷阱,就能捕捉到弹飞的程序。只要每隔一段设置一个陷阱,就能捕捉到弹飞的程序。 软件陷阱要指向出错处理过程软件陷阱要指向出错处理过程ERR才稳妥,才稳妥, ERR可安排在可安排在0030H开始的地方。开始的地方。l 可以用可以用“00 00 20 00 30” 5字节作为

44、陷阱来填充字节作为陷阱来填充ROM中的未使中的未使用用 空间。即指令:空间。即指令: NOP / NOP / LJMP 0030H, 或隔一段设置一个陷阱或隔一段设置一个陷阱“02 00 30”,即指令:,即指令: LJMP 0030H, 其它单元保持其它单元保持0FFH不变。不变。9.5.1 9.5.1 软件陷阱技术软件陷阱技术LOGO 表格有表格有两类两类:一类是数据表格,供:一类是数据表格,供“MOVC A,A+PC”指指令或令或“MOVC A,A+DPTR”指令使用;指令使用; 另一类是散转表格,供另一类是散转表格,供“JMP A+DPTR”指令使用,其内容指令使用,其内容为一系列的为

45、一系列的3字节指令字节指令LJMP或两字节指令或两字节指令AJMP。 只能在表格的最后安排只能在表格的最后安排5字节陷阱字节陷阱 (NOP / NOP / LJMP ERR)。9.5.1 9.5.1 软件陷阱技术软件陷阱技术LOGO 程序区的指令串中间常有一些断裂点,正常执行程序到不会继续往下执程序区的指令串中间常有一些断裂点,正常执行程序到不会继续往下执行了,这类指令有行了,这类指令有LJMP、SJMP、AJMP、RET和和RETI。在这种地方安排。在这种地方安排陷阱后,就能有效地捕获到它,而又不会影响正常执行的程序流程。陷阱后,就能有效地捕获到它,而又不会影响正常执行的程序流程。例如例如:

46、根据:根据A中内容的正、负、零情况进行三分支的程序中,软件陷阱的中内容的正、负、零情况进行三分支的程序中,软件陷阱的安置方式如下:安置方式如下: JNZ XYZ ;零处理;零处理 AJMP ABC ;断裂点;断裂点 NOP NOP LJMP ERR ;陷阱;陷阱 XYZ: JB ACC.7,VUW ;正处理;正处理 AJMP ABC ;断裂点;断裂点 NOP NOP LJMP ERR ;陷阱;陷阱 VUW: ;负处理;负处理 ABC: MOV A,R0 ;取结果;取结果 RET ;断裂点;断裂点 NOP NOP LJMP ERR ;陷阱;陷阱9.5.1 9.5.1 软件陷阱技术软件陷阱技术LO

47、GO9.5.2 软件看门狗软件看门狗程序运行监视系统程序运行监视系统 (WATCHDOG)特性:特性: uu 本身能独立工作,基本上不依赖于本身能独立工作,基本上不依赖于CPU; uu CPU在一个固定的时间间隔内和该系统打一次交道在一个固定的时间间隔内和该系统打一次交道 (喂一次狗喂一次狗),以表明系统目前尚正常;,以表明系统目前尚正常; uu 当当CPU陷入死循环后,能及时发觉并使系统复位。陷入死循环后,能及时发觉并使系统复位。9.5 9.5 软件抗干扰软件抗干扰LOGO 在在8096系列单片机和增强型系列单片机和增强型89C51系列单片机芯片内已经系列单片机芯片内已经内嵌了程序运行监视系

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

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

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

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

52、ON,#00H MOV IE, #00H MOV IP, #00H ;模拟硬件复位,这部分可根据系统对资源使用情况增减;模拟硬件复位,这部分可根据系统对资源使用情况增减 MOV TMOD,#01H LCALL DOG ;调用;调用DOG程序的时间间隔应小于定时器定时时间程序的时间间隔应小于定时器定时时间 DOG: MOV TH0, #0B1H ;喂狗程序;喂狗程序 MOV TL0, #0E0H SETB TR0 RET TOP: POP ACC ;空弹断点地址;空弹断点地址 POP ACC CLR A PUSH ACC ;将返回地址换成;将返回地址换成0000H,以便实现软件复位,以便实现软件

53、复位 PUSH ACC RETI9.5.2 9.5.2 软件看门狗软件看门狗LOGO9.5.3 硬件(专用芯片)看门狗硬件(专用芯片)看门狗u 有的单片机片内嵌入监视定时器有的单片机片内嵌入监视定时器T3(看门狗),当(看门狗),当T3溢出时,溢出时,使使MCU系统复位。设计程序时,必须在监视间隔内执行对监视定时系统复位。设计程序时,必须在监视间隔内执行对监视定时器再装入的指令,即调看门狗器再装入的指令,即调看门狗WATCHDOG子程序。如果程序运行时子程序。如果程序运行时出了问题,没能在监视间隔内执行对监视定时器装入的指令,那么监出了问题,没能在监视间隔内执行对监视定时器装入的指令,那么监视

54、定时器视定时器T3就会溢出使系统复位。就会溢出使系统复位。u 看门狗电路专用芯片本身是一个带清除端和溢出触发器的定时看门狗电路专用芯片本身是一个带清除端和溢出触发器的定时器。如果不清除它,它就以固定频率发出溢出触发脉冲。实际使用中,器。如果不清除它,它就以固定频率发出溢出触发脉冲。实际使用中,把触发输出引入到把触发输出引入到MCU的复位端,使用的复位端,使用MCU的一个的一个I/O口线控制它的口线控制它的清除端。清除端。u 看门狗的监控思路是看门狗的监控思路是: MCU正常运行时,软件被设计成定时清正常运行时,软件被设计成定时清除看门狗定时器;而一旦除看门狗定时器;而一旦MCU死机或程序跑飞,这时死机或程序跑飞,这时MCU不再发出不再发出清除脉冲,看门狗定时器溢出,则自动复位清除脉冲,看门狗定时器溢出,则自动复位MCU。u 看门狗的设计一般采用硬件和软件两种方式,这里我们主要介看门狗的设计一般采用硬件和软件两种方式,这里我们主要介绍硬件看门狗的设计方法。绍硬件看门狗的设计方法。9.5 9.5 软件抗干扰软件抗干扰LOGO型号型号复位门限复位门限/V低电平低电平复位复位高电平高电平复位复位看门狗看门狗周期周期/s手动手动复位复位功能功能E2PROM容量容量接口接口类型类

温馨提示

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

评论

0/150

提交评论