MCS51中断优先级

MCS51中断优先级
MCS51中断优先级

鉴于MCS-51系统只提供“二级中断嵌套”,提出扩展51系统中断优先级的纯软件方法。其利用51系统内建的中断允许寄存器IE和中断优先级寄存器IP,通过屏蔽字机制来实现;以C51的形式,给出这种扩展方法的函数库实现,为该方法的使用赋予友好、简洁的用户接口。

引言

众所周知,MCS-51系统只提供“二级中断嵌套”,而大多数嵌入式系统希望有多于两级的优先级别。因为一般来说,系统都有掉电中断,且应置为最高优先级,这样所有其它中断只能共用一个最低优先级,如此,往往不能满足实际的逻辑需求。为了使系统具有多于两级的中断优先级别,可以利用8259A之类的中断控制芯片实现中断优先级的硬扩展,但却增加了系统的造价和复杂性。因复杂性的提高,系统的可靠性将受到影响。本文提出一种扩展MCS-51系统中断优先级的纯软件方法,不需增加任何硬件,且所需的额外资源消耗也很小。实际应用表明这种方法是可行的和有效的。

1 MCS-51的中断系统简介

MCS-51系列单片机允许有五个中断源,提供两个中断优先级,可实现二级中断嵌套。这两级优先级遵循下述规则:仅高优先级中断源可中断嵌套低优先级中断源。为实现这一规则,中断系统内部包含两个不可寻址的优先级状态触发器。当特定优先级的某中断源被响应时,相应的触发器即被置位,直到执行了RETI指令后,这个触发器才复位。在此期间,同级和低级中断将被防止。中断源的中断请求能否得到响应,受中断允许寄存器IE的控制。每个中断源的优先级可通过对中断优先级寄存器IP编程来设定:或最低,或最高。同一优先级中的各中断源同时请求中断时,由内部查询逻辑确定响应次序。查询次序依次为:外部中断0(X0)、定时器中断0(T0)、外部中断1(X1)、定时器中断1(T1)、串口中断(S)。如果当前指令是RETI或是对IE、IP操作的指令,将封装CPU对中断的响应,且必须再执行完一条指令之后才会响应中断。

2 中断优先级软扩展的方法

首先,给出软扩展的第一种方法,并分析其特点,指出其存在的缺陷。然后,基于对方法一的不足之处,给出不断完善的方法二、方法三。其中方法二是对方法一的完善,方法三是对方法二的完善,并最终解决了方法一、二中的缺陷,实现了真正的中断优先级的软扩展。

2.1 方法一

此法仅使用和系统的中断允许寄存器IE,通过中断屏蔽字机制,以使不同的中断源具有不同的逻辑中断优先级(下文中的“优先级”如不加说明即指“逻辑中断优先级”)。

不失一般性,不妨令8051系统的五个中断源——外中断0(X0)、定时器中断0(T0)、外中断1(X1)、定时器中断1(T1)及串口中断(S),有如表1所列的优先级。(实际应用中,视具体情况,赋予不同中断源以适当的优先级。)

其中,“0”代表最高优先级,“4”代表最低优先级。

首先,给设定了优先级的诸中断源赋以二级“物理中断优先级”:将优先级最高的中断源(X1)在中断优先级寄存器IP中的相应位(PX1)置1,而令IP中的其它相关位(PT1、PT0、PS、PX0)为0。

其次,给设定了优先级的各中断源分配适当的“中断屏蔽字”。其基本思想是屏蔽同级和低级中断。具体分配过程如下:优先级为k(0≤k≤N-1,N为中断源数量)的中断源的“中断屏蔽字”为:优先级为x(x[k,N-1],即同级和低级)的中断源在IE中的对应位置0,优先级为y(y[0,k-1],即高级)的中断源在IE中的相应位置1而得的位组字节。当然,IE的EA位(CPU中断允许标志位)始终为1.

对于表1所列的中断优先级分配情况,各中断源的“中断屏蔽字”配置如表2所列。

表1 中断源的优先级分配表

中断源X1 T1 T0 S X0

优先级0 1 2 3 4

最后,给各中断源的ISR(Interrupt Routine,中断服务例程)加以如下所示的外壳(Assembly形式的)。不妨以定时器0(T0)为例:

CSEG AT 8×1+3

;定义绝对段,设置断向量

JMP T0_ISR_SHELL

?PR?TO_ISR_SHELL?XX SEGMENT CODE ;声明再定位段

T0_ISR_SHELL:

PUSH IE ;保存IE

MOV IE,#TO_INT_MASK

;设置当前中断屏蔽字

CALL ResetIntSys:复位中断系统

CALL T0_ISR:调用中断服务例程的主体

POP IE ;恢复IE

RET

这里,T0_ISR为定时器0(T0)的ISR的主体部分。其应以一般函数的形式,用汇编或C编写。ResetIntSys为仅含一条中断返回指令(IRET)的函数,即ResetIntSys:RETI。其用于复位中断系统,以使在相应ISR执行过程中,系统仍可响应其它中端源提出的中断请求,以便实现中断嵌套。这样就达到了防止同级和低级优先级中断的目的。

高优先级的中断源可以提出中断请求,但未必会被立即响应。因为在当前策略下,尚不能实现真正的“中断嵌套”(即高优先级的中断服务例程可中断低优先级的中断服务例程而嵌套执行),而仅有最高优先级的中断(X1)才可以实现这种真正的“中断嵌套”。因为在8051系统里,中断能否嵌套仅取决于其相应的“物理中断优先级”(各中断源的物理中断优先级由中断优先级寄存器IP中的相应位决定,且仅有二级)。下面分三种情况说明方法一的特点和不足:

①当外部中断1(X1,其具有最高的逻辑中断优先级和最高的物理中断优先级)提出中断请求时,系统将立即响应,而不管系统此时忙否。如果此时系统正在执行其它中断的ISR,X1的ISR将以嵌套形式执行,因为其它中断湖泊的物理中断优先级都为最低(51系统仅有两级物理优先级:最高或最低)。

②当定时器0(T0,其优先级为2)的中断请求正被响应时,来自串口(S,其优先级为3)和外部中断0(X0,其优先级为4)的中断请求将被禁止;而只允许外部中断1(X1,其优先级为0)和定时器1(T1,其优先级为1)提出中断请求。如果是X1提出中断请求,则X1的ISR将立即嵌套执行;如果是T1提出,尽管其优先级高于当前中断T0,但因其物理中断优先级与T0一样(同为最低),故而将不会像X1那样被系统立即响应,并嵌套执行,而只能等待,直到T0的中断服务例程执行完毕。

③如果在串口(S,其优先级为3)中断正被响应过程中,定时器1(T1,其优先级为1)与定时器0(T0,其优先级为2)分别提出中断请求。由于它们有高于S的优先级,所以系统允许它们提出中断请求;但因其物理优先级与S一样,故而直到S的中断服务例程执行完毕,系统才会受理T1与T0的中断请求。逻辑上,由于T1具有高于T0的优先级,所以T1应先为系统响应。但因物理优先级相同时,中断请求的响应次序取决于内部查询顺序,而T0先于T1,所以实际上T0先系统响应,即出现了“优先级反转”的问题。

可见,方法一虽然可以部分地达到“扩充中断优先级”的目的,但其存在两个问题:

*某些高优先级中断不能中断嵌套低优先级中断;

*会出现“优先级中反转”。

方法二和方法三是针对方法一的这两个不足而提出的,并最终实现对51系统的中断优先级的真正扩展。

2.2 方法二

该方法是在方法一基础上,为解决“优先级反转”的问题,而实施的简单策略而得。

根据方法一中对“优先级反转”问题的分析可知,出现该问题的原因是:各中断源的逻辑优先级与其内部查询顺序不一致。只要在系统设计时,兼顾中断源相关事件的紧迫程度与中断源的内部查询逻辑:将最紧迫的事件(如掉电)赋以最高的优先级0,并使其与系统中的最先被查询的中断源(外部中断0)相关联;使次紧迫的事件的优先为1,并使之与系统内第二个被查询的中断源(定时器0)相关联,即51系统内的各中断源应有表3所列的优先级。

表3 中断源的优先级分配

中断源X0 T0 X1 T1 S

优先级0 1 2 3 4

如此,即可解决“优先级反转”的问题。

2.3 方法三

本法是在方法一、二的基础上,针对“某些高优先级中断不能中断嵌套低优级中断”的问题,引入相应的策略,以实现对51系统中断优先级的“真正”扩展。

3 优先级软扩展的函数库实现

为了真正扩展51系统的优先级,各中断源的优先级、优先级屏蔽字、中断屏蔽字应是确定的,如表3、4所列。C51编写断服务例程时,应给出相应的中断源编号(中断号)。特定中断源有特定的中断号,而此中断号恰与各中断应有的优先级一致。

本文用C51,以函数库的形式实现方法三所述的策略,其包含两个文件:ExtIntPri.H、

ExtIntPri.C。须要指出,为使优先级的设置和恢复具有原子性以防出现混乱,应对SetPriority()和ResetPriority()作临界处理,以使其不被“再入”访问。

另外,应对系统栈作调整。如图1所示,其中“1”代表SetPriority()所作的调整,其将IP、IE保存于系统栈中;“2”代表ResetPriority()所作的调整,其从系统栈中恢复IE、IP;“HAddr”、“LAddr”分别代表当前函数返回地址的高位字节和低字节(栈中的地址是以小端字节序方式存储,这是C51中唯一的例外,而所有其它多字节数据则皆以大端字节序方式存储)。如果不这样做,而是定义两个全局变量来保存IE、IP,由于SetPriority()和ResetPriority()都要访问这两个全局变量,而这两个函数又应在ISR 的开关和结尾处被分别调用,从而使ISR成为临界区,而不可被其它ISR中断,这将使优先级的存在失去意义。

//ExtIntPri.H

extern void SetPriority(unsigned char);

extern void SetPriority(unsigned char);

extern void ResetPriority(void);

//ExtIntPri.C

#pragma src

#include "ExtIntPri.H"

#include

//静态(局部)函数声明

static void ResetIntSys(void);//仅含一条指令:RETI

//宽两个宏用作“临界区”的进入区和退出区

#define ENTER_CRITICAL()EA=0//关中断,以防临界再入

#define EXIT_CRITICAL() EA=1

//中断屏蔽字和优先级屏蔽字的宏定义,如表3所列。

#define S_INT_MASK 0x8F//;1-01111B

//…

#define S_PRI_MASK 0x0F//;---01111B

//…

//先调整系统栈以保存IP、IE,其过程如图1所示,再为给定中断

//(prio也是中断号)设置优先级

void SetPriority(unsigned char prio){

ENTER_CRITICAL();//关中断

#pragma asm

POP ACC //弹出返回地址的高位字节HAddr

POP B //弹出返回地址的低位字节Laddr

PUSH IP

PUSH IE //EA= =0

PUSH B //LAddr进栈

PUSH ACC //HAddr进制

#pragma endasm

switch(prio){

case 0:IP=X0_PRI_MASK;IE=X0_INT_MASK;

break;

//…

case4:IP=S_PRI_MASK;IE=S_INT_MASK;break;

}

ENTER_CRITICAL();//这里中断被打开,故再关中断

ResetIntSys();

EXIT_CRITICAL();//开中断

}

//从系统栈中恢复IE、IP,其过程如图1所示。该函数应在退出ISP时调用

void ResetPriority(void){

ENTER_CRITICAL();

#pragma asm

POP ACC //弹出返回地址的高位字节HAddr

POP B //弹出返回地址的低位字节LAddr

POP IE //EA= =0

POP IP

PUSH B //LAddr进栈

PUSH ACC //Haddr进栈

#pragma endasm

EXIT_CRITICAL();//开中断

}

//仅含一条指令:RETI,用以复位中断系统,以便系统在ISR执行过程中可响应其它中断

void ResetIntSys(void){

char code reti=0x32; //32H为RETI的机器码

(((void)(code*)(void))(&reti))();//将reti的地址强制转化为函数指针

}

使用时,只需将ExtIntPri.H头文件用#include加入相应源文件(当然,应将ExtIntPri.C 的目标文件<*.Obj>、库文件<*.lib>或汇编源文件<*.src>加入当前工程)。不妨以定时器0(T0)为例,其中断号为1,故优先级亦应为1,如下所示:

////Test.C

#include "ExtIntPri.H"

//…

void T0_ISR(void)interrupt 1 using 2{

SetPriority(1);

//…

ResetPriority();

}

如此,T0即有了次最高优先级——1。

结语

使用本文所述的“软扩展”方法,可以将MCS-51系统的中断优先级扩展到5级。如果所用51系统的中断源个数为N(N≤8),只须对上述方法稍作修改即可将其优先级扩展到N级。该方法不需增加任何硬件,且所需的额外资源消耗很小,使用也非常简单,不会给用户增加编程负担。实际应用表明,这种方法是可行的和有效的。

来源:[https://www.360docs.net/doc/5711860676.html,]机电之家·机电行业电子商务平台!

中断管理函数

中断管理函数 CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有76个中断,包括16个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级。而我们常用的就是这60个可屏蔽中断,所以我们就只针对这60个可屏蔽中断进行介绍。 在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体: typedef struct { vu32 ISER[2]; u32 RESERVED0[30]; vu32 ICER[2]; u32 RSERVED1[30]; vu32 ISPR[2]; u32 RESERVED2[30]; vu32 ICPR[2]; u32 RESERVED3[30]; vu32 IABR[2]; u32 RESERVED4[62]; vu32 IPR[15]; } NVIC_TypeDef; STM32的中断在这些寄存器的控制下有序的执行的。了解这些中断寄存器,你才能方便的使用STM32的中断。下面重点介绍这几个寄存器: ISER[2]:ISER全称是:Interrupt Set-Enable Registers,这是一个中断使能寄存器组。上面说了STM32的可屏蔽中断只有60个,这里用了2个32位的寄存器,总共可以表示64个中断。而STM32只用了其中的前60位。ISER[0]的

bit0~bit31分别对应中断0~31。ISER[1]的bit0~27对应中断32~59;这样总共60个中断就分别对应上了。你要使能某个中断,必须设置相应的ISER位为1,使该中断被使能(这里仅仅是使能,还要配合中断分组、屏蔽、IO口映射等设置才算是一个完整的中断设置)。具体每一位对应哪个中断,请参考 stm32f10x_nvic..h里面的第36行处。 ICER[2]:全称是:Interrupt Clear-Enable Registers,是一个中断除能寄存器组。该寄存器组与ISER的作用恰好相反,是用来清除某个中断的使能的。其对应位的功能,也和ICER一样。这里要专门设置一个ICER来清除中断位,而不是向ISER写0来清除,是因为NVIC的这些寄存器都是写1有效的,写0是无效的。具体为什么这么设计,请看《CM3权威指南》第125页,NVIC概览一章。 ISPR[2]:全称是:Interrupt Set-Pending Registers,是一个中断挂起控制寄存器组。每个位对应的中断和ISER是一样的。通过置1,可以将正在进行的中断挂起,而执行同级或更高级别的中断。写0是无效的。 ICPR[2]:全称是:Interrupt Clear-Pending Registers,是一个中断解挂控制寄存器组。其作用与ISPR相反,对应位也和ISER是一样的。通过设置1,可以将挂起的中断接挂。写0无效。 IABR[2]:全称是:Active Bit Registers,是一个中断激活标志位寄存器组。对应位所代表的中断和ISER一样,如果为1,则表示该位所对应的中断正在被执行。这是一个只读寄存器,通过它可以知道当前在执行的中断是哪一个。在中断执行完了由硬件自动清零。 IPR[15]:全称是:Interrupt Priority Registers,是一个中断优先级控制的寄存器组。这个寄存器组相当重要!STM32的中断分组与这个寄存器组密切相关。IPR寄存器组由15个32bit的寄存器组成,每个可屏蔽中断占用8bit,这样总共可以表示15*4=60个可屏蔽中断。刚好和STM32的可屏蔽中断数相等。IPR[0]的[31~24],[23~16],[15~8],[7~0]分别对应中中断3~0,依次类推,总共对应60个外部中断。而每个可屏蔽中断占用的8bit并没有全部使用,而是只用了高4位。这4位,又分为抢占优先级和子优先级。抢占优先级在前,子优先级在后。而这两个优先级各占几个位又要根据SCB->AIRCR中中断分组的设置来决定。 这里简单介绍一下STM32的中断分组:STM32将中断分为5个组,组0~4。该分组的设置是由SCB->AIRCR寄存器的bit10~8来定义的。具体的分配关系如下表所示:

基于MCS-51单片机的热量计

摘要 热量计在我们生活中最实际的应用应该是民用住宅的暖气计量了而我国现有的按使用面积收费的方式存在着许多不合理的因素。为解决这一问题,本论文介绍了一种新型的热量计,该热量计是基于51系列单片机,主要由流量传感器、温度传感器、单片机三部分组成。本文详细阐述了热量计的硬件和软件设计,并简要介绍了相应的抗干扰措施。 热量计可以精确的对实际热量的耗损进行测量,是实施城市供热体制改革,推行按热量计费的关键设备,对热量计消耗智能计算,以用户实际耗用热量为计量收费依据。如果将热量计作为供暖公司向每一位住户收费的依据和手段,是容易被百姓们所接受和推崇的,而且由于热量与费用直接相关,也加强了住户的节能意识。用热量计进行计量更为科学、合理,既方便用户,又便于管理。 关键词:热量计;单片机;温度传感器;流量传感器 Abstract

Calorimeter in our lives should be the most practical application of measurement of residential heating and use of the area by our existing way of charging, there are many irrational factors. To solve this problem, this paper introduces a new type of calorimeter, the calorimeter is based on the 51 series, mainly by the flow sensor, temperature sensor, microcontroller three parts. This paper describes the calorimeter hardware and software design, and briefly describes the corresponding anti-jamming measures. Calorimeter can accurately on actual measurement of heat loss is to implement the urban heating system, the implementation of key equipment by heat billing for consumption calorimeter intelligent computing to user's actual calorie consumption metering and charging basis. If the calorimeter as heating companies charge to every household basis and means, people who are likely to be accepted and respected, and because of the heat and the costs are directly related, but also strengthened the household energy awareness. Measured with a calorimeter more scientific and reasonable, not only user-friendly, and easy to manage. Keywords: Calorimeter; SingleChip Microcomputer; Temperature sensor; Flow sensors

易错试题

单片机应用习题 一.选择题 1.若单片机的振荡频率为6MHz,设定时器工作在方式1需要定时1ms,则定时器初值应为 ( C )。 A.500 B.1000 C.216-500 D.216-1000 2.定时器1工作在计数方式时,其外加的计数脉冲信号应连接到( D )引脚。 A.P3.2 B.P3.3 C.P3.4 D.P3.5 3.当外部中断请求的信号方式为脉冲方式时,要求中断请求信号的高电平状态和低电平状态都应至少维持( A )。 A.1个机器周期 B.2个机器周期 C.4个机器周期 D.10个晶振周期 4.定时器若工作在循环定时或循环计数场合,应选用( C )。 A.工作方式0 B.工作方式1 C.工作方式2 D.工作方式3 5.串行口每一次传送( A )字符。 A.1个 B.1串 C.1帧 D.1波特 6. 单片机应用程序一般存放在( B ) a)RAM b)ROM c)寄存器 d)CPU 7. .8031单片机中既可位寻址又可字节寻址的单元是( A) a)20H b)30H c)00H d)70H 8. 、在串行通信中, 8031中发送和接收的寄存器是( B) 。 A.TMOD B. SBUF C. SCON D. DPTR 9. 波特的单位是(B) A. 字符/秒 B. 位/秒 C. 帧/秒 D. 字节/秒 10. 存储器的地址范围是0000H~0FFFH,它的容量为( D )。 (A)1KB (B) 2KB (C) 3KB (D) 4KB 11. MCS-51的相对转移指令的最大负跳变距离(B ) A.2KB B. 128B C. 127B D. 256B 12. 某种存储器芯片是8KB*4/片,那么它的地址线根数是( C ) A.11根 B.12根 C. 13根 D. 14根 13. 关于MCS-51的堆栈操作,正确的说法是( C ) A.先入栈,再修改栈指针 B.先修改栈指针,再出栈 C. 先修改栈指针,在入栈 D.以上都不对 14 .PC中存放的是( A ) A.下一条指令的地址 B. 当前正在执行的指令 C.当前正在执行指令的地址 D.下一条要执行的指令 15. 控制串行口工作方式的寄存器是( C ) A.TCON B.PCON C.SCON D.TMOD 16. MCS-51上电复位后,SP的内容应为( B ) A.00H B.07H C.60H D.70H 17. 使用8255可以扩展出的I/O口线是(B) (A)16根(B)24根(C)22根(D)32根

实验四单片机中断优先级实验

实验四单片机中断优先级实验 一、实验目的 1.理解AT89C51单片机中断优先级和优先权。 2.用PROTEUS设计、仿真基于AT89C51单片机的中断优先级实验。 3.掌握中断编程。 4.掌握发光二极管的控制方法。 二、实验要求 单片机主程序控制P0口数码管循环显示0~8;外中断(INT0)、外中断(INT1)发生时分别在P2、P1口依次显示0~8;INT1为高优先级,INT0为低优先级。 三、电路设计 1.从 ① ②RES、 ③ ④CAP、CAP-ELEC:电容、电解电容; ⑤CRYSTAL:晶振; ⑥BUTTON:按钮。 2.放置元器件 3.放置电源和地 4.连线 5.元器件属性设置 6.电气检测 四、源程序设计、生成目标代码文件 1.流程图 2.源程序设计

通过菜单“source→Add/Remove Source Files…”新建源程序文件:。 通过菜单“source→”,打开PROTEUS提供的文本编辑器SRCEDIT,在其中编辑源程序。 程序编辑好后,单击按钮存入文件。 3.源程序编译汇编、生成目标代码文件 通过菜单“source→Build All”编译汇编源程序,生成目标代码文件。若编译失败,可对程序进行修改调试直至汇编成功。 五、PROTEUS仿真 1.加载目标代码文件 2.全速仿真 单击按钮,启动仿真。 (1)低优先级INT0中断主程序:当主程序运行时,单片机控制与P0口相接的数码管循环显示1~8;而P1、P2口的数码管不显示。当前主程序控制P0口显示“8”的时刻单击“低优先级输入”按钮,触发INT0如图所示,INT0服务程序控制P2口依次显示1~8,当前显示“2”。 (2)高优先级INT1中断低优先级INT0;在上一步的基础上,即主程序被INT0中断在P0口输出“8”,而在INT0服务程序在P2口输出“2”的时刻,单击“高优先级输入”按钮,触发高优先级INT1,所在INT0被中断在显示“2”,INT1服务程序控制P1口依次显示1~8。

基于MCS-51单片机的可调频率方波发生器课程设计报告

摘要 本实验是基于PHILIPS AT89C51 单片机所设计的,可以实现键位和数字动态显示的一种频率可调方波发生器。通过键盘键入(10HZ-9999HZ)随机频率,使用七段数码管显示,每一个数码管对应一个键位。单片机对各个键位进行扫描,确定键位的输入,然后数码管显示输入的数值,方波发生器输出以数码管显示的数值为频率的方波。 关键词:单片机七段数码管键盘电路频率可调方波发生器

一、目的和功能 1.1 目的: 设计一种频率范围限定且可调的方波发生器,志在产生特定频率的方波。 1.2功能: 假设键盘是4*4的键盘,当键盘输入范围在10hz-9999hz的数字,单片机控制数码管显示该数值,并把该数值当做方波发生器的输入频率,单片机控制该方波发生器以该数值作为频率显示方波,从而得到我们想要频率的方波。 二、硬件设计 2.1 硬件设计思想 键盘的数字和键位关系固定,通过键盘输入产生频率,通过LED数码管显示出来,每一个数码管对应一个键位。基本设备是基于PHILIPS AT89C51单片机,外围设备采用的是4个七段数码管,PHILIPS A T89C51单片机,1个OSCILLOSCOPE 方波发生器,16个Button,若干电阻,电源电池。 2.2 部分硬件方案论述 2.2.1 七段数码管扫描显示方式的方案比较 方案一:静态显示方式:静态显示方式是指当显示器显示某一字符时,七段数码管的每段发光二极管的位选始终被选中。在这种显示方式下,每一个LED数码管显示器都需要一个8位的输出口进行控制。静态显示主要的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度大,系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,这样既节约了CPU的时间,又提高了CPU的工作效率。其不足之处是占用硬件资源较多,每个LED数码管需要独占8条输出线。随着显示器位数的增加,需要的I/O口线也将增加。

基于MCS51单片机步进电机的控制系统设计与实现

学校代码:11509 学号:1005073029 Hefei University 毕业设计(论文) BACH ELOR DISSERTATI ON 论文题目:基于MCS51单片机步进电机的控制系统设计与实现学位类别:工学学士 学科专业: 10级自动化2班 作者姓名: 导师姓名: 完成时间: 2014年5月12日

基于MCS51单片机步进电机的控制系统设计与实现 中文摘要 步进电机最早出现在十九世纪初期,经过一段时期的发展步进电机被广泛应用在各个领域,因为其具有良好的控制作用。所以对步进电机控系统进一步的探索有着更为深远的意义。 本设计是基于单片步进电机的控制系统,硬件设计采用STC89C52单片机为控制核心;选取ULN2003作为驱动器提供脉冲频率,驱动步进电机运转;通过键盘的加减速按钮、正反转按钮和停止按钮来控制步进电机的速度、方向和停止,最后通过测试传感器将这几个参数显示在12864液晶显示器上。软件设计采用KEIL软件工具进行C语言编写,通过各个模块端口的定义,编写出了步进电机加减速控制和正反转的程序,最后通过各模块程序调试对硬件电路施行控制。 本设计以经济实用为原则,通过软硬件结合的设计,实现了对步进电机转动速度和方向的有效控制。该系统具有控制性好,设计成本低等优点。 关键字:STC89C52;步进电机;控制系统;测速传感器

Stepper motor control system design and implementation based on MCS51 microcontroller ABSTRACT The stepping motor was invented in the early 1800s, after a long period of development of the stepper motor is widely used in various fields, because it has good control effect. Therefore, the study of the stepper motor control system has a very important significance. This design is stepper motor control system based microcomputer, hardware design uses STC89C52 microcontroller as the control core; select ULN2003 as driver provides pulse frequency drive stepper motor rotation; through acceleration and deceleration button keyboard,forward and reverse button and stop buttons to control the stepper motor speed, direction and stops, Then these several parameters was displayed on the LCD monitor 12864 by the speed sensor. Software design using KEIL software tools for C language, defined each module port, and write a stepper motor control acceleration and deceleration and reversing the process. finally to control the hardware circuit through debugging. The design principle of economical and practical, through combination of software and hardware designed to achieve the effective control of the stepper motor rotation speed and direction. The system has good controllability and low coat. Keywords: STC89C52; stepper motor; control systems; speed sensor

第三章复习题

1.什么是中断和中断系统?其主要功能是什么?1.解:当CPU正在处理某件事情的时候,外部发生的某一事件请求CPU迅速去处理, CPU 暂时中止当前的工作,转去处理所发生的事件,处理完该事件以后,再回到原来被中止的地方,继续原来的工作。这种过程为中断,实现这种服务的部件称为中断系统。 功能:①实时处理,能对外界异步发生的事件作出及时的处理。②完全消除了CPU在查询方式中的等待现象,大大提高了CPU的工作效率。③实现实时控制。 2.什么是是中断优先级?中断优先级处理的原则是什么?2.解:中断优先级是CPU响应中断的先后顺序。中断优先处理的原则是: (1)先响应优先级高的中断请求,再响应优先级低的中断请求。 (2)如果一个中断请求己被响应,同级的其他中断请求将被禁止。 (3)如果同级的多个中断请求同时出现,CPU则按单片机内部的自然优先级顺序响应各中断请求。 单片机内部自然优先级顺序(由高到低)为: 外部中断0→定时器0中断→外部中断l→定时器1中断→串行接口中断。 3.8051有几个中断优先级?如何对各中断请求进行控制?3.解:(1)80C51有以下中断源: ①外部中断0()请求,低电平有效。 ②外部中断1()请求,低电平有效。 ③ T0:定时器/计数器0溢出中断请求。 ④ T1:定时器/计数器1溢出中断请求。 ⑤ TI/RI:串行接口中断请求。 (2)通过对特殊功能寄存器TCON、SCON、IE、IP的各位进行置位或复位等操作,可实现对各种中断的控制功能。 4.简述MCS51单片机的中断响应过程。4.解:单片机一旦响应中断请求, 就由硬件完成以下功能: (1)根据响应的中断源的中断优先级, 使相应的优先级状态触发器置1; (2)执行硬件中断服务子程序调用, 并把当前程序计数器PC的内容压入堆栈,保护断点,寻找中断源; (3)清除相应的中断请求标志位(串行口中断请求标志RI和TI除外); (4)把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC, 从而转入相应的中断服务程序。 (5)中断返回,程序返回断点处继续执行。 5.8051怎么管理中断?怎样开放和禁止中断?怎么设置优先级?5.解:(1)由中断源提出中断请求,由中断控制允许控制决定是否响应中断,如果允许响应中断,则CPU按设定好的优先级的顺序响应中断。如果是同一优先级的中断,则按单片机内部的自然优先级顺序(外部中断0→定时器0中断→外部中断l→定时器1中断→串行接口中断)响应中断。 CPU响应中断请求后,就立即转入执行中断服务程序。保护断点、寻找中断源、中断处理、中断返回,程序返回断点处继续执行。(2)由中断允许寄存器IE控制开放和禁止中断。欲开放某一中断,则应先开放总中断允许(EA置1),然后开放相应中断的中断允许(相应位置1);若要要禁止中断,则EA置O即可。 (3)由中断优先级控制寄存器IP控制中断优先级,相应位置1,则设为高级中断,置0则为低级。其中:PS为串行中断优先级,PTl(0)为定时中断1(0)优先级,PXl(0)外部中断1(0)优先级。 6.8051在什么条件下可响应中断?6.解:(1)有中断源发出中断请求。 (2)中断总允许控制位EA=l, CPU开放总中断。 (3)申请中断的中断源的中断允许位为1,即该中断没有被屏蔽。 (4)无同级或更高级中断正在服务。 (5)当前指令周期已经结束。(6)若现行指令为RETI或访问IE或IP指令时,读指令以及紧接着的另一条指令已执行完毕。 满足以上条件,则CPU响应响应中断元的中断请求。 7.请写出为低电平/边沿触发的中断系统初始化程序。 7.解:ORG 0000H LJMP MAIN ORG 0013H LJMP INT1 ORG 0030H MAIN: SETB EA SETB EX1 SETB PX1 CLR IT1 JMP $ INT1: RETI END 8.说明MCS-51单片机响应中断后,中断服务的入口地址。8.解:中断服务程序的入口地址如下表: 中断源中断矢量 外部中断0 0003H 定时器T0中断 000BH 外部中断1 0013H 定时器T1中断 001BH 串行口中断 0023H 9.8051单片机外部中断源有几种触发中断请求的方法?如何实现中断请求?9.解:有两种方式:电平触发和边沿触发。 (1)电平触发方式:CPU在每个机器周期的S5P2期间采样外部中断引脚的输人电平。若为低电平,便置IEl(IEO)为“1” ,申请中断;若外部中断引脚为高电平,则IEl(IEO)清零。 (2)边沿触发方式:CPU在每个机器周期的S5P2期间采样外部中断请求引脚的输人电平。如果在相继的两个机器周期采样过程中,一个机器周期采样到外部中断请求为高电平,接着下一个机器周期采样到外部中断请求为低电平,则使IEl(IEO)置1,申请中断;否则,IEl(1E0)置0。 10.8051单片机内部有几个定时器/计数器?它们是由哪些特殊功能寄存器组成? 10.解:80C51单片机片内设有2个定时器/计数器:定时器/计数器T0和定时器/计数器T1,T0由TH0、TL0组成,T1由TH1、TLl组成。T0、T1由特殊功能寄存器TMOD、TCON控制。 11.8051单片机定时器/计数器作定时和计数使用时,其计数脉冲分别由谁提供? 11.解:作定时器时,计数脉冲来自单片机内部,是由单片机晶振经过12分频后获得的脉冲。作为计数器时,计数脉冲来自单片机的外部,即T0与T1两个引用的输入脉冲。 12.定时器/计数器的4种工作方式个有何特点?如何选择设定? 12.解:(1) 工作方式O: 13位定时器/计数器工作方式。 工作方式0由TH0的全部8位和TL0的低5位构成13位加1计数器,此时TL0的高3位未用。在计数过程中,当TL0的低5位溢出时,都会向TH0进位,而全部13位计数器溢出时,则计数器溢出标志位TF0置位。 (2) 工作方式l: 16位的定时器/计数器方式。 工作方式1由TH0作为高8位,TL0为低8位,在计数过程中,当全部16位计数器溢出时,则计数器溢出标志位TF0置位。 (3) 工作方式2: 自动重新装入计数初值的8位定时器/计数器工作方式。 工作方式2的16位定时器/计数器被拆成两个8位寄存器TH0和TL0,CPU在对它们初始化时必须装入相同的定时器/计数器初值。定时器/计数器启动后,TL0按8位加1计数器计数,当TL0计数溢出时,置位TF0的同时又从预置寄存器TH0中重新获得计数初值并启动计

STM32外部中断以及中断优先级

外部中断的初始化过程: 1.初始化IO为输入(可以设置上拉,下拉,浮空) 2.开启IO复用时钟 3.开启与该IO相对的线上(详解下) 4.配置NVIC,使能中断 5.编写中断服务函数 外部中断: Stm32中总共有19个外部中断 包括: 线0-15:IO输入中断(每条线上最多有7个IO,如GPIOA~GPIOG,但是每一条线每次只允许同时连接到一个IO)

线16:PVD 线17:RTC 线18:USB 关于优先级: CM3中内核支持256个中断(16个内核+240外部)和可编程256级中断优先级的设置

Stm32目前支持84个中断(16个内核+68个外部,注:不是指68个外部中断),16级可编程优先级(优先级设置寄存器中使用了4位)

注意:其中外部中断5-9和中断10-15向量存放在一起 优先级: 数值低的优先级要高于数值高的!!!!!! 上电复位后,系统默认使用的是组0; 一个系统只能使用一组优先级组,不可使用多个,优先级的设置不能超过组的范围,否则会产生不可预计的错误 1.高抢先级的中断可以打断低优先级的中断响应,构成中断嵌套 2.相同抢先级的中断不可以构成嵌套,系统会优先响应子优先级高的

3.当2(n)个相同抢先优先级和相同子优先级的中断出现,STM32首先响应中断通道所对应的中断向量地址低的那个中断 4.0号抢先优先级的中断,可以打断任何中断抢先优先级为非0号的中断;1号抢先优先级的中断,可以打断任何中断抢先优先级为2、3、4号的中断;……;构成中断嵌套。 5.所有外部中断通道的优先级控制字PRI_n也都是0,68个外部中断通道的抢先优先级都是0号,没有子优先级的区分。不会发生任何的中断嵌套行为,谁也不能打断当前正在执行的中断服务。当多个中断出现后,则看它们的中断向量地址:地址越低,中断级别越高,STM32优先响应

基于MCS51单片机的压力测量 系统的设计与实现

基于MCS51单片机的压力测量 系统的设计与实现 班级; 学号: 姓名: 指导老师:

摘要 以STC-51单片机为核心,应用变阻式应变片测量压力并通过ADC0809的转换,经过单片机处理后在数码管模块显示的智能压力测量系统。是变阻式应变片和51单片机相结合的一个很典型的应用,本系统包括信号采集及转换电路、单片机最小系统、显示模块三个最基本的核心模块。外围扩展了键盘模块、蜂鸣器报警模块,用以调节系统的测量和显示范围。 经试验证明,系统能正常工作且误差在允许误差范围内,符合所有技术指标。 1.方案设计 通过应变片,将机械形变变为电压信号,再通过三级集成放大电路把信号放大,之后,ADC0809把模拟信号转化为数字信号,输入到单片机中,通过按键的控制,将电压的信号输出以数码管的形式显示出来,如果电压信号超出报警上线,蜂鸣

器就发出报警信号。 2.硬件系统设计与分析 (1)应变片与信号放大器的电路分析 应变片运用的是电阻式应变片,原理是吸附在基体材料上的应变电阻随机械性形变而产生电阻变化的现象,即它可以将被测件上的应变变化转化成一种电信号。桥式电路的输入信号是0~10v,经过电路后,输出的电压经过集成运放电路放大后,输入到A/D的In0口,完成信号的输入与传 (2)AD转换分析 A/D转换器是将模拟信号转化为数字信号,start与ale信号接到51到单片机的的p2.6接口,完成信号的输出,而clock接口接到74ls74d的2q接口, D0~D7接到单片机的p1.0~p1.7接口. (3)单片机最小系统分析

单片机的RST是复位接口,刚开始时是低电平,闭合s1开关,接通电源,获得高电平,完成复位。Xtal1与xtal2是晶振电路,为单片机提供工作频率,为12m。P0.0~p0.7接到74hc573的段锁存器,完成数码管的段选择,p2.4~p2,7接到位锁存器,完成数码管的位选择。 (4)按键分析 (5)数码管分析

实验五--单片机中断优先级实验

实验五单片机中断优先级实验 一、实验目的 1.理解AT89C51单片机中断优先级和优先权。 2.用PROTEUS设计、仿真基于AT89C51单片机的中断优先级实验。 3.掌握中断编程。 4.掌握发光二极管的控制方法。 二、实验要求 单片机主程序控制P0口数码管循环显示0~8;外中断(INT0)、外中断(INT1)发生时分别在P2、P1口依次显示0~8;INT1为高优先级,INT0为低优先级。 三、电路设计 ④CAP、CAP-ELEC:电容、电解电容; ⑤CRYSTAL:晶振; ⑥BUTTON:按钮。

2.放置元器件 3.放置电源和地 4.连线 5.元器件属性设置 6.电气检测 四、源程序设计、生成目标代码文件 1.流程图 2.源程序设计 通过菜单“sourc e→Add/Remove Source Files…”新建源程序文件:DZC35.ASM。 通过菜单“sourc e→DZC35.ASM”,打开PROTEUS提供的文本编辑器SRCEDIT,在其中编辑源程序。 程序编辑好后,单击按钮存入文件DZC35.ASM。 3.源程序编译汇编、生成目标代码文件 通过菜单“sourc e→Build All”编译汇编源程序,生成目标代码文件。若编译失败,可对程序进行修改调试直至汇编成功。 五、PROTEUS仿真 1.加载目标代码文件 2.全速仿真 单击按钮,启动仿真。 (1)低优先级INT0中断主程序:当主程序运行时,单片机控制与P0

口相接的数码管循环显示1~8;而P1、P2口的数码管不显示。当前主程序控制P0口显示“8”的时刻单击“低优先级输入”按钮,触发INT0如图所示,INT0服务程序控制P2口依次显示1~8,当前显示“2”。 (2)高优先级INT1中断低优先级INT0;在上一步的基础上,即主程序被INT0中断在P0口输出“8”,而在INT0服务程序在P2口输出“2”的时刻,单击“高优先级输入”按钮,触发高优先级INT1,所在INT0被中断在显示“2”,INT1服务程序控制P1口依次显示1~8。 3.仿真调试 六、思考题: 1.说明单片机中共有哪几种中断,它们的默认优先级是什么? 2.怎样修改中断优先级?例如在本实验中要使TIMER1成为优先级最高的中断,该怎么处理?

STM32 中断优先级理解

CM3 内核支持256 个中断,其中包含了16 个内核中断和240 个外部中断,并且具有256级的可编程中断设置。但STM32 并没有使用CM3 内核的全部东西,而是只用了它的一部分。STM32 有84 个中断,包括16 个内核中断和68 个可屏蔽中断,具有16 级可编程的中断优先级。而我们常用的就是这68 个可屏蔽中断,但是STM32 的68 个可屏蔽中断,在STM32F103 系列上面,又只有60 个 (在107 系列才有68 个)。 在MDK 内,与NVIC 相关的寄存器,MDK 为其定义了如下的结构体: 点击(此处)折叠或打开 1.typedef struct 2.{ 3.vu32 ISER[2]; 4.u32 RESERVED0[30]; 5.vu32 ICER[2]; 6.u32 RSERVED1[30]; 7.vu32 ISPR[2]; 8.u32 RESERVED2[30]; 9.vu32 ICPR[2]; 10.u32 RESERVED3[30]; 11.vu32 IABR[2]; 12.u32 RESERVED4[62]; 13.vu32 IPR[15]; 14.} NVIC_TypeDef; STM32 的中断在这些寄存器的控制下有序的执行的。只有了解这些中断寄存器,才能了解STM32 的中断。下面简要介绍这几个寄存器: ISER[2]:I SER 全称是:Interrupt Set-Enable Registers,这是一个中断使能寄存器组。上面说了STM32F103 的可屏蔽中断只有60 个,这里用了 2 个32 位的寄存器,总共可以表示64 个中断。而STM32F103 只用了其中的前60 位。ISER[0]的bit0~bit31 分别对应中断0~31。ISER[1]的bit0~27 对应中断32~59;这样总共60 个中断就分别对应上了。你要使能某个中断,必须设置相应的ISER 位为1,使该中断被使能(这里仅仅是使能,还要配合中断分组、屏蔽、IO 口映射等设置才算是一个完整的中断设置)。具体每一位对应哪个中断,请参考stm32f10x_nvic..h 里面的第36 行处。 ICER[2]:全称是:Interrupt Clear-Enable Registers,是一个中断除能寄存器组。该寄存器组与ISER 的作用恰好相反,是用来清除某个中断的使能的。其对应位的功能,也和ICER 一样。这里要专门设置一个ICER 来清除中断位,而不是 向ISER 写0 来清除,是因为NVIC 的这些寄存器都是写 1 有效的,写0 是无效的。 ISPR[2]:全称是:Interrupt Set-Pending Registers,是一个中断挂起控制寄存器组。每个位对应的中断和ISER 是一样的。通过置1,可以将正在进行的中断挂起,而执行同级或更高级别的中断。写0 是无效的。

基于MCS-51单片机的压力传感器实验

燕山大学 课程设计说明书题目:压力传感器实验 学院(系):里仁学院 年级专业:仪表10-2 学号: 学生姓名: 指导教师: 教师职称:

燕山大学课程设计(论文)任务书 院(系):电气工程学院基层教学单位:仪器科学与工程系 说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份。 年月日

摘要 此次设计是基于8051单片机的压力检测系统,简要介绍了压力传感器电路的工作原理和弱信号传感器电路以及A/D变换电路的工作原理,通过压力传感器将需要测量的位置的压力信号转化为电信号,再经过运算放大器进行信号放大,送至8位A/D转换器ADC0808,然后将模拟信号转换成单片机可以识别的数字信号,再经单片机转换成LED显示器可以识别的信息,最后显示输出。 关键词:8051单片机压力传感器A/D变换电路LED显示器

目录 摘要---------------------------- -------------------------------------------------------------------------2 关键字---------------- ----------------------------------------------------------------------------------2 第一章总体设计方案及模块划分---------------------------------------------------------------4 1.1总体设计方案--------------------------------------------------------------------------------4 1.2模块划分--------------------------------------------------------------------------------------4 1.3设计框图如下图所示-----------------------------------------------------------------------5 第二章各模块设计参数-------------------------------------------------------------------------------5 2.1传感器元件模块------------------------------------------------------------------------------5 2.2 A/D转换模块---------------------------------------------------------------------------------8 2.3控制器处理模块-----------------------------------------------------------------------------14 第三章压力传感器实验数据采集、显示及程序---------------------------------------------20 3.1数据采集及显示-----------------------------------------------------------------------------20 3.2程序设计--------------------------------------------------------------------------------------20 第四章心得体会--------------------------------------------------------------------------------------29 参考文献资料------------------------------------------------------------------------------------------30

单片机简答题

简答题: 1.MCS51的中断系统有几个中断源?几个中断优先级?中断优先级是如何控制的?在出现同级中断申请时,CPU按什么顺序响应(按由高级到低级的顺序写出各个中断源)?各个中断源的入口地址是多少? 答:MCS51单片机有5个中断源,2个中断优先级,中断优先级由特殊功能寄存器IP控制,在出现同级中断申请时,CPU按如下顺序响应各个中断源的请求:INT0、T0、INT1、T1、串口,各个中断源的入口地址分别是0003H、000BH、0013H、001BH、0023H。 2.已知单片机系统晶振频率为6MHz,若要求定时值为10ms时,定时器T0工作在方式1时,定时器T0对应的初值是多少?TMOD的值是多少?TH0=?TL0=?(写出步骤) 答:定时值为10ms时,定时器T0工作在方式1时,定时器T0对应的初值是1388H TMOD的值是00000001B,TH0=13H;TL0=88H。 3.MCS51系列单片机的内部资源有哪些?说出8031、8051和8751的区别。 答:MCS51系列单片机上有1个8位CPU、128B的RAM、21个SFR、4个并行口、1个串行口、2个定时计数器和中断系统等资源。8031、8051和8751的区别是8031内无ROM;8051内有4KB的掩膜ROM;8751内有4KB的EPROM。 1.如何正确使用P3口? 1.要点: (1)说明P3口有第一功能和第二功能的使用。 (2)P3口的第二功能各位线的含义。 (3)使用时应先按需要选用第二功能信号,剩下的口线才作第一功能I/O线用。 (4)读引脚数据时,必需先给锁存器输出“1”。 2.简述累加器的ACC的作用。 2.(1)8位专用寄存器。 (2)运算时存放一个操作数。 (3)运算后存放运算结果,所以称它为累加器。 3.简述寄存器间接寻址方式及其寻址范围。 3.(1)寄存器中存放的是操作数的地址,操作数是通过寄存器间接得到,这种寻址方式称为寄存器间接寻址方式。 (2)寻址范围: ①内部RAM低128单位,形式@Ri(i=0,1)。 ②外部RAM64K使用DPTR作间址寄存器,形式为@DPTR。 4.简述MCS-51单片机的中断入口地址。 4.中断入口地址为中断响应后PC的内容即中断服务的入口地址。 它们是:外部中断0 0003H 定时器T0中断000BH 外部中断1 0013H 定时器T1中断001BH 串行口中断0023H 5.简述串行数据传送的特点。 5.(1)传送按位顺序进行,速度慢。

简答

1.MCS51的中断系统有几个中断源?几个中断优先级?中断优先级是如何控制的?在出现同级中断申请时,CPU 按什么顺序响应(按由高级到低级的顺序写出各个中断源)?各个中断源的入口地址是多少? 答:MCS51单片机有5个中断源,2个中断优先级,中断优先级由特殊功能寄存器IP控制,在出现同级中断申请时,CPU按如下顺序响应各个中断源的请求:INT0、T0、INT1、T1、串口,各个中断源的入口地址分别是0003H、000BH、0013H、001BH、0023H。 3.MCS51系列单片机的内部资源有哪些?说出8031、8051 和8751的区别。 答:MCS51 系列单片机上有1 个8 位CPU、128B的RAM、21 个SFR、4 个并行口、1 个 串行口、2 个定时计数器和中断系统等资源。8031、8051和8751 的区别是8031内无ROM;8051 内有4KB的掩膜ROM;8751 内有4KB的EPROM。 1.如何正确使用P3 口?(1)说明P3口有第一功能和第二功能的使用。(2)P3口的第二功能各位线的含义。(3)使用时应先按需要选用第二功能信号,剩下的口线才作第一功能I/O 线用。(4)读引脚数据时,必需先给锁存器输出“1”。 2.简述累加器的ACC的作用。 (1)8位专用寄存器。(2)运算时存放一个操作数。(3)运算后存放运算结果,所以称它为累加器。 3.简述寄存器间接寻址方式及其寻址范围。 (1)寄存器中存放的是操作数的地址,操作数是通过寄存器间接得到,这种寻址方式称为寄存器间接寻址方式。 (2)寻址范围:①内部RAM 低128 单位,形式@Ri(i=0,1)。②外部RAM64K 使用DPTR作间址寄存器,形式为@DPTR。 1.单片机的特性主要有哪些? 答:单片机具有体积小、可靠性高、控制功能强、使用方便、性能价格比高、容易产品化等特点。 2.8031、8051、8751有何异同? 答:8051、8751 和8031均为8 位单片机,其内部结构是基本相同的。