89c51试题

89c51试题
89c51试题

单片机期末考试试题库及答案

01、单片机是将微处理器、一定容量的 RAM 和ROM以及 I/O 口、定时器等电路集成在一块芯片上而构成的微型计算机。

2、单片机89C51片内集成了 4 KB的FLASH ROM,共有 5 个中断源。

3、两位十六进制数最多可以表示 256 个存储单元。

4、89C51是以下哪个公司的产品?( C )

A、INTEL

B、AMD

C、ATMEL

D、PHILIPS

5、在89C51中,只有当EA引脚接高电平时,CPU才访问片内的Flash ROM。

6、是非题:当89C51的EA引脚接低电平时,CPU只能访问片外ROM,而不管片内是否有程序存储器。T

7、是非题:当89C51的EA引脚接高电平时,CPU只能访问片内的4KB空间。F

8、当CPU访问片外的存储器时,其低八位地址由 P0 口提供,高八位地址由 P2 口提供,8位数据由 P0 口提供。

9、在I/O口中, P0 口在接LED时,必须提供上拉电阻, P3 口具有第二功能。

10、是非题:MCS-51系列单片机直接读端口和读端口锁存器的结果永远是相同的。F

11、是非题:是读端口还是读锁存器是用指令来区别的。T

12、是非题:在89C51的片内RAM区中,位地址和部分字节地址是冲突的。F

13、是非题:中断的矢量地址位于RAM区中。F

14、MCS-51系列单片机是属于( B )体系结构。 A、冯诺依曼 B、普林斯顿 C、哈佛 D、图灵

15、89C51具有 64 KB的字节寻址能力。

16、是非题:在89C51中,当CPU访问片内、外ROM区时用MOVC指令,访问片外RAM区时用MOVX指令,访问片内RAM区时用MOV指令。T

17、在89C51中,片内RAM分为地址为 00H~7FH 的真正RAM区,和地址为80H~FFH的特殊功能寄存器(SFR) 区两个部分。

18、在89C51中,通用寄存器区共分为 4 组,每组 8 个工作寄存器,当CPU复位时,第 0 组寄存器为当前的工作寄存器。

19、是非题:工作寄存器区不允许做普通的RAM单元来使用。F

20、是非题:工作寄存器组是通过置位PSW中的RS0和RS1来切换的。T

21、是非题:特殊功能寄存器可以当作普通的RAM单元来使用。F

22、是非题:访问128个位地址用位寻址方式,访问低128字节单元用直接或间接寻址方式。T

23、是非题:堆栈指针SP的内容可指向片内00H~7FH的任何RAM单元,系统复位后,SP初始化为00H。F

24、数据指针DPTR是一个 16 位的特殊功能寄存器寄存器。

25、是非题:DPTR只能当作一个16位的特殊功能寄存器来使用。F

26、是非题:程序计数器PC是一个可以寻址的特殊功能寄存器。F

27、在89C51中,一个机器周期包括 12 个振荡周期,而每条指令都由一个或几个机器周期组成,分别有单周期指令、双周期指令和 4周期指令。

28、当系统处于正常工作状态且振荡稳定后,在RST引脚上加一个高电平并维持 2 个机器周期,可将系统复位。

29、是非题:单片机89C51复位后,其PC指针初始化为0000H,使单片机从该地址单元开始执行程序。T

30、单片机89C51复位后,其I/O口锁存器的值为 0FFH ,堆栈指针的值为 07H ,SBUF的值为不定,内部RAM的值不受复位的影响,而其余寄存器的值全部为 0H 。

31、是非题:单片机系统上电后,其内部RAM的值是不确定的。T

32、以下哪一个为51系列单片机的上电自动复位电路(假设RST端内部无下拉电阻)(P39图2-16(a))。

33、在89C51中,有两种方式可使单片机退出空闲模式,其一是任何的中断请求被响应,其二是硬件复位;而只有硬件复位方式才能让进入掉电模式的单片机退出掉电模式。

34、请用下图说明89C51单片机读端口锁存器的必要性。

读锁存器是为了避免直接读端口引脚时,收到外部电路的干扰,而产生的误读现象。

35、请说明为什么使用LED需要接限流电阻,当高电平为+5V时,正常点亮一个LED需要多大阻值的限流电阻(设LED的正常

解:

因为LED导通时,电压降是固定的(0.6V)。为了使LED既能正常工作(电流为10mA),又不至于被过大的电流损坏,所以必须加一个限流电阻。

36、以下哪一条指令的写法是错误的( C )。

A、MOV DPTR,#3F98H

B、MOV R0,#0FEH

C、MOV 50H,#0FC3DH

D、INC R0

37、以下哪一条指令的写法是错误的( D )。

A、INC DPTR

B、MOV R0,#0FEH

C、DEC A

D、PUSH A

38、以下哪一条指令的写法是错误的( B )。

A、MOVC A,@A+DPTR

B、MOV R0,#FEH

C、CPL A

D、PUSH ACC

39、是非题:在51系列单片机的指令系统中,其加法、减法、乘法和除法必须有累加器A的参与才能完成。T

40、以下哪一条是位操作指令( B )。

A、MOV P0,#0FFH

B、CLR P1.0

C、CPL A

D、POP PSW

41、以下哪一条是位操作指令( B )。

A、MOV P1,#0FFH

B、MOV C,ACC.1

C、CPL A

D、POP PSW

42、以下哪一条是位操作指令( B )。

A、MOV P0,#0FFH

B、SETB TR0

C、CPL R0

D、PUSH PSW

43、简述89C51单片机中断的概念。

当CPU正在处理某件事情的时候,外部发生的某一事件请求CPU迅速去处理,于是,CPU暂时中止当前的工作,转去处理所发生的时间。中断服务处理完该事件以后,再回到原来被中止的地方,继续原来的工作,这样的过程成为中断。

44、什么是保护现场,什么是恢复现场?

保护现场:当CPU响应中断程序时,硬件会自动把断点地址(16位程序计数器的值)压入堆栈之外,用户还须注意保护有关工作寄存器、累加器、标志位等信息;

恢复现场:在完成中断服务程序后,恢复原工作寄存器、累加器、标志位等的内容。

45、单片机89C51有哪些中断源,对其中断请求如何进行控制?

89C51中断系统有5个中断源:

●INT0:外部中断0请求,低电平有效。通过P3.2引脚输入。

●INT1:外部中断1请求,低电平有效。通过P3.3引脚输入。

●T0:定时器/计数器0溢出中断请求。

●T1:定时器/计数器1溢出中断请求。

●TXD/RXD:串行口中断请求。当串行口完成一帧数据的发送或接收时,便请求中断。

46、单片机89C51的5个中断源分别为 INT0 、 INT1 、 T0 、

T1 以及 TXD/RXD 。

47、单片机89C51的中断要用到4个特殊功能寄存器,它们是 TCON 、SCON、

IE 以及IP。

48、在89C51中,外部中断由IT0(1)位来控制其两种触发方式,分别是电平触发方式和边沿触发方式。

49、简述单片机89C51中断的自然优先级顺序,如何提高某一中断源的优先级别。

中断源(控制位)自然优先级

外部中断0(PX0)最高

定时器/计数器0溢出中断(PT0)

外部中断1(PX1)

定时器/计数器1溢出中断(PT1)

串行口中断(PS)最低

若某几个控制位为1,则相应的中断源就规定为高级中断;反之,若某几个控制位为0,则相应的中断源就规定为低级中断。当同时接收到几个同一优先级的中断请求时,响应哪个中断源则取决于内部硬件查询顺序(即自然优先级)。

51、中断处理过程分为3个阶段,即中断响应、中断处理以及中断返回。

52、简述51系列单片机中断响应的条件。

●有中断源发出中断请求;

●中断总允许位EA=1,即CPU开中断;

●申请中断的中断源的中断允许位为1,即中断没有屏蔽;

●无同级或更高级中断正在被服务;

●当前的指令周期已经结束;

●若现在指令为RETI或者是访问IE或IP指令,则该指令以及紧接着的另一条指令已执行完。

53、是非题:在51系列单片机中,中断服务程序从矢量地址开始执行,一直到返回指令RETI为止。T

54、在51系列单片机执行中断服务程序时,为什么一般都要在矢量地址开始的地方放一条跳转指令?

因为51系列单片机的两个相邻中断源中断服务程序入口地址相距只有8个单元,一般的中断服务程序是容纳不下的,因此一般都要在相应的中断服务程序入口地址中放一条跳转指令。

55、为什么一般都把主程序的起始地址放在0030H之后?

因为0000H~0030H中有中断的矢量地址,为了避免冲突,一般都把主程序的起始地址放在0030H之后。

56、是非题:在执行子程序调用或执行中断服务程序时都将产生压栈的动作。T

57、单片机89C51片内有两个 16 位的定时/计数器,即T0和T1,它们都有定时和

事件计数的功能。

58、是非题:定时/计数器工作于定时方式时,是通过89C51片内振荡器输出经12分频后的脉冲进行计数,直至溢出为止。T

59、是非题:定时/计数器工作于计数方式时,是通过89C51的P3.4和P3.5对外部脉冲进行计数,当遇到脉冲下降沿时计数一次。T

60、是非题:定时/计数器在工作时需要消耗CPU的时间。F

61、是非题:定时/计数器的工作模式寄存器TMOD可以进行位寻址。F

62、是非题:定时/计数器在使用前和溢出后,必须对其赋初值才能正常工作。F

63、简述定时/计数器4种工作模式的特点。

模式1:是16位的定时器/计数器;

模式2:把TL0(或TL1)配置成一个可以自动重装载的8位定时器/计数器;

模式3:对T0和T1大不相同。

若将T0设置为模式3,则TL0和TH0被分为两个相互独立的8位计数器。定时器T1无工作模式3状态。

模式0:与模式1几乎完全相同,唯一的差别是模式0中,寄存器TL0用5位,TH0用8位。

64、如何运用两个定时/计数器相串联来产生一秒的时钟基准信号。试画出必要的电路部分,并写出程序。(设晶振频率为12MHz,用LED显示秒信号。注:计数器输入端为P3.4(T0)、P3.5(T1)。)

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP ONE

ORG 001BH

LJMP COU

ORG 0030H

MAIN: MOV P1,0FFH

MOV SP,#60H

MOV TMOD,#01100001B

MOV TL0,#0B0H

MOV TH0,#3CH

MOV TL1,#0F6H

MOV TH1,#0F6H

SETB ET0

SETB ET1

SETB EA

SJMP $

ONE: PUSH PSW

PUSH ACC

MOV TL0,#0B0H

MOV TH0,#3CH

CPL P1.1

POP ACC

POP PSW

RETI

COU: PUSH PSW

PUSH ACC

CPL P1.0

POP ACC

POP PSW

RETI

END

65、是非题:在51系列单片机的指令中,既有带借位的减法指令,又有不带借位的减法指令。F

66、用一个定时/计数器加软件计数器的方式,实现一秒的时钟基准信号,试写出程序。(设晶振频率为12MHz,由P1.0口输出秒信号。)

(本程序使用定时器T0,工作模式1。由于晶振频率为12MHz,因此利用定时器T0计时50ms,其初值为3CB0H。利用工作寄存器R7作软件计数器,计数20次。每计时满一秒,就将P1.0口输出信号取反,以输出秒信号。)

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP ONE

ORG 0030H

MAIN: MOV P1,0FFH

MOV SP,#60H

MOV R7,#20

MOV TMOD,#01H

MOV TL0,#0B0H

MOV TH0,#3CH

SETB TR0

SETB ET0

SETB EA

SJMP $

ONE: PUSH PSW

PUSH ACC

MOV TL0,#0B0H

MOV TH0,#3CH

DJNZ R7,LOOP

LOOP: POP ACC

POP PSW

RETI

END

67、单片机89C51的时钟频率为6MHz,若要求定时1ms,定时/计数器工作于模式1,其定时/计数器的初值

为 FE0CH 。

68、是非题:单片机89C51的定时/计数器是否工作可以通过外部中断进行控制。T

69、单片机89C51具有并行通信和串行通信两种通信方式。

70、是非题:并行通信的优点是传送速度高,缺点是所需传送线较多,远距离通信不方便。T

71、是非题:串行通信的优点是只需一对传送线,成本低,适于远距离通信,缺点是传送速度较低。T

72 、串行通信有同步通信和异步通信两种通信方式。

73、在异步通信中,数据的帧格式定义一个字符由4部分组成,即:起始位、数据位、奇偶校验位和停止位。

74、是非题:异步通信中,在线路上不传送字符时保持高电平。T

75、是非题:在异步通信的帧格式中,数据位是低位在前高位在后的排列方式。T

76、是非题:异步通信中,波特率是指每秒传送二进制代码的位数,单位是b/s。T

77、串行通信中,为使设备同步工作,需要通信双方有两个共同的要求,一是

通信双方必须采用统一的编码方式,二是

通信双方必须能产生相同的传送速率。

78、是非题:在89C51的串行通信中,串行口的发送和接收都是对特殊功能寄存器SBUF进行读/写而实现的。T

79、单片机89C51中的串行通信共有 4 种方式,其中方式 0 是用作同步移位寄存器来扩展I/O口的。

80、是非题:在单片机89C51中,串行通信方式1和方式3的波特率是固定不变的。F

81、是非题:在单片机89C51中,读和写的SBUF在物理上是独立的,但地址是相同的。T

82、是非题:单片机89C51一般使用非整数的晶振是为了获得精确的波特率。T

83、是非题:单片机89C51和PC机的通信中,使用芯片MAX232是为了进行电平转换。T

84、设89C51的晶振频率为11.0592MHz,选用定时器T工作模式2作波特率发生器,波特率为2400b/s,且SMOD置0,则定时器的初值为 F4H 。

85、简述89C51串口通信的四种方式及其特点。

方式0:同步移位寄存器输入/输出方式,常用于扩展I/O口。波特率固定为振荡频率的1/12,并不受PCON寄存器中SMOD位的影响。

方式1:用于串行发送或接收,为10位通用异步接口。TXD与RXD分别用于发送与接收数据。收发一帧数据的格式为1位起始位、8位数据位(低位在前)、1位停止位,共10位。波特率由定时器T1的溢出率与SMOD值同时决定。

方式2:用于串行发送或接收,为11位通用异步接口。TXD与RXD分别用于发送与接收数据。收发一帧数据的格式为1位起始位、8位数据位(低位在前)、1位可编程的第9数据位和1位停止位,共11位。波特率取决于PCON中SMOD位的值:当SMOD =0时,波特率为的1/64;当SMOD=1时,波特率为的1/32。

方式3:用于串行发送或接收,为11位通用异步接口。TXD与RXD分别用于发送与接收数据。帧格式与方式2相同,波特率与方式1相同。

86、以下哪种方式的接口总线最少?( C )

A、SPI

B、I2C

C、单总线

D、并行通信

87、是非题:89C51单片机没有SPI接口,只能依靠软件来模拟SPI的操作。T

88、是非题:89C51单片机没有I2C接口,只能依靠软件来模拟I2C的操作。T

89、是非题:在89C51中,当用某两根口线来实现I2C总线的功能时,这两根口线必须接上拉电阻。T

90、是非题:在I2C总线的时序中,首先是起始信号,接着传送的是地址和数据字节,传送完毕后以终止信号结尾。F

91、是非题:在单总线测温器件DS18S20中,每个器件都具有一个唯一的序号。T

键抖动会引起一次按键被误读多次。为了确保CPU对键的一次闭合仅做一次处理,必须去除键抖动。在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。按键的抖动,可用硬件或软件两种方法消除。

93、键盘可分为独立连接式和行列(矩阵)式两类。

键盘可分为编码式和非编码式两类。

94、LED数码管有静态显示和动态显示两种方式。

95、简述LED数码管动态扫描的原理及其实现方式。

动态扫描的原理是利用人的视觉暂留,让人觉得各位LED同时点亮一样。逐位轮流点亮各个LED,每一位保持1ms,在10~20ms 之内再一次点亮,重复不止,就可以实现动态扫描。

96、是非题:在A/D转换器中,逐次逼近型在精度上不及双积分型,但双积分型在速度上较低。T

97、是非题:A/D转换的精度不仅取决于量化位数,还取决于参考电压。T

98、以下哪个是属于单片机系统前向通道的器件?( A )

A、A/D转换

B、D/A转换

C、LED数码管

D、继电器

99、能否把继电器直接接在89C51的某一口线上来用?为什么?

不能。

因为89C51的I/O所提供的电压不足于驱动继电器,必须加一个三极管。

100、简述看门狗的基本原理。

看门狗是通过软件和硬件的方式在一定的周期内监控弹片机的运行状况,如果在规定时间内没有收到来自单片机的清除信号,也就是我们通常说的没有及时喂狗,则系统会强制复位,以保证系统在受干扰时仍然能够维持正常的工作状态

101、简述软件陷阱技术的原理。

软件陷阱就是用一条引导指令强行将捕获的程序引向一个指定的地址,在那里有一段专门对程序出错进行处理的程序,以使程序按既定目标执行。

1.简述堆栈

1.(1)在程序中断或子程序调用时,为了保护返回地址(断点)和保护现场而设立的RAM区

(2)用MOV SP,#STK指令建立堆栈。

(3)存放数据按“后进先出”原则进行。

(4)利用PUSH、POP指令即可进行进栈、出栈操作

14、访问外部存储器时,用 P2和 P0 输出地址,其中P2为高8位P0为低8位。

15、、已知A=88H,执行指令ADD A,#A9H指令后,PSW的P=1,C=1,AC=1,OV=1。

16、MCS-51单片机片内有 5 个中断源,其中 2 个外部中断源。

17、设定T1为计数器方式,工作方式2,则TMOD中的值为 60H(高位为6即可)。

18、若IT1=0,当引脚P3.2为低电平的时候,INT0的中断标志位IE0才能复位。

19、在接口电路中,把已经编址并能进行读写操作的寄存器称为端口。

20、在单片机中,为实现数据的I/O传送,可使用三种控制方式,即无条件传送方式、查询方式和中断方式

21.80C51系列单片机一共有 40 个引脚,其中第9脚是 RES/VPD 引脚。

22.单片机片内RAM低128B可分为一般RAM区、工作寄存区、位寻址区三个区。

23.80C51系列单片机的工作方式包括复位方式、程序执行方式、

节电方式、编程校验方式。

24.单片机的程序执行方式通常又可分为单步执行和连续执行两种工作方式。

25.寄存器PSW中的RS1和RS0的作用是工作寄存器组选择。

26.单片机的基本电路包括时钟电路、复位电路和电源电路。

27.访问外部存储器时,用P2和P0 输出地址,其中P2为高8位,P0 为低8位。

28.单片机复位后一下寄存器的内容是:SP 07H 、PSW 00H 、 PC 0000H 、P1 FFH。

29.单片机的复位方式可分为上电复位和按键复位两种。

30. 80C51系列单片机中EA引脚的作用是片外存储器访问允许控制引脚。

31. 80C51系列单片机在复位端子RST上出现 2 个机器周期以上的高电平,就完成复位操作。

34、MCS-51单片机内有两个 2 位加1定时 / 计数器,可通过编程实现 4 种工作方式。

35.在MCS—51单片机内部RAM中,字节地址范围是20H ~ 2FH的区域称为位寻址而字节地址范围是30H ~ 7FH的一段区域称为字节寻址。

36、MCS—51单片机指令系统中共有111条指令,有六种寻址方式,分别是:立即寻址、寄存器寻址、直接寻址、变址寻址、寄存器间接寻址及相对寻址。

37、+1000110B的反码是 01000110 ;-0110011B的补码是 11001100 。

38、一般的计算机系统都是由__控制总线________、__地址总线________、____数据总线___________三总线结构组成。

39、MCS-51系列单片机内部数据存储器,即内RAM中位寻址区的地址范围是 256B 工作寄存器区的地址范围是

00—1FH 。内R0M中寻址区的地址范围是 00--FF 。

40、单片机汇编语言程序有三种基本结构,分别是:顺序、分支和循环。

41、单片机是一种将 CPU 、存储器和 I/O接口集成在一个芯片中的微型计算机。

2、编制一个循环闪烁灯的程序。有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。画出电路图。(10分)

本程序的硬件连接如图所示。当P1.0输出高电平时,LED灯亮,否则不亮。

其程序如下:

MOV A,#01H ;灯亮初值

SHIFT: LCAIL FLASH ;调闪亮10次子程序

RR A ;右移一位

SJMP SHIFT ;循环

FLASH: MOV R2,#0AH 闪烁10次计数

FLASH1; MOV P1,A ;点亮

LCALL DELAY ;延时

MOV P1,#00H ;熄灭

LCALL DELAY ;延时

DJNZ R2,FLASH1 ;循环

RET

试编写延时2S的子程序,并给出2S时间的得出算式。

AJMP BRT0 ;跳转到BRT0执行中断服务程序

DELAY: MOV TMOD,#01H ;设置T0用于定时,模式1方式

MOV TH0,#3CH ;装入定时初值

MOV TL0,#0B0H

MOV IE,#82H ;T0允许中断

SETB TR0 ;启动T0计数

MOV R0,#14H ;软件计数器R0赋初值

LOOP:SJMP $ ;等待中断

BRT0: DJNZ R0,NEXT ;若未到1s,则转到NEXT

RET ;本延时子程序返回

NEXT: MOV TH0,#3CH ;重装定时器初值

MOV TL0,#0B0H

RETI

2、(16分)MCS-51与ADC0809的连接如下图所示,A/D转换结果依次存放在片外数据存储器40H~47H 单元,单片机和A/D转换器的数据传送间址寄存器采用DPTR。①试确定通道地址;②试用中断方式编写A/D 转换接口程序并写出注释。

(1)78H~7FH

(2)ORG 0000H

START: AJMP MAIN

ORG 0003H

AJMP EXINT0

ORG 0030H ;表示主程序从0030H地址开始

MAIN: MOV R0,#40H ;采样数据存放的首地址

MOV R1,#78H ;IN0通道地地址

MOV R2,#08H ;模拟量通道数

MOVX @R1,A ;启动A/D转换

SETB IT0 ;外部中断0为边沿触发方式

SETB EX0 ;允许外部中断0中断

SETB EA ;开放CPU中断

HERE: SJMP HERE

EXINF0:PUSH PSW 保护现场

CLR RS0

CLSR RS1

MOVX A,@R1 ;读取转换结果

MOV @R0,A ;存放结果

INC R0

INC R1

DJNZ R2,NEXT ;8通道未完,则采取下一通道

CLR EX0 ;采集完毕,则停止中断

SJMP DONE

NEXT: MOVX @R1,A ;启动下一通道A/D转换

DONE: POP PSW

RETI

END

Atmega128外部中断程序

//static unsigned char tel[11]; static unsigned char zz=1; unsigned char ATma[20]; static unsigned char zz0=1; static unsigned char mmm=0; void exteral_interrupt6()//外部中断服务函数初始化 { CLI(); //关闭中断 // DDRE&=~(1<

51单片机独立按键程序查询法和外部中断两种

//以下程序都是在VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。 //程序在关键的位置添加了注释。 //用//11111111111111111代表第一个程序。//2222222222222222222222222代表第二个程序,以此类推 //1111111111111111111111111111111111111111111111111111111111111111111 //1111111111111111111111111111111111111111111111111111111111111111111 /****************************************************************************** * * 实验名: 左右流水灯实验 * 使用的IO : LED使用P2,键盘使用P3.1 * 实验效果: 按下K1键, * 注意: ******************************************************************************* / #include #include #define GPIO_LED P2 sbit K1=P3^1; void Delay10ms( ); //延时10ms /****************************************************************************** * * 函数名: main * 函数功能: 主函数 * 输入: 无 * 输出: 无 ******************************************************************************* / void main(void) { unsigned int i,j; j=0xfe; //1111_1110 while(1) { GPIO_LED=j; if(K1==0) //检测按键K1是否按下 { Delay10ms(); //消除抖动 if(K1==0) {

操作系统实验一中断处理

实习一中断处理 一、实习内容 模拟中断事件的处理。 二、实习目的 现代计算机系统的硬件部分都设有中断机构,它是实现多道程序设计的基础。中断机 构能发现中断事件,且当发现中断事件后迫使正在处理器上执行的进程暂时停止执行,而让操作系统的中断处理程序占有处理器去处理出现的中断事件。对不同的中断事件,由于它们的性质不同,所以操作系统应采用不同的处理。通过实习了解中断及中断处理程序的作用。本实习模拟“时钟中断事件”的处理,对其它中断事件的模拟处理,可根据各中断事件的性质确定处理原则,制定算法,然后依照本实习,自行设计。 三、实习题目 模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序。 [提示]: (1) 计算机系统工作过程中,若出现中断事件,硬件就把它记录在中断寄存器中。中 断寄存器的每一位可与一个中断事件对应,当出现某中断事件后,对应的中断寄存器的某一位就被置成―1‖。 处理器每执行一条指令后,必须查中断寄存器,当中断寄存器内容不为―0‖时,说明有中断事件发生。硬件把中断寄存器内容以及现行程序的断点存在主存的固定单元,且让操作系统的中断处理程序占用处理器来处理出现的中断事件。操作系统分析保存在主存固定单元中的中断寄存器内容就可知道出现的中断事件的性质,从而作出相应的处理。 本实习中,用从键盘读入信息来模拟中断寄存器的作用,用计数器加1 来模拟处理器 执行了一条指令。每模拟一条指令执行后,从键盘读入信息且分析,当读入信息=0 时,表示无中断事件发生,继续执行指令;当读入信息=1 时,表示发生了时钟中断事件,转时钟中断处理程序。 (2)假定计算机系统有一时钟,它按电源频率(50Hz)产生中断请求信号,即每隔20 毫秒产生一次中断请求信号,称时钟中断信号,时钟中断的间隔时间(20 毫秒)称时钟单

ARM中异常中断处理概述

异常中断处理概述 1.ARM中异常中断处理概述 1)在正常程序执行过程中,每执行一条ARM指令,程序计数器寄存器PC的值加4个字 节;每执行一条Thumb指令,程序计数器寄存器PC的值加两个字节.整个过程是顺序执行. 2)通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处 执行; B指令用于执行跳转操作; BL指令在执行跳转操作的同时,保存子程序的返回地址; BX指令在执行跳转操作的同时,根据目标地址的最低位可以将程序状态切换到Thumb状态; BLX指令执行3个操作:跳转到目标地址处执行,保存子程序的返回地址(R15保存在R14中),根据目标地址的最低位可以将程序状态切换到Thumb状态. 3)当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执 行.在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行. 4)在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程 序退出时,要恢复被中断的程序的执行现场.本章讨论ARM体系中的异常中断机制. 2.ARM体系中异常中断种类. ARM体系中的异常中断如下表所示:

3. 中断向量表中指定了各异常中断及其处理程序的对应关系.它通常存放在存储地址的低端.在ARM体系中,异常中断向量表的大小为32字节.其中,每个异常中断占据4个字节大小,保留了4个字节空间. 每个异常中断对应的中断向量表的4 .通过这两种指令,程序将跳转到相应的异常中断处理程序处执行. 当几个异常中断同时发生时,就必须按照一定的次序来处理这些异常中断.在ARM 中通过给各异常中断富裕一定的优先级来实现这种处理次序.当然有些异常中断是不坑能同时发生的,如指令预取中止异常中断和软件中断(SWI)异常中断是有同一条指令的执行触发的,他们是不可能同时发生的.处理器执行某个特定的异常中断的过程中,称为处理器处于特定的中断模式.各异常中断的中断向量地址以及中断的处理优先级如表2所示. 4.异常中断使用的寄存器 各异常中断对应着一定的处理器模式.应用程序通常运行在用户模式下.ARM中的处理器模式如表3所示. 各种不同的处理器模式可能有对应于该处理器模式的物理寄存器组,如表4所示,其中,R13_svc表示特权模式下的R13寄存器,R13_abt表示中止模式下的R13寄存器,其余的各寄存器名称含义类推. 表4 各处理器模式的物理寄存器组

uCOSii中断处理过程详解(一)

一. UCOSII的中断过程简介 系统接收到中断请求后,如果CPU处于开中断状态,系统就会中止正在运行的当前任务,而按中断向量的指向去运行中断服务子程序,当中断服务子程序运行完成后,系统会根据具体情况返回到被中止的任务继续运行,或转向另一个中断优先级别更高的就绪任务。 由于UCOS II是可剥夺型的内核,所以中断服务程序结束后,系统会根据实际情况进行一次任务调度,如果有优先级更高的任务,就去执行优先级更高的任务,而不一定要返回被中断了的任务。 二.UCOSII的中断过程的示意图 三.具体中断过程 1.中断到来,如果被CPU识别,CPU将查中断向量表,根据中断向量表,获得中断服务子程序的入口地址。 2.将CPU寄存器的内容压入当前任务的任务堆栈中(依处理器的而定,也可能压入被压入被中断了的任务堆栈中。

3.通知操作系统将进入中断服务子程序。即:调用OSIntEnter()或OSIntNesting直接 加1。 4.If(OSIntNesting==1){OSTCBCur->OSTCBStrPtr=SP;} //如果是第一层中断,则将堆栈指针保存到被中断任务的任务控制块中 5.清中断源,否则在开中断后,这类中断将反复的打入,导致系统崩贵 6.执行用户ISR 7.中断服务完成后,调用OSIntExit().如果没有高优先级的任务被中断服务子程序激活而进入就绪态,那么就执行被中断了的任务,且只占用很短的时间. 8.恢复所有CPU寄存器的值. 9.执行中断返回指令.

四.相关代码 与编译器相关的数据类型: typedef unsigned char BOOLEAN; typedef unsigned char INT8U; typedef unsigned int OS_STK; //堆栈入口宽度为16 位(一) void OSIntEnter (void)的理解 uCOS_II.H中定义:

中断处理程序设计

课程实验报告 课程名称:汇编语言程序设计 实验名称:实验四 实验时间: 2015-6-16,14:30-17:30 实验地点:南一楼804室 指导教师:李专 专业班级:学号: 姓名: 同组学生: 报告日期: 成绩: 计算机科学与技术学院

一、原创性声明 本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。 特此声明! 学生签字: 日期: 二、评语与成绩评定 1.指导老师评语 2.实验成绩评定 实验完成质量得分(70分)(实验步骤清晰详细深入,实验记录真实完整等)报告撰写质量得分(30分) (报告规范、完整、通顺、 详实等) 总成绩(100分) 指导教师签字: 日期:

目录 1.实验目的 (1) 2.实验内容 (1) 2.1任务一 (1) 2.2任务二 (1) 2.3任务三 (2) 2.4任务四 (2) 3实验过程 (2) 3.1任务一 (2) 3.1.1实验要求 (2) 3.1.2实验结果 (2) 3.2任务二 (4) 3.2.1设计思想及存储分配 (4) 3.2.2程序框图 (5) 3.2.3源程序代码 (6) 3.2.4实验结果 (7) 3.3任务三 (7) 3.3.1源程序代码 (7) 3.3.2实验结果 (11) 3.4任务四 (12) 3.4.1源程序代码 (12) 3.4.2实验结果 (16) 4.实验体会 (16)

1.实验目的 (1) 掌握中断矢量表的概念 (2)掌握中断处理程序设计的技巧 (3)掌握简化段定义、函数调用伪指令 (4)了解Win32程序的编程方法及编译、链接方法 2.实验内容 2.1任务一 用三种方式获取中断类型码10H对应的中断处理程序的入口地址。 要求:(1) 直接运行调试工具(TD.EXE),观察中断矢量表中的信息; (2) 编写程序,用 DOS功能调用方式获取,观察相应的出口参数与(1) 中看到的结果是否相同(使用TD观看即可) (3) 编写程序,直接读取相应内存单元,观察读到的数据与(1)看到的结 果是否相同(使用TD观看即可)。 2.2任务二 编写一个中断服务程序并驻留内存,要求在程序返回DOS操作系统后,键盘的按键A变成了按键B、按键B变成了按键A。 提示:(1) 对于任何DOS程序,不管其采用什么方法获取按键,最后都是通过执行16H号软中断的0号和10H号功能调用来实现的。所以,你只需接 管16H号软中断的0号和10号功能调用并进行相应的处理; (2) 获得一个按键扫描码的方法:在TD中执行16H中断的0号和10H号 功能调用,按相应的键,观察AH中的内容。 资料:16H中断的0号和10H号功能 功能描述:从键盘读入字符 入口参数:AH = 00H——读键盘 = 10H——读扩展键盘 出口参数:AH =键盘的扫描码 AL =字符的ASCII码

单片机外部中断实验(附C语言程序)

单片机外部中断实验(附c程序) 一、实验目的 掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。 。 二、实验内容 8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能: (1)合上、P3.3断开时LED1闪烁 (2)P3.2断开、P3.3合上时LED2闪烁 (3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁 (4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁 试编写C语言和汇编语言程序 使用自然优先级就可以 也可 XO 高级X1低级PX0=1 PX1=0 四、实验电路 五、参考程序(自己完成) C程序: Include Sbit P2_0=P2^0; Sbit P2_1=P2^1; Sbit P3_2=P3^2; Sbit P3_3=P3^3; void delay02s(void) //延时0.2秒子程序 { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); }

Void main { EA=1; EX0=1; EX1=1; ITO=1; IT1=1; PX0=1; PX1=0; While(1); } Void int0(void) interrupt 0 { if(!P3_2) { While(1) { P2_0=1; delay02s(); P2_0=0; delay02s(); } } } Void int1(void) interrupt 2 { if(!P3_3) { While(1) { P2_1=1; delay02s(); P2_1=0; delay02s(); } } }

外部中断0实验程序

51单片机第十四课外部中断0实验 #include #define uchar unsigned char #define uint unsigned int sbit led0=P0^0; unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71,0x00}; unsigned char code smg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78}; //************************************************ //延时函数,在12MHz的晶振频率下 //大约50us的延时 //************************************************ void delay_50us(uint t) { uchar j; for(;t>0;t--) for(j=19;j>0;j--); } //************************************************ //延时函数,在12MHz的晶振频率下 //大约50ms的延时 //************************************************ void delay_50ms(uint t) { uint j; for(;t>0;t--) for(j=6245;j>0;j--); } void main() {

Linux中断处理流程

Linux中断处理流程 先从函数注册引出问题吧。 一、中断注册方法 在linux内核中用于申请中断的函数是request_irq(),函数原型在Kernel/irq/manage.c中定义: int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id) irq是要申请的硬件中断号。 handler是向系统注册的中断处理函数,是一个回调函数,中断发生时,系统调用这个函数,dev_id参数将被传递给它。 irqflags是中断处理的属性,若设置了IRQF_DISABLED (老版本中的SA_INTERRUPT,本版zhon已经不支持了),则表示中断处理程序是快速处理程序,快速处理程序被调用时屏蔽所有中断,慢速处理程 序不屏蔽;若设置了IRQF_SHARED (老版本中的SA_SHIRQ),则表示多个设备共享中断,若设置了IRQF_SAMPLE_RANDOM(老版本中的 SA_SAMPLE_RANDOM),表示对系统熵有贡献,对系统获取随机数有好处。(这几个flag是可以通过或的方式同时使用的) dev_id在中断共享时会用到,一般设置为这个设备的设备结构体或者NULL。devname设置中断名称,在cat /proc/interrupts中可以看到此名称。 request_irq()返回0表示成功,返回-INVAL表示中断号无效或处理函数指针为NULL,返回-EBUSY表示中断已经被占用且不能共享。 关于中断注册的例子,大家可在内核中搜索下request_irq。 在编写驱动的过程中,比较容易产生疑惑的地方是: 1、中断向量表在什么位置?是如何建立的? 2、从中断开始,系统是怎样执行到我自己注册的函数的? 3、中断号是如何确定的?对于硬件上有子中断的中断号如何确定? 4、中断共享是怎么回事,dev_id的作用是? 本文以2.6.26内核和S3C2410处理器为例,为大家讲解这几个问题。 二、异常向量表的建立 在ARM V4及V4T以后的大部分处理器中,中断向量表的位置可以有两个位置:一个是0,另一个是0xffff0000。可以通过CP15协处理器c1寄存器中V位(bit[13])控制。V和中断向量表的对应关系如下: V=0 ~ 0x00000000~0x0000001C V=1 ~ 0xffff0000~0xffff001C arch/arm/mm/proc-arm920.S中 .section ".text.init", #alloc, #execinstr __arm920_setup: ...... orr r0, r0, #0x2100 @ ..1. ...1 ..11 (1) //bit13=1 中断向量表基址为0xFFFF0000。R0的值将被付给CP15的C1.

外部中断详解

由于不少同学们,学习51单片机到了中断课程的时候,就开始进入一知半解的状态了,为此,开题一篇,以供大家搞明白,中断这回事。 我们还是用清晰点的逻辑来分析,围绕这四个部分来介绍,当然重点在于3和4部分。通篇我会以让初学者都能看懂的语言来说明。如果有专业一点的术语名词,我也尽量用简单易懂的描述。 注:本文旨在让大家理解什么是中断和怎么去设置。具体的东西有些考虑到深浅问题,则跳过不讲。如需了解,可自行查询资料 1.什么是中断? 2.为什么要有中断? 3.中断怎么触发? 4.怎么设置中断? 什么是中断? 举个老生常谈的例子——接电话。 在一个风和日丽的下午,你在电脑前看着视频,突然间,你桌上的手机来电话了,这时候你就该暂停视频,拿起手机接电话。 OK,回到单片机里来,我们之前写程序,都是在main函数里,甚至main 函数里的while(1)里执行我们的程序。这就相当于这个例子中的【看视频】,而【电话响了】这个过程,就相当于产生了中断,而【接电话】就是你在中断里做的事情。

为什么要有中断? 为什么要有中断,再举一个例子好了。 简单来讲,就是一些程序我们平时不执行,但到了某个特殊时刻,我们才去执行。所以我们就让这个特殊时刻产生一个中断,这时候,就跳去了我们特殊时刻才执行的函数里了。 什么情况会触发中断? 那么,我们什么情况下,单片机才会识别到中断,或者说,什么情况下,单片机才会跳入我们中断的函数里呢? 简单来讲,我们的中断大致分为三种,外部中断、定时器中断、串口中断。这三种的触发方式不一样。 外部中断:

顾名思义,就是单片机外部出现了一定的情况,才进入了中断。89c51有两个外部中断,一个是P3.2引脚,一个是P3.3引脚。分别是外部中断0和外部中断1。我们以外部中断0为例,当P3.2这个脚读到一个低电平(0)或者下降沿(由高电平变低电平)的时候,这时单片机自己就识别到了,所以就会自己跳入中断。 定时器中断: 定时器中断不再这详细说明,大致是讲,我们可以设置一个时间(或者叫闹钟),然后这个单片机会开始计时,当到了这个时间点,单片机就会跳入中断。串口中断: 串口中断也不再这赘述,大致是,当单片机的RX引脚接收到信号的时候,会自动进入中断。 怎么设置中断? OK,在了解这些之后,我们就可以开始来写程序,设置一个中断了。所有中断,如果要开启的话,我们就需要对单片机进行一个【初始化设置】,让单片机知道:“哦,你要老子开启外部中断。” 这时候,我们设置的东西,其实就是在设置单片机里的一些特殊功能寄存器。这时候涉及到一个新名词叫做寄存器,我们这么理解寄存器顾名思义他是存放数据的,需要的时候,我就把他拿出来。

C51中断处理过程

C51中断处理过程 3 C51中断处理过程 C51编译器支持在C源程序中直接开发中断过程,因此减轻了使用汇编语言的繁琐工作,提高了开发效率。中断服务函数的完整语法如下: void函数名(void)[模式] [再入]interrupt n [using r] 其中n(0~31)代表中断号。C51编译器允许32个中断,具体使用哪个中断由80C51系列的芯片决定。r(0~3)代表第r组寄存器。在调用中断函数时,要求中断过程调用的函数所使用的寄存器组必须与其相同。"再入"用于说明中断处理函数有无"再入"能力。C51编译器及其对C语言的扩充允许编程者对中断所有方面的控制和寄存器组的使用。这种支持能使编程者创建高效的中断服务程序,用户只须在C语言下关心中断和必要的寄存器组切换操作。例3 设单片机的fosc=12MHz,要求用T0的方式1编程,在P1.0脚输出周期为2ms的方波。例3 设单片机的fosc=12MHz,要求用T0的方式1编程,在P1.0脚输出周期为2ms的方波。用C语言编写的中断服务程序如下: #include sbit P1_0=P1^0; void timer0(void)interrupt 1 using 1 { /*T0中断服务程序入口*/ P1_0=!P1_0; TH0=-(1000/256); /*计数初值重装*/ TL0=-(1000%256); } void main(void) { TMOD=0x01; /*T0工作在定时器方式1*/ P1_0=0; TH0=-(1000/256); /*预置计数初值*/ TL0=-(1000%256); EA=1; /*CPU开中断*/ ET0=1; /*T0开中断*/ TR0=1; /*启动T0*/ do{}while(1); } 在编写中断服务程序时必须注意不能进行参数传递,不能有返回值。 8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个串口输入/输出中断),两级中断优先级;128 字节内置RAM;独立的 64K 字节可寻址数据和代码区。中断发生后,MCU 转到 5 个中断入口处之一,然后执行相应的中断服务 处理程序。中断程序的入口地址被编译器放在中断向量中,中断向量位于程序代码段的最低地址处,注意这里的串口输入/输出中断共用一个中断向量。8051的中断向量表如下: 中断源中断向量 --------------------------- 上电复位 0000H 外部中断0 0003H 定时器0 溢出 000BH 外部中断1 0013H 定时器1 溢出 001BH

单片机外部中断实验(附C语言程序)复习进程

单片机外部中断实验(附C语言程序)

单片机外部中断实验(附c程序) 一、实验目的 掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。 。 二、实验内容 8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能:(1)合上、P3.3断开时LED1闪烁 (2)P3.2断开、P3.3合上时LED2闪烁 (3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁 (4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁 试编写C语言和汇编语言程序 使用自然优先级就可以 也可 XO 高级X1低级PX0=1 PX1=0 四、实验电路 五、参考程序(自己完成)

C程序: Include Sbit P2_0=P2^0; Sbit P2_1=P2^1; Sbit P3_2=P3^2; Sbit P3_3=P3^3; void delay02s(void) //延时0.2秒子程序{ unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); } Void main { EA=1; EX0=1; EX1=1 ; ITO=1 ; IT1=1 ; PX0=1; PX1=0; While(1) ; } Void int0(void) interrupt 0 { if(!P3_2) { While(1) { P2_0=1; delay02s(); P2_0=0; delay02s(); } } } Void int1(void) interrupt 2 { if(!P3_3) {

arm中断处理流程

ARM编程特别是系统初始化代码的编写中通常需要实现中断的响应、解析跳转和返回等操作,以便支持上层应用程序的开发,而这往往是困扰初学者的一个难题。中断处理的编程实现需要深入了解ARM内核和处理器本身的中断特征,从而设计一种快速简便的中断处理机制。需要说明的是,具体的上层高级语言编写的中断服务函数不在本文的讨论范围之内。 ARM处理器异常中断处理概述 当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。在进入异常中断处理程序时,要保存被中断的程序的执行现场。从异常中断处理程序退出时,要恢复被中断的程序的执行现场。ARM体系中通常在存储地址的低端固化了一个32字节的硬件中断向量表,用来指定各异常中断及其处理程序的对应关系。当一个异常出现以后,ARM微处理器会执行以下几步操作: 1)保存处理器当前状态、中断屏蔽位以及各条件标志位; 2)设置当前程序状态寄存器CPSR中相应的位; 3)将寄存器lr_mode设置成返回地址; 4)将程序计数器(PC)值设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。 在接收到中断请求以后, ARM处理器内核会自动执行以上四步,程序计数器PC总是跳转到相应的固定地址。从异常中断处理程序中返回包括下面两个基本操作: 1)恢复被屏蔽的程序的处理器状态; 2)返回到发生异常中断的指令的下一条指令处继续执行。 当异常中断发生时,程序计数器PC所指的位置对于各种不同的异常中断是不同的,同样,返回地址对于各种不同的异常中断也是不同的。例外的是,复位异常中断处理程序不需要返回,因为整个应用系统是从复位异常中断处理程序开始执行的。 支持中断跳转的解析程序 解析程序的概念和作用 如前所述,ARM处理器响应中断的时候,总是从固定的地址开始的,而在高级语言环境下开发中断服务程序时,无法控制固定地址开始的跳转流程。为了使得上层应用程序与硬件中断跳转联系起来,需要编写一段中间的服务程序来进行连接。这样的服务程序常被称作中断解析程序。 每个异常中断对应一个4字节的空间,正好放置一条跳转指令或者向PC寄存器赋值的数据访问指令。理论上可以通过这两种指令直接使得程序跳转到对应的中断处理程序中去。但实际上由于函数地址值为未知和其它一些问题,并不这么做。这里给出一种常用的中断跳转流程:

单片机外部中断详解及程序

单片机外部中断详解及程序 单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来。在不需要对它进行调校的时候它不需要外部干预,自主封闭地运行。如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。但事情往往不会如此简单,在时钟刚刚上电、或时钟需要重新校准、甚至时钟被带到了不同的时区的时候,就需要重新调校时钟,这时就要求时钟就必须具有调校功能。因此单片机系统往往又不会是一个单纯的封闭系统,它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原由。 实际上在第二个示例演示中,就已经举过有按键输入的例子了,只不过当时使用的方法并不是外部中断,而是用程序查询的方式。下面就用外部中断的方法来改写一下第二个示例中,通过按键来更改闪烁速度的例子(第二个例子)。电路结构和接线不变,仅把程序改为下面的形式。 #include ;

unsigned int t=500; //定义一个全局变量t,并设定初始值为500次 //===========延时子函数,在8MHz晶振时约 1ms============= void delay_ms(unsigned int k) { unsigned int i,j; for(i=0;i

异常及中断处理

一.ARM异常中断处理概述 1、中断的概念 中断是一个过程,是CPU在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程。因硬件原因引起的中断过程的出现是不可预测的,即随机的,而软中断是事先安排的。 2、中断源的概念 我们把可以引起中断的信号源称之为中断源。 3、中断优先级的概念 ARM处理器中有7种类型的异常,按优先级从高到低的排列如下:复位异常(Reset)、数据异常(Data Abort)、快速中断异常(FIQ)、外部中断异常(IRQ)、预取异常(Prefetch Abort)、软件中断(SWI)和未定义指令异常(Undefined instruction) 二.ARM体系异常种类 下面是ARM的7种异常 当异常发生时,处理器会把PC设置为一个特定的存储器地址。这一地址放在被称为向量表(vector table)的特定地址范围内。向量表的入口是一些跳转指令,跳转到专门处理某个异常或中断的子程序。 当异常产生时, ARM core: 拷贝CPSR 到SPSR_ 设置适当的CPSR 位: 改变处理器状态进入ARM 状态 改变处理器模式进入相应的异常模式 设置中断禁止位禁止相应中断(如果需要) 保存返回地址到LR_ 设置PC 为相应的异常向量 返回时, 异常处理需要: 从SPSR_恢复CPSR 从LR_恢复PC Note:这些操作只能在ARM 态执行. 当异常发生时,分组寄存器r14和SPSR用于保存处理器状态,操作伪指令如下。 R14_ = return link SPSR_ = CPSR

51单片机外部中断实验

实验6 外部中断实验 (仿真部分) 一、实验目的 1. 学习外部中断技术的基本使用方法。 2. 学习中断处理程序的编程方法。 二、实验内容 在INT0和INT1上分别接了两个可回复式按钮,其中INT0上的按钮每按下一次则计数加一,其中INT1上的按钮每按下一次则计数减一。P1.0~ P1.3接LED灯,以显示计数信号。 三、实验说明 编写中断处理程序需要注意的问题是: 1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。 2.必须在中断处理程序中设定是否允许中断重入,即设置EX0位。 3.INT0和INT1分别接单次脉冲发生器。P1.0~ P1.3接LED灯,以查看计数信号. 四、硬件设计 利用以下元件:AT89C51、BOTTON、CAP、CAP-POL、CRYSTAL、RES、NOT、LED-Yellow。设计出如下的硬件电路。晶振频率为12MHz。 五、参考程序框图 开始 设置有关中断控制寄存器 开外中断INT0、INT1 设置P1.0~ 3初始状态 显示循环等待中断 INT0中断入口 计数加一 保护现场 恢复现场 中断返回

主程序框图INT0中断处理程序框图 实验6 外部中断实验 (实验箱部分) 1.实验目的 认识中断的基本概念 学会外部中断的基本用法 学会asm和C51的中断编程方法 2.实验原理 图按键中断 【硬件接法】 P1.1控制LED,低电平点亮 P3.3/INT1接按键,按下时产生低电平 【运行效果】 程序工作于中断方式,按下按键K2后,LED点亮,1.5秒后自动熄灭。 8051单片机有/INT0和/INT1两条外部中断请求输入线,用于输入两个外部中断源的中断请求信号,并允许外部中断源以低电平或下降沿触发方式来输入中断请求信号。/INT0和/INT1中断的入口地址分别是0003H和0013H。 TCON寄存器(SFR地址:88H)中的IT0和IT1位分别决定/INT0和/INT1的触发方式,置位时为下降沿触发,清零时为低电平触发。实际应用时,如果外部的中断请求信号在产生后能够在较短时间内自动撤销,则可以选择低电平触发。在中断服务程序里要等待其变高后才能返回主程序,否则会再次触发中断,产生不必要的麻烦。 如果外部的中断请求信号产生后可能长时间后才能撤销,则为了避免在中断服务程序里长时间无谓等待,可以选择下降沿触发。下降沿触发是“一次性”的,每次中断只会有1个下降沿,因此中断处理程序执行完后可以立即返回主程序,而不必等待中断请求信号恢复为高电平,这是一个重要的技巧。 3. 实验步骤 ●参考实验例程,自己动手建立Keil C51工程。注意选择CPU类型。Philips半导体的 P89V51RB2。 ●编辑源程序,编译生成HEX文件。 ●ISP下载开关扳到“00”,用Flash Magic软件下载程序HEX文件到MCU BANK1,运行。 运行Flash Magic软件。各步骤操作如下:

中断概述和中断处理过程

第23课中断概述可屏蔽中断处理过程 教学目的:了解中断的相关概念,掌握可屏蔽中断的处理过程。 教学重点:中断响应过程、中断向量和中断服务过程。 教学难点:中断向量。 授课内容: 一、中断概念 1.中断源 2.中断响应 3.中断向量表 4.中断优先级 5.中断屏蔽 二、中断分类 8086/8088有一个强有力的中断系统,可以处理256种不同的中断,256种中断可以分为两大类:外部中断和内部中断。 1.外部中断 也称为硬件中断,是由外部的硬件产生的。分成不可屏蔽中断请求和可屏蔽中断请求。 2.内部中断 又称为软件中断。通常有三种情况引起:由中断指令INT引起的中断;由CPU 的某些运算错误引起的中断;由调试程序debug设置的中断。 三、CPU响应中断过程 可屏蔽中断处理的过程一般分成几步:中断请求;中断响应;保护现场;转入执行中断服务子程序;恢复现场和中断返回。 CPU响应中断要有三个条件: 外设提出中断申请 本中断位未被屏蔽 中断允许 CPU在响应外部中断,并转入相应中断服务子程序的过程中,自动依次做以

下工作: (1)从数据总线上读取中断类型号,将其存入内部暂存器。 (2)将标志寄存器PSW的值入栈。 (3)将PSW中的中断允许标志IF和单步标志TF清0,以屏蔽外部其它中断请求,及避免CPU以单步方式执行中断处理子程序。 (4)保护断点。 (5)根据中断类型号到中断向量表中找到中断向量,转入相应中断服务子程序。 (6)中断处理程序结束以后,从堆栈中依次弹出IP、CS和PSW,然后返回主程序断点处,继续执行原来的程序。 四、中断向量表 寻找中断源可以用查询中断及矢量中断两种方法。 1.中断向量表 又称中断服务程序入口地址表。8086允许处理256种类型中断,对应类型号为0~FFH。 2.中断向量的设置 供用户使用的中断类型号,它可由用户定义为软中断,由INT n指令引用;也可通过1NTR端直接接入,或通过中断控制器8259A引入可屏蔽硬件中断。有两种方法可将中断服务程序的入口地址置入中断类型号n所对应的中断向量表中。一种方法用指令来设置,另一种方法利用DOS功能调用来设置。 设置中断向量:预置AL=中断类型号 DS:DX=中断服务程序入口地址 AH=25H 执行: INT 21H 取中断向量:预置AL=中断类型号 AH=35H 执行: INT 21H 返回: ES:BX=中断服务程序人口地址 3.中断类型号的获取

AVR单片机外部中断范例程序

外部中断范例 编写:阿莫(armok) / 代码设计:HJJourAVR / 2005-09-04 / https://www.360docs.net/doc/0017012106.html, 1. 开发语言 本范例使用 WinAVR/GCC 20050214 版本开发 2. 范例描述 按下按键0,LED0亮。直到松手,其他按键才能起作用 按下按键1,LED1亮。其他按键随时都能起作用 按下按键2,LED0/1都熄灭。直到松手,其他按键才能起作用 3. 电路图设计: 为简化线路设计,使用了本网站的ATmega16功能小板。

. 4. 代码设计与说明: /************************************************* **** AVR 外部中断使用范例 *** **** *** **** 策划、整理与测试:阿莫(armok) *** **** 代码设计: HJJourAVR *** **** 编译器:WINAVR20050214 *** **** https://www.360docs.net/doc/0017012106.html, 2005.8.31 *** *************************************************/ /* 本程序简单的示范了如何使用ATMEGA16的外部中断 中断的设置 按键的简单延时防抖动 中断的嵌套 变量在中断中的应用---如果变量会在中断服务程序中被修改,须加volatile限定 本范例可直接使出厂状态的新M16芯片,无需对芯片的熔丝位进行配置。 出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器 关于外部中断作唤醒源的条件:(将会在后面的电源管理和睡眠模式范例中应用) 而INT0和INT1的边沿触发中断只能在空闲模式起作用,即 CLKI/O不停止 INT0和INT1的低电平中断,INT2在各种睡眠模式下都可以,因为这几种中断工作于异步模式,不需要时钟驱动 官方的M16中文手册对外部中断的描叙存在多处错误,请参考英文原版。*/

linux内核--中断处理程序

linux内核--中断处理程序 https://www.360docs.net/doc/0017012106.html,/linux-unix/1440113.html一个设备的中断处理程序是它设备驱动程序的一部分--设备驱动程序是用于对设备进行管理的内核代码。中断处理程序与其他内核函数的真正区别在于,中断处理程序是被内核调用来响应中断的,而它们运行于我们称之为中断上下文的特殊上下文中。中断与定时器:中断的概念:指CPU在执行过程中,出现某些突发事件急待处理,CPU暂停执行当前程序,转去处理突发事件,处理完后CPU又返回原程序被中断的位置继续执行中断的分类:内部中断和外部中断内部中断:中断源来自CPU内部(软件中断指令、溢出、触发错误等)外部中断:中断源来自CPU外部,由外设提出请求屏蔽中断和不可屏蔽中断:可屏蔽中断:可以通过屏蔽字被屏蔽,屏蔽后,该中断不再得到响应不可屏蔽中断:不能被屏蔽向量中断和非向量中断:向量中断: CPU通常为不同的中断分配不同的中断号,当检测到某中断号的中断到来后,就自动跳转到与该中断号对应的地址执行非向量中断:多个中断共享一个入口地址。进入该入口地址后再通过软件判断中断标志来识别具体哪个是中断也就是说向量中断由软件提供中断服务程序入口地址,非向量中断由软件提供中断入口地址/*典型的非向量中断首先会判断中断源,然后调用不同中断源的中断处理

程序*/irq_handler(){...int int_src = read_int_status();/*读硬件 的中断相关寄存器*/switch(int_src){//判断中断标志case DEV_A:dev_a_handler();break;case DEV_B:dev_b_handler();break;...default:break;}...}定时器中断原理:定时器在硬件上也以来中断,PIT(可编程间隔定时器)接收一个时钟输入,当时钟脉冲到来时,将目前计数值增1并与已经设置的计数值比较,若相等,证明计数周期满,产生定时器中断,并复位计数值。如下图所示:Linux中断处理程序架构:Linux将中断分为:顶半部(top half)和底半部(bottom half)顶半部: 完成尽可能少的比较紧急的功能,它往往只是简单的读取寄存器中的中断状态并清除中断标志后就进行“登记中断”(也就是将底半部处理程序挂在到设备的底半部执行队列中)的工作特点:响应速度快底半部: 中断处理的大部分工作都在底半部,它几乎做了中断处理程序的所有事情。特点:处理相对来说不是非常紧急的事件小知识:Linux中查看/proc/interrupts文件可以获得系统中断的 统计信息。如下图所示:第一列是中断号第二列是向CPU产生该中断的次数介绍完相关基础概念后,让我们一起来探讨一下Linux中断编程Linux中断编程:内核维护了一个中断信号线的注册表,该注册表类似于I/O端口的注册表。驱动模块在使用中断前要先请求一个中断通道(或者中断请求IRQ),然后在使用后释放该通道。在头文件

相关文档
最新文档