单片机原理及应用.ppt_第1页
单片机原理及应用.ppt_第2页
单片机原理及应用.ppt_第3页
单片机原理及应用.ppt_第4页
单片机原理及应用.ppt_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理及应用,第七章 MCS-51应用系统的研制和调试,键盘与显示接口技术 步进电机的单片机控制 单片机温度控制系统,7.1 键盘和显示接口技术,7.1.1 键盘接口技术 7.1.2 显示接口技术,7.1 键盘和显示接口技术,在单片机应用系统中,键盘用于输入数据、代码和命令;显示器用来显示单片机的键入值、控制过程中间信息及运算结果等。键盘和显示器是实现人机对话,两个必不可少的功能配置。下面介绍键盘、LED显示器及LCD显示器与单片机(MCU)的接口技术。,7.1.1 键盘接口技术,键盘分两类:独立连接多键盘和行列式键盘。,独立式按键结构的键盘是最简单的键盘电路,每个键独立接入一根输入线。这

2、种键盘的优点是结构简单、使用十分方便,目前这种结构的键盘应用还相当普遍,这种键盘的缺点是随着键数数量的增加所占用的I/O口线也增加。 独立式按键结构的键盘在没有键按下时,数据输入线均为高电平,当有键按下时,与之对应的数据线将变成低电平。因此可用位指令判别是否有键按下。,独立式按键编程,ORG 0000H LJMP START START:MOV P1,#0FFH MOV A,P1 ;键字送A MOV DPTR,#ADRSS ;散转表首地址 MOV R1,#00H ;初始键号 LP1: RRC A ;开始查找键字 JNC LP2 ;有键按下则转至LP2 INC R1 LJMP LP1,采用查询法

3、,利用位判别加散转指令,实现键盘的人机对话功能。,LP2: MOV A,R1 ;修正变址值,实现程序散转 ADD A,A JMP A+DPTR ADRSS:AJMP LOOP0 ;地址数据表 AJMP LOOP - AJMP LOOP7 LOOP0: - LOOP0: - ;散转入口地址 - LJMP START - LOOP7: - - LJMP START END LOOP0: -,上例没有考虑去抖动,也没 有考虑有几个键同时按下的情况在实际应用中是要考虑!,注意,行列式键盘,行列式键盘的结构,直接使用I/O的键盘电路 MCU的I/O口输出具有锁存器,输入具有缓冲器,因此应用I/O口直接与

4、行线与列线相连就可以组成行列式键盘。 利用I/O口和译码器的接口电路 利用串行口的键盘接口电路,读输入口P10P13的状态,若输入缓冲器的状态全部为“1”,则表示所在行无键按下;若输入缓冲器不全为“1”,说明所在行有键按下,CPU停止当前行线扫描,转入到列线扫描,列线P10 P13为“0”状态的列表示对应列有键按下。这样,行线与列数交叉键就是扫描到的按键。,行列式键盘工作原理,键扫描方式,程控扫描方式:CPU从执行程序就开始了键盘的扫描,等待来是键盘的命令。 定时扫描方式:在程序初始化时,先对定时/计数器进行设置,使其每10ms中断一次,每次中断,CPU将去扫描一次键盘,若两次中断扫描到有键按

5、下(这里考虑了消抖动),CPU将对键作相应的处理。 中断扫描方式:采用中断扫描方式必需有外部中断接口,当有键按下时,产生中断请请求,CPU响应中断,在中断服务程序扫描键盘,作相应处理。这是多任务应用系统常用的一种方式。,中断方式键盘编程 下面以44键盘为例来说明程序扫描键盘程序的编写:,ORG 0000H LJMP START ORG 2000H START:MOV R0,#0F7H;扫描初值(P13=0) M0V R1,#00H ;取码指针,为取码作准备 LP1: MOV A,R0 ;开始扫描 MOV P1,A MOV A,P1 ;读P1状态 MOV R2,A ;为键盘消抖作准备 SETB

6、C MOV R3,#04H ;每次列扫描数,LP2:RLC A ;按键字左移一位 JNC KEY ;有键按下转KEY LP3:INC R1 ;无键按下,取码指针加1 DJNZ R3,LP2 ;4列未完,则继续扫描列线 MOV A,R0 ;扫描值送累加器 SETB C ;扫描下一行 RRC A MOV R0,A ;取回当前扫描值 JC LP1 ;未扫描完继续扫 LJMP START ;4行扫描完后程序回到起始位置 ;重新开始扫描 KEY:LCALL DS10MS ;10ms后取回的扫描值仍等于原值, ;说明有键按下,否则当键抖动处理。,MOV A,P1 XRL A,R2 JNZ LP3 ;所取扫

7、描值与原值不等,;程序转LP3 LP4 : MOV A,P1 ;判按键是否放下 XRL A,R2 JZ LP4 MOV A,R1 ;取码指针送累加器 MOV DPTR,#TAB ;键值数据表起始地址 MOVC A,A+DPTR LJMP START DS10MS:MOV R6,#60,LOOP1: MOV R7,#248 DJNZ R7,$ DJNZ R6,LOOP1 RET ORG TAB TAB: DB 01H,02H,03H,0AH DB 04H,05H,06H,0BH DB 07H,08H,09H,0CH DB 0EH,00H,0FH,0DH END,7.1.2 显示接口技术,一)显示

8、器结构与原理,数码管既可直接接单片机的口线(如果是P0口的话,只能接共阳极的,接共阴的要接上拉电阻),又可通过锁存器接单片机口线。,二)LED显示接口技术,(1)静态显示接口技术,所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。 通过MCU的口线的显示接口电路,通过MCU口线和译码驱动的显示接口,利用串行总线控制的显示接口,(2)动态显示接口技术,动态扫描显示接口电路。接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。,所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个

9、显示器轮流点亮。,ORG 0000H LJMP START ORG 0030H START:MOV A,20H MOV DPTR #TAB MOVC A,A+DPTR MOV P0,A CLR P1.1 LCALL DS1MS SETB P1.1 MOV A,21H MOV DPTR,#TAB,MOVC A,A+DPTR MOV P0,A CLR P1.0 LCALL DS1MS SETB P1.0 LJMP START DS1MS:MOV R7,#03 LP: MOV R6,#248 DJNZ R6,$ DJNZ R7,LP ORG TAB TAB: DB 0COH,OF9H,0A4H,0B

10、0H,99H,92H, 82H,0F8H,80H,90H END,三)LCD显示接口技术,(1)字符型LCD显示器接口技术 字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等。以2行16个字的SMC1602A液晶模块来介绍它与单片机的接口技术和编程方法。,SMC1602A液晶模引脚功能表,1 SMC1602A液晶模块,RAM地址映射图 SMC1602A液晶模块内部存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“B”的

11、代码是0100010B(42H),显示时模块把地址42H中的点阵字符图形显示出来,我们就能看到字母“B”。作为用户,只能选用其中的代码,不能更改。,2 SMC1602A液晶显示模块与单片机接口方式,3 基本操作时序,读状态:输入:RS=L,RW=H,E=H 输出:D0-D7=状态字 写指令:输入:RS=L,RW=L D0-D7=指令 E=高脉冲 输出:无 读数据:输入:RS=H,RW=H,E=H 输出:D0-D7 写数据:输入:RS=H,RW=L,D0-D7=数据 E=高脉冲 输出:无,4 程序设计,SMC1602A液晶模块指令表,RS EQU P3.0 RW EQU P3.1 E EQU P

12、3.5 ORG 0000H LJMP START ORG 2000H START: MOV P1,#01H ;清屏 ACALL ENABLE ;ENABLE为写入控制命令子程序 MOV P1,#38H ;显示模式设置成8位2行5x7点阵 ACALL ENABLE MOV P1,#0FH ;显示开/关及光标设置 ACALL ENABLE MOV P1,#06H ;文字不动,光标自动右移 ACALL ENABLE MOV P1,#83H ;写入显示起始地址(第1行第4个位置) ACALL ENABLE,程序,MOV DPTR,#TAB ;“I LOVE MCU”数据表 MOV R0,#10 ;带空

13、格共10个 LP:MOV A,#00H ;取数欲写入的数据 MOVC A,A+DPTR ACALL WRITE INC DPTR DJNZ R0,LP ;未写完再继续写 SJMP $ WRITE:MOV P1,A ;写数据子程序 SETB RS CLR RW CLR E ACALL BUSY SETB E ;E=1 RET ENABLE: CLR RS ;写入控制命令的子程序 CLR RW,CLR E ACALL BUSY SETB E RET BUSY: MOV P1,#0FFH ;判断液晶显示器是否忙的子程序 CLR RS SETB RW CLR E NOP SETB E JB P1.7,

14、BUSY ;如果P1.7为高电平表示忙就循环等 待 RET ORG TAB TAB:DB 49H,20H,4CH,4FH,56H,45H,20H, 4DH,43H, 55H END,模块的外部接口信号,(2)绘图型LCD显示器接口技术,寄存器选择,指令表,DDRAM地址表,CS1 EQU P2.4 ;片选CS1接P2.4 CS2 EQU P2.3 ;片选CS2接P2.3 D/I EQU P2.2 ;寄存器选取择信号D/I接P2.2 R/W EQU P2.1 ;读/写选择信号接P2.1 E EQU P2.0 ;使能信号接P2.0 左区驱动子程序(GM12864的左区)- 写指令代码子程序 : P

15、RMO: CLRCS2 SETB CS1 CLR D/I SETB R/W PRM01: MOVP1,#OFFH SETBE MOVA,P1;读状态字 CLRE;E=0,程序,JBACC.7,PRM01;判“忙”标志为“0”否,否再读 CLRR/W;R/W=0 MOVP1,COM ;写指令代码(COM为指令代码) SETBE;E=1 CLRE;E=0 RET 写显示数据子程序 : PRM1:CLRCS2;片选设置为“01” SETBCS1 CLRD/I;D/I=0 SETBR/W;R/W=1 PRM11: MOVP0,#OFFH;P1口置“1” SETBE;E=0 MOVA,P0;读状态字 C

16、LR E ;E=0,JB ACC.7,PRM11 ;判“忙”标志为“0”否,否再读 SETB D/I ;D/I=1 CLR R/W ;R/W=0 MOV P0,DAT ;写数据 SETB E ;E=1 CLR E ;E=0 RET 读显示数据子程序 : PRM2: CLR CS2 SETB CS1 CLR D/I SETB R/W PRM21: MOV P0, #0FFH SETB E,MOV A, P0 CLR E JB ACC.7, PRM21 SETB D/I MOV P0, #0FFH SETB E MOV DAT ,P0 CLR E RET,7.2 步进电机的单片机控制,7.2.1

17、步进电机工作原理 7.2.2 步进电机驱动电路原理 7.2.3 步进电机控制原理及实例,前言,现在比较常用的步进电机包括反应式步进电机、永磁式步进电机、混合式步进电机和单相式步进电机等。,现阶段,反应式步进电机获得最多的应用。,7.2.1 步进电机工作原理,电脉冲信号按照顺序轮流接通直流电源, 由于步进电机中的励磁绕组在空间中按一定的规律排列,轮流接通直流电源后就会在空间形成一种阶跃变化的旋转磁场,使转子转过一定角度(称为步距角)。,在正常运行情况下,电机转过的总角度与输入的脉冲数成正比。电机的转速与输入脉冲频率保持严格的对应关系,电机的运动方向由脉冲相序控制。,电机定子上有m相励磁绕阻,其轴

18、线分 别与转子齿轴线偏移1/m,2/m(m-1)/m,1。 并且导电按一定的相序电机就能正反转被控 制这是步进电机旋转的物理条件。 只要符合这一条件,理论上可以制造任何 相的步进电机。,控制步进电机必须由脉冲信号、信号分配、功率放大等组成的控制系统 其方框图如下:,7.2.2 步进电机的驱动电路原理,步进电机和普通电机的区别主要就在于其 驱动的形式,须使用专用的步进电机驱动控制器才能使步进电机运转。 驱动器如下图所示,它一般由脉冲发生单元,脉冲分配单元,功率驱动单元,保护和反馈单元组成。除功率驱动单元以外,其他部分越来越趋向于用软件实现。,步进电机的驱动电路主要有单极性驱动电路和双极性驱动电路

19、两种。 单极性驱动电路中又分为单电压驱动电路、高低压驱动电路、斩波恒流驱动电路等等。不同的驱动电路,要求单片机给出的控制信号也不一样。下面主要介绍单极性驱动电路的原理。,对于反应式步进电极,绕组电流只要求往一个方向流动,故驱动电路可以采用单极性驱动。,图示是单电压功率驱动电路的一相,绕组中串联的电阻Rs 使回路的时间常数减小,以便使电机高频运行时能产生较大的电磁转矩,并能缓解电机的低频共振现象。,从图中的单步响应曲线看出区别:曲线1 是不串电阻Rs ,曲线2 是串电阻Rs 并调高电源电压以保持与曲线1 相同绕组的静态电流,但Rs 会引起附加损耗,故一般只适用于小功率步进电机中.D1能把电机运转

20、时绕组产生的高压钳位于电源电压附近,以保护驱动管。,对步进电机进行定位或速度控制,有开 环控制和闭环控制两类。开环控制不需要位 置或速度反馈,因此系统简单;闭环控制利用 位置或速度反馈实现精确控制。无论是开环 控制还是闭环控制, 控制方式可分为串行控 制和并行控制两种:,7.2.3 步进电机控制原理实例,串行控制,单片机输出步进脉冲信号(CP )和旋转方向信号,经脉冲分配器(也叫环形分配器)按电机的相数和工作方式产生多相循环变化的脉冲。例如三相电机采用单三拍工作方式,脉冲分配器三路输出顺序是:A,B,C,A ;反向旋转时顺序为A,C,B,A 。,并行控制,并行控制是指单片机用硬件或软件方法实现

21、脉冲分配器功能,得出多相脉冲信号,经功率放大后驱动各相绕组。,单片机的P1.0P1.3 作为并行输出,驱动四相反应式步进电机。如电机以四相八拍方式工作,正转时相状态是: AABBBCCCDDDAA, 那么对应的口线状态: 1110 11001101 1001 10110011011101101110 。 为了实现脉冲分配器功能,我们在单片机的存储空间存放一张表与上述八拍的口线状态相对应的表,叫状态表。如下图:,控制系统根据应用要求,电机每走一步,拍序加一(正转)或拍序减一(反转),然后由拍序查状态表得出相状态(即口线状态),并将其送到相应输出口即可实现控制要求。,程序为:,OutPhaseSt

22、atus: MOV A, PhaseStatus ANL A, #00000111B MOV DPTR,#PhaseTab ;把表地址给bptr MOVC A,A+DPTR ORL A, #StepPortMask ;输出相序而不影响其它口线 ANL StepPort, A RET PhaseTab: DB 0FEH, 0FCH, 0FDH, 0F9H, 0FBH, 0F3H, 0F7H, 0F6H,步进电动机转速控制,步进电动机的转速控制,实际上就是控制各相线通电状态持续时间的长短。这可以采取两种方法:一种是软件延时,另一种是定时器延时。,(1) 软件延时法 这种方法是在每次转换通电状态(简

23、称换相)后调用一个延时子程序,待延时结束后执行换相子程序。如此反复,就可使步进电机按某一确定的转速运转。以下程序将控制步进电机正向连续旋转。,ContinueStep LCALL HardSoftPostiveStep ;正转子程序 MOV A,#DealyValue ;DealyValue决定延时时间 LCALL StepDealy ;调用延时子程序 LJMP ContinueStep ;继续循环执行 StepDealy:;延时DealyV1 x 2 + 3 x ACC + 2 个机器周期 MOV R0, #DealyV1;延时DealyV1 x 2 + 1 个机器周期 DJNZ R0, $

24、 DJNZ ACC, StepDealy RET,程序为:,(2) 定时器延时法 利用定时器,加载适当的定时值以控制延时的长短,在定时器溢出产生中断时,执行步进电机换相子程序。每中断一次,电动机就换相一次,从而实现对电动机的速度控制。,程序为:,CalDelay: ;/计算速度,走步延时 mov a,DelayIncDec cjne a,#0 x7f,ChkDir ChkDir: mov RotationDir,c ;/DelayIncDec=0 x7f 时 ;正转(RotationDir=0) mov r7,#0 x7f jnc CalDelay1 xch a,r7,CalDelay1: c

25、lr c subb a,r7 mov SpeedSV,a mov r7,#0 x80 xch a,r7 subb a,r7 mov DelayStepSV,a ret,HardSoft1Step: ;/走一步子程序 jb RotationDir,PostiveStep mov a,PhaseStatus ;正转时口线相状态右移 rr a jmp OutStep PostiveStep: mov a,PhaseStatus ;反转时口线相状态左移 rl a,OutStep: mov PhaseStatus,a orl a,#StepPortMask ;输出相序而不影响其它口线 mov r7,a

26、mov a,StepPort orl a,#NOT(StepPortMask) anl a,r7 mov StepPort,a ret end,T0_INT: clr tr0 ;/定时器设置 mov th0,#high(0 xffff-5000) mov tl0,#low(0 xffff-5000) setb tr0 push acc push psw mov psw,#00001000b ;/using 1 dec DelayStepCNT ;/走步延时计数器减一 mov a,DelayStepCNT jnz MoreDelay lcall HardSoft1Step ;/走步延时计数器=

27、0 走一步 mov DelayStepCNT,DelayStepSV,7.3 单片机温度控制系统,7.3.1 硬件电路 7.3.2 温度控制的算法和程序,7.3 应用实例 单片机温度控制系统,在工业生产中,电流,电压,温度,压力,流量,流速和开关量都是常用的主要被控参数。例如:在冶金工业,化工生产,电力工程,机械制造和食品加工等许多领域中,人们都需要对各类加热炉,热处理炉,反应炉和锅炉中温度进行检测和控制。采用单片机来对他们进行控制不仅具有控制方便,简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇

28、到的控制问题。现以它为例进行介绍。这不仅使读者把所学理论知识加以升华,而且希望收到举一反三和触类旁通的效果。,7.3.1 硬件电路,下图为一采用热电偶为温度检测元件的单片机温度控制系统电路原理图。,各部分电路叙述 :,温度检测和变送器,接口电路,温度控制电路,1) 温度检测和变送器,温度检测元件和变送器的类型选择和被控温度及精度等级有关。 镍铬/镍铝热电偶适用于01000的温度测量范围,相应输出电压为041.32mV。 变送器由毫伏变送器和电流/电压变送器组成:毫伏变送器用于把热电偶输出的041.32 mV变成010mA范围内的电流,电流/电压变送器用于把毫伏变送器输出的010mA电流变成05

29、V范围内的电压。,为了提高测量精度,变送器可以进行零点迁移。例如:若温度测量范围为4001000,则热电偶输出为16.4mV41.32mV,毫伏变送器零点迁移后输出010mA范围电流。这样,采用8位A/D转器就可使量化温度误差达到+/-2.34以内。,接口电路有8155和ADC0809等芯片。8155用于键盘/LED显示接口, ADC0809为温度测量电路的输入接口。,2) 接口电路,ADC0809的IN0和变送器输出端相连,故IN0上输入的0V +5V的范围的模拟电压经A/D转换后可由89C52经过程序从P0口输入到它的内部RAM单元。在P2.2=0和WR=0时,89C52可使ALE和STA

30、RT变为高电平而启动ADC0809工作;在P2.2=0和RD=0时,89C52可从ADC0809接收A/D转换后的数字量。这就是说:ADC0809可以视为89C52的一个外部RAM单元,地址为03F8H(有很大的地址重叠范围)。因此,89C52执行如下程序可以启动ADC0809工作,8155用于键盘/LED显示接口:,MOV DPTR, #03F8H MOVX DPTR, A 若89C52改为执行: MOV DPTR, #03F8H MOVX A, DPTR 则可以从ADC0809输入A/D转换后的数字量。,89C52对温度的控制是通过可控硅调功器电路实现的。,3) 温度控制电路,双向可控硅管

31、和加热电阻丝串接在交流 220V,50HZ市电回路。在给定周期T内,89C52只要改变可控硅管的接通时间便可改变加热丝功率,达到调节温度的目的。,可控硅在给定周期T的100时间内接通时的功率最大。,显然,是一种50HZ交流电压过零时刻的脉冲,可使可控硅在交流电压正弦波过零时触发通导。过零同步脉冲由过零触发电路产生,如图7.29所示,图中电压比较器LM311用于把50HZ正弦交流电压变成方波。方波的正边缘和负边缘分别作为两个单稳态触发器的输入触发信号,单稳压触发器输出的两个窄脉冲经二极管或门混合后就得到对应于交流220V市电的过零同步脉冲。此脉冲一方面作为可控硅的触发同步脉冲加到温度控制电路,另

32、一方面还作为计数脉冲加到89C52的T0和T1端。,过零同步脉冲,过零触发电路,7.3.2 温度控制的算法和程序,1) 温度控制的算法,通常,电阻炉炉温控制采用偏差控制法。偏差控制的原理是先求出实测炉温对所炉温的偏差值,然后对偏差值处理而获得控制信号去调节电阻炉的加热功率,以实现对炉温的控制。,在工业上,偏差控制多用PID控制。这是工业过程控制中应用最广泛的一种形式,一般都能收到令人满意的效果。控制论告诉我们,PID控制的理想微分方程为:,式中,e(t)=r(t)-y(t)称为偏差值,可作为温度调节器的输入信号。其中r(t)为给定值,y(t)为被测变量值,KP为比例系数,Ti为积分时间常数,为

33、Td为微分时间常数,U(t)为调节器的输出控制电压信号。,由于计算机只能处理数字信号,故上述数学方程必须加以变换。若设温度的采样周期为T,第n次采样得到的输入偏差为en,调节器输出为un,则有:,理想微分方程便可改写为 :,写成递推方式:,2)温度控制程序,温度控制程序的设计应考虑如下问题:1. 键盘扫描,键盘识别,温度显示;2. 炉温采样,数字滤波;3. 数据处理时把所有数转换成定点纯小数补码 形式,然后把8位温度采样直,Umin和 Umax都变成16位参加运算,运算结果取8位 有效直;4. 越限报警和处理;5. PID计算,温度标度转换。 通常,符合上述功能的温度控制程序由主程序和T0中断

34、服务程序组成。,主程序,主程序应包括89C52本身的初始化,8155初始化等等。为简化起见,本程序只给出有关标志,暂存单元和显示缓冲区清零,T0初始化、开CPU中断。温度显示和键盘扫描等程序。,程序清单为: ORG 0100H DISM0 DATA 78H DISM1 DATA 79H DISM2 DATA 7AH DISM3 DATA 7BH DISM4 DATA 7CH DISM5 DATA 7DH,MOV SP, #50H ; 50H送SP CLR 5EH ; 清本次越限标志 CLR 5FH ; 清上次越限标志 CLR A ;清累加器A MOV 2FH, A MOV 30H, A MOV

35、 3BH, A,MOV 3CH, A;清暂存单元 MOV 3DH, A ; MOV 3EH, A ; MOV 44H, A ; MOV DISM0, A ; MOV DISM1, A ; MOV DISM2, A ; MOV DISM3, A ;清显示缓冲区,MOV DISM4, A ; MOV DISM5, A ; MOV TMOD, #56H ;设T0为记数方式2,T1为记数方式1 MOV TL0, #06H ; MOV TH0, #06H ;T0赋初值 CLR PT0 ;令T0为底中断优先级 SETB TR0 ; 启动T0工作,SETB ET0 ;允许T0中断 SETB EA ;开CPU

36、中断 LOOP : ACALL DISPLY;调用显示程序 ACALL SCAN ;调用扫描程序 AJMP LOOP ;等待中断,T0中断服务程序是温度控制系统的主体程序,用于启动A/D转换,读入采样数据,数字滤波,越限温度报警和越限处理,PID计算和输出可控硅的同步触发脉冲等。P1.3引脚输出的该同步触发脉冲宽度由T1计数器的溢出中断控制,89C52利用等待T1溢出中断空隙时间完成把本次采样值转换成显示值而放入显示缓冲区和调用温度显示程序。89C52从T1中断服务程序返回后便可以恢复现场和返回主程序,以等待下次T0中断。,T0 中断服务程序CT0,T0中断服务框图如下图:,在T0中断服务程序

37、中,还需要用到一系列子程序。例如:温度采样值的子程序,数字滤波子程序,越限处理子程序,PID计算程序,标度转换程序和温度显示程序。在PID计算程序中,也需要双字节加法子程序,双字节求补子程序和双字节带符号数乘法子程序等。,图7.32 T0中断服务程序流程图,ORG 000BH AJMP CT0 CT0 :PUSH ACC ; PUSH DPL ;保护现场 PUSH DPH ; SETB D5H ;置标志 ACALL SAMP ;调用采样子程序 ACALL FILTER ;调用数字滤波程序,程序清单为:,CJNE A, 42H, TPL ; WL: MOV C, 5EH ; MOV 5FH, C

38、 ; CLR 5EH ;清5Eh单元 ACALL UPL ;转上限处理程序(略) POP DPH POP DPL POP ACC RETI ;中断返回,TPL : JNC TPL1; 若Ui(K)Umax,则TPL1 CLR 5FH ; 清上次越限标志 CJNE A , 43H, MTPL ;若Ui(K)Umin,则MTPL HAT : SETB P1.1 ;若温度不越限,则令绿灯亮,ACALL PID ;调用计算PID子程序 MOV A, 2FH;PID值送A对PID值 ;求补,作为TL1值 CPL A ; INC A ; NM: SETB P1.3 ;令P1.3输出高电平脉冲 MOV TL

39、1, A ;,MOV TH1, #0FFH ; T1赋初值 SETB PT1 ;T1高优先级中断 SETB TR1 ;启动T1 SETB ET1 ;允许T1中断 ACALL TRAST ;调用标度转化程序 LOOP : ACALL DISPLY ;显示温度 JB D5H, LOOP ;等待T1中断 POP DPH ; POP DPL ;恢复现场 POP ACC ; RETI ;中断返回,MTPL: JNC HAT ;若Ui(K)Umin ,则HAT SETB P1.0;否则越下限声光报警 MOV A, 45H;取PID最大值输出对 ;PID值求补,作为TL1值 CPL A ; INC A ;

40、AJMP NM ;转NM 执行 TPL1: SETB 5EH;若Ui(K)Umax,则5EH单;元置位,JNB 5FH, WL;若上次未越限。则转WL INC 44H ;越限计数器加“1” MOV A, 44H CLR C SUBB A, #N ;越限N次吗 ? JNZ WL ;越限小于N 次,则WL SETB P1.2 ;否则越上限声光报警 CLR 5EH ; CLR 5FH ;清越限标志 POP DPH ; POP DPL ;恢复现场 POP ACC ; RETI ;中断返回,T1 中断服务子程序 ORG 001BH AJMP CT1 CT1: CLR D5H ; 清标志 CLR P1.3

41、 ; 令P1.3变为低电平 RETI ; 中断返回,图7.33 采样子程序流程图,子程序,SAMP: MOV R0, #2CH ;采样值始送P0 MOV R2, #03H ;采样次数初值送R2 MOV DPTR, 03F8H SAM1: MOVX DPTR, A ;启动ADC0809工作 MOV R3, #20H DLY: DJNZ R3, DLY ;延时 HERE: JB P3.3, HERE ;等待A/D完成 MOVX A, DPTR ;采样值送A MOV R0, A ;存放采样值 INC R0 DJNZ R2, SAM1 ;若采样未完,则SAM1 RET ;若已采样完,则返回,采样子程序

42、,FITER: MOV A, 2CH ;(2CH)送A CJNE A, 2DH, CMP1;若(2CH)(2DH),则CMP1 AJMP CMP2 ;否则,转CMP2 CMP1: JNC CMP2;若(2CH)(2DH),则 XCH A, 2DH ; XCH A, 2DH ; CMP2: MOV A, 2DH ;(2DH)送A CJNE A, 2EH, CMP3;若(2DH)(2EH),则CMP MOV 2AH,A ;否则,(2DH)送2AH RET ;返回,数字滤波子程序,CMP3: JC CMP4 ;若(2DH)(2EH),则CMP4 MOV 2AH, A ;否则, (2DH)送2AH R

43、ET ;返回 CMP4: MOV A, 2EH ;(2EH)送A CJNE A, 2CH, CMP5 ;若(2EH)(2CH),则 CMP5 MOV 2AH, A ;否则,(2EH)送2AH RET ;返回 CMP5: JC CMP6 ;若(2EH)(2CH),则CMP6 XCH A, 2CH ;否则, (2EH) (2CH) CMP6: MOV 2AH, A ;A送2AH RET,数字滤波子程序,PID 计算程序:,Ur 送R5R4PID: MOV R5, 31H ; MOV R4, 32H ; Ui(K) 送R3R2: MOV R3, 2AH ; MOV R2, #00H ; ACALL

44、CPL1 ;取ui(K)的补码 ACALL DSUM ;计算E(K) E(K)送39H和3AH单元: MOV 39H, R7 ; MOV 3AH, R6 ; K1送R5R4: MOV R5 , 35H ; MOV R4, 36H ; MOV R0 #4AH ;积地址4A送HR0 ACALL MULT1 ;计算Pi=KiE(k),PID计算程序,E(K)送R5R4 MOV R5, 39H MOV R4, 3AH E(K-1)送R3R2 MOV R3, 3BH MOV R2, 3CH ACALL CPL1 ;对E(K-1)求补 ACALL DSUM ;求E(K)-E(K-1) Kp送R5R4 MO

45、V R5, 33H MOV R4, 34H MOV R0, #46H ;积地址46H送R0 ACALL MULT1 ;求得Pp,PID计算程序,Pp的高16位送R5R4 MOV R5, 49H MOV R4, 48H KP1送R3R2 MOV R3, 4DH MOV R2, 4CH ACALL DSUM ;求得Pp+p1 存入4AH和4BH单元 MOV 4AH, R7 MOV 4BH,R8 E(K)送R5R4 MOV R5, 39H MOV R4, 3AH E(K-2)送R3R2 MOV R3, 3DH MOV R2, 3EH ACALL DSUM ;计算E(K)+E(K-2),PID计算程序,存入R5R4 MOV R5, R7 MOV R4, R6 E(K-1)送

温馨提示

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

评论

0/150

提交评论