建材秒知道
登录
建材号 > 设计 > 正文

外中断程序设计

传统的飞机
舒适的黑夜
2023-03-03 13:29:09

外中断程序设计

最佳答案
高贵的小蝴蝶
优美的手套
2025-08-26 13:13:38

中断允许寄存器 IE EA × × ES ET1 EX1 ET0 EX0 (1)EA:总中断允许开关。它是个总开关,凡是要设置中端都得先通过它。EA=1,开放所有的中断;EA=0,则所有中断都被禁止。(2)ES:串行口中断控制位。ES=1,允许中断;ES=0,禁止中断。(3)ET1:定时/计数器 1 中断控制位。ET1=1,允许中断;ET1=0,禁止中断。(4)EX1:外中断 1 中断控制位。EX1=1,允许中断;EX1=0,禁止中断。(5)ET0:定时器 0 中断控制位。ET0=1,允许中断;ET0=0,禁止中断。(6)EX0:外中断 0 中断控制位。EX0=1,允许中断;EX0=0,禁止中断。所以IE=0x88,允许定时器1中断,开总中断

最新回答
美好的金针菇
洁净的芹菜
2025-08-26 13:13:38

你这里大概50毫秒中断一次,所以,第一个if是判断20次中断是否到(也就是20*50=1000ms),到了的话,重新开始计数,而秒计数(num)加1,第二个if是判断60秒是否到。

外部中断有两种触发方式,取决于itx,如果为0则为低电平触发,为1则为下降沿触发。按一下键其实是产生一个下降沿(或低电平)来触发中断。

紧张的灰狼
大胆的羽毛
2025-08-26 13:13:38
不知道你要显示几位,我写了个1位显示的。前提是共阴数码LED且一端已接地,由P1口控制。

ORG 0000H

LJMP START

ORG 0003H

LJMP INTT0

ORG 0600H

START: SETB EA

SETB EX0 打开外部中断0

CLR IT0 令中断0为电平触发

MOV @R0,#00H

DISPLAY: MOV DPTR,#TAB给字形表的初地址

MOV A,R0将要显示的数给A

MOVC A,@A+DPTR 在字形表中取数放到A

MOV P1,A 假设是P1口输出要显示的数据把A放到P1中

SJMP DISPLAY 循环显示等待中断

INTT0:INC @R0 ;中断中有按键着加1

RETI

TAB:DB 3FH,06H,5BH,4FH,66H 字形表

DB 6DH,7DH,07H,7FH,6FH

DB 77H,7CH,39H,5EH,79H

END

妩媚的乌冬面
雪白的冷风
2025-08-26 13:13:38
外部中断0设置为低电平触发,去掉while循环后一直按下按键实际代码为

delay()

p1=0xfe

delay()

ex0=0

p1=_crol_(p1,1)

delay()

ex0=1

p1=0x00

一直重复.

之前的代码进入中断后会一直循环,并不会退出中断。正确做法中断应该改为:

void

tx0()

interrupt

0

using

0

{

unsigned

char

i

delay()

p1=0xfe

delay()

ex0=0

while(1)

{

p1=_crol_(p1,1)

delay()

if(p3&0x04)

//判断是否松开中断0的按键

{

break

}

}

ex0=1

p1=0x00

}

贤惠的水蜜桃
悲凉的煎蛋
2025-08-26 13:13:38
定时器1 1MS中断一次,5次是5ms,乘200就是1秒种,其初值由晶振频率决定,有计算软件

当然,也可以中断10次或20次,频率判断更准确,但响应速度慢了

1600或800方波接入定时器/计数器0的外部输入引脚上,好像是P3.4

程序如下:

void

init()//初始化设置

{

TMOD=0x15//定时器0作为计数器,定时器1作为定时器用

TH0=.0//计数器清0

TL0=0

EA=1//开总中断

ET1=1//允许定时器1中断

TH1=......

TL1=.......

TR0=1//启动计数器

TR1=1//启动定时器

aa=0

}

void

main()//主程序很简单

{

init()//初始化

while(1)//循环程序

{

dd=bb*256+cc//

5ms的计数值

ee=200*dd//换算为1秒钟的计数值

if((ee>750)&&(ee<850))

{

P3.5=0

}

if((ee>1550)&&(ee<1650))

{

P3.5=1

}

}

}

void

timer1()interrupt

3//注意:定时器1的中断序号为3

{

aa++

TH1=.....

TL1=.....

if(aa==5)//中断5次,共5ms

{

TR0=0//暂停计数

aa=0

bb=TH0//读出计数器数据

cc=TL0

TL0=0//计数器清0

TH0=0

TR0=1//重新启动计数器

}

}

冷静的宝贝
狂野的手机
2025-08-26 13:13:38
中断分外部中断和内部定时计数中断。外部中断需触发单片机相应管脚为低电平。内部计数或定时中断,只需设定时间,到时间就中断。

基本步骤是:设置中断启动方式IE,设置中断优先级IP,设定触发方式TCON,定时计数中断还需设置中断模式TMOD、计数的高八位TH0及低八位TL0数值、打开中断开关TR。

后面就是中断子程序

void 文件名(void)interrupt (中断编号)

{

.....

}

可靠的电源
美满的小懒虫
2025-08-26 13:13:38
#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

uchar keyval

uchar led1=0xfe,led2=0x55,led3=0x0f

sbit key=P1^0

void t0isr() interrupt 1

{

TH0=(65536-60000)/256

TL0=(65536-60000)%256

switch(keyval)

{

case 1:

P0=led1

led1=_crol_(led1,1)

break

case 2:

P0=led2

led2=~led2

break

case 3:

P0=led3

led3=~led3

break

default:break

}

}

main()

{

TMOD=0x01

TH0=(65536-60000)/256

TL0=(65536-60000)%256

TR0=1

ET0=1

EA=1

while(1)

{

if(key==0)

{

while(key==0)

keyval++

keyval%=4

}

}

}

粗暴的汉堡
沉静的御姐
2025-08-26 13:13:38

#include<reg51.h>

sbit shiwei=P2^0//定义接口

sbit gewei=P2^1

unsigned char code table[]={//数码显示表

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f}

void msdelay()//5 ms 延时

{

int x,y

for(x=(65536-15)%256xx--)

{

for(y=(65536-15)/256yy--)

}

}

void init()//初始化

{

TMOD=0x11

PX0=1

TH0=(65535-50)/256

TL0=(65535-50)%256

TH1=(65535-100)/256

TL1=(65535-100)%256

EX0=1

ET0=1

ET1=1

EA=1

TR1=1

}

unsigned char passtime=0//全局变量

unsigned char timecount=0

main()

{

unsigned char count

count=0

init()

while(P3^0!=1)

msdelay()

if(P3^0==1)//确定开始或者结束

{count++

if(count%2)

{TR0=1}

else

{TR0=0}

}

}

void clear() interrupt 0//清零

{

TR0=0

timecount=0

passtime=0

}

void timer() interrupt 2//50ms 定时

{

timecount++

if(timecount==20)

{

timecount=0

passtime++//50*20=1s

}

TH0=(65535-50)/256

TL0=(65535-50)%256

TR0=1

}

void displaytimer() interrupt 2//用于数码管的两位显示,十位和各位

{

TH1=(65535-100)/256

TL1=(65535-100)%256

shiwei=0//动态显示,其中P2.0=0十位选通 P2.1=各位选通

gewei=1

P0=table[passtime/10]//十位

msdelay()

msdelay()

msdelay()

shiwei=1

gewei=0

P0=table[passtime%10]//各位

msdelay()

msdelay()

msdelay()

TR1=1

}

大胆的小白菜
雪白的自行车
2025-08-26 13:13:38
程序直接控制传送方式程序中断控制方式存贮器直接存取方式

1. 写出指令,将一个字节输出到端口25H。

2. 写出指令,将一个字从端口1000H输入。

3. 写出指令,分两次将1000从端口1000H输出,先输出低字节,后输出高字节。

4. 下列指令经汇编后各是几个字节的指令?

IN AL 52H; OUT 0CH, AL

IN AX DX; OUT DX, AX

5. 编写一段指令序列,功能是轮流交替地测试分别属于两个设备的两个状态寄存器。当测知某个状态寄存器的位0是1,则从这个状态寄存器对应的设备读入数据。每读入一个字节对这个状态寄存器进行一次测试。如果测得位3为1,则停止这个设备的读入,再进入轮流测试状态。假设两个状态寄存器的端口地址分别是300H和308H,两个输入数据端口分别是302H和30AH,输入数据存入数据存贮器,开始地址分别是BUFF1和BUFF2。

6.当采用 输入操作情况下,除非计算机等待数据,否则无法传送数据给计算机。

A) 程序查询方式

B) 中断方式

C) DMA方式

7.在微型机接口中,设备地址选片的方法有哪几种?如何选用?

8. Intel 80x86CPU可以访问的I/O空间有:

A) 4GB B) 1MB C) 64KB D) 1KB

9. 8086 CPU 有 ① 条地址总线,可形成② 的存贮器地址空间,可寻址范围为 ③ 地址总线中的 ④ 条线可用于I/O寻址,形成 ⑤ 的输入输出地址空间,地址范围为 ⑥ PC机中用了 ⑦ 条地址线进行I/O操作,其地址空间为

⑧ ,可寻址范围为 ⑨。

10.存贮器的每个字节单元占存贮器地址空间的一个地址;相应的,输入输出端口占 地址空间的 。

11.实现主机与外设之间同步需要解决的基本问题有二,一为,另一为。

12.主机与外设之间实现数据的输入输出的基本方式有 ,和 。

13.对于微机而言,任何新增的外部设备,最终总是要通过与主机相接。

14.在主机板外开发一些新的外设接口逻辑,这些接口逻辑的一侧应与 相接,另一侧与 相接。

15.I/O接口的含义,从硬件来说,包括, ,;从软件来说,可以理解为和 。

16.对于用户而言,接口设计的任务就是开发出和。

17.需要靠在程序中排入I/O指令完成的数据输入输出方式有 。

(A)DMA (B)无条件程序直接传送

(C)程序查询控制式 (D)中断方式

18.系统总线是通过 与外设的接口逻辑相连接的,所有 是并联的。

19.8086CPU用 指令从端口读入数据,用OUT指令 。

20.在下列指令中,能使80x86CPU对I/O端口进行读/写访问的是:

A) 中断指令 B) 串操作指令 C) 输入/输出指令D) MOV指令

21.在IBM PC机接口开发中用到某一大规模集成电路芯片,其内部占16个I/O端口地址,分配占用300~30FH,请设计一个片选信号CS形成电路。

22.IBM PC系统中,如果AEN信号未参加I/O端口地址译码,将出现什么问题?在没有DMA的某微机系统中,是否存在一样的问题?

23. 利用三态门(74LS244)作为输入接口,接口地址规定为04E5H,试画出其与8086最小系统总线的连接图。

24. 利用三态门输出的锁存器(74LS244)作为输出接口,接口地址规定为E504H,试画出其与8086最大系统总线的连接图。若上题中输入接口的bit 4和bit 7同时为0时将DATA为首地址的十个内存数据连续由输出接口输出;若不满足条件则等待,试编写相应的程序段。

25.什么是中断?PC机中有那些种类的中断?借助中断机制可实现哪些操作功能?

26.中断向量表的功能是什么?详述CPU利用中断向量表转入中断服务程序的过程。

27.简述实模式下可屏蔽中断的中断响应过程?

28.如果利用中断方式传输数据,数据是如何传输的?中断结构起了什么作用?

29. 根据中断过程的要求设计的一个中断系统,大致需要考虑哪些问题?

30. 类型14H的中断向量(即中断服务程序的32位入口地址)存在存储器的哪些单元里?

31.给定(SP)=0100, (SS)=0300, (PSW)=0240,以及存储单元的内容(00020)=0040, (00022)=0100,在段地址为0900及偏移地址为00A0的单元中有一条中断指令INT 8,试问执行INT 8指令后,SP、SS、IP、PSW的内容是什么?栈顶的三个字是什么?

32. 8259初始化编程是如何开始的?顺序如何?

33. 设某微机系统要管理64级中断,问组成该中断机构时需 片8259。

(A) 8片 (B) 10片 (C) 9片 (D) 64片

34. 完全嵌套的优先级排序方式的规则是什么?用哪些操作命令且在什么时候设置命令能保证这种优先级排序规则实现?

35. 如设备D1、D2、D3、D4、D5按完全嵌套优先级排列规则。设备D1的优先级最高,D5最低。若中断请求的次序如下所示,试给出各设备的中断处理程序的次序。假设所有的中断处理程序开始后就有STI指令,并在中断返回之前发出结束命令

(1)设备3和4同时发出中断请求

(2)在设备3的中断处理程序完成之前,设备2发出中断请求

(3)在设备4的中断处理程序完成之后,设备5发出中断请求

(4)以上所有中断处理程序完成并返回主程序后,设备1、3、5同时发出中断请求在设备3的中断处理程序完成之前,设备2发出中断请求

36.初始化时设置为非自动结束方式,那么在中断服务程序将结束时必须设置什么操作命令?如果不设置这种命令会发生什么现象?

37.初始化时设置为自动结束方式,那么中断嵌套的深度可否控制?

38.中断服务程序结束时,用RETF指令代替IRET指令能否返回主程序?这样做存在什么问题?

39.总结一下,在哪些情况下需用CLI指令关中断?在哪些情况下需用STI指令开中断?

40. 按中断源处于CPU内部还是外部,中断可分为外部中断和 两类,前者又分为

和。

41. 一次程序中断大致可分为: (1) , (2) , (3) , (4) , (5) 等过程。

42. 采用DMA方式传送数据时,每传送一个数据就要占用 的时间

A) 一个指令周期

B) 一个机器周期

C) 一个存储周期

D) 一个总线周期

43. DMA方式数据传送与程序控制数据传送相比较,有何不同之处?

44. 通道程序是由 组成

A) I/O指令

B) 通道控制字(或称通道指令)

C) 通道状态字

45. 在以DMA方式传送数据的过程中,由于没有破坏 和的内容,所以一旦数据传送完毕,主机可以立即返回原程序。

46.如果认为CPU等待设备的状态信号是处于非工作状态(即踏步等待),那么,在下面几种主机与设备数据传送方式中, (1) 主机与设备是串行工作的, (2) 主机与设备是并行工作的, (3) 主程序与外围设备是并行运行的

A) 程序查询方式

B) 中断方式

C) DMA方式

47.系统总线的发展过程是:从 系统总线开始,经历了 总线,又发展为 总线和 总线。

48. RS-232接口是 (1) 接口,它通常用对 (2) 连接和 (3) 之间的连接,AS-232标准规定采用 (4) 逻辑,其逻辑 “1”电平在 (5) 的范围内,逻辑 “0”电平在 (6) 的范围之内

49.比较8253的方式0与方式4、方式1与方式5有什么区别?

50.IBM PC/XT系统中8253的计数器0用于产生实时时钟中断请求信号,中断服务程序如教材第369页程序所示。请问8253的计数器0被初始化为什么状态?

51.如50题所述,实时时钟中断服务程序中有INT 1CH 指令为用户提供一个出入口,请你编一程序利用这一出入口在屏幕上每隔大约1s更新并显示时间。

52.通过8253的计数器0产生中断请求信号,欲在可设最大初值范围内延长产生中断的时间,无效的方法是:

A) 初始化时使CR0尽量大;

B) 在OUT0变高之前重置初值;

C) 在OUT0变高之前在GATE0加一触发信号;

D) 降低加在CLK0端的信号频率

53.已知某可编程接口芯片中计数器的口地址为40H,计数频率为2MHz,该芯片的控制字为8位二进制数,控制字寄存器的口地址为43H,计数器达到0值的输出信号用作中断请求信号,执行下列程序后,中断请求信号的周期是ms。

MOV AL,00110110B

OUT 43H, AL

MOV AL, 0FFH

OUT 40H, AL

OUT 40H, AL

54.若8253芯片可利用8086的外设接口地址D0D0H~D0DFH,试画出电路连接图,加到8253上的时钟信号为2MHz:

(1)若利用计数器0,1,2分别产生下列三种信号:

① 周期为10us的对称方波

② 每1s产生一个负脉冲

③ 10s后产生一个负脉冲 ;每种情况下,试说明8253如何连接并编写包括初始化在内的程序。

(2)若希望利用8086通过接口控制GATE,当CPU使GATE有效开始,20us后在计数器0的OUT端产生一个正脉冲,试设计完成此要求的硬件和软件。

55.说明8254的六种工作方式?若加到8254上的时钟频率为0.5MHz,则一个计数器的最长定时时间是多少?若要求10分钟产生一次定时中断,试提出解决方案。

56.在IBM PC系统中根据下列不同条件设计接口逻辑,均利用8253,都完成对外部脉冲信号测重复频率的功能。

(1)被测脉冲信号的重复频率在10~1000Hz范围内。

(2)被测脉冲信号的重复频率在0.5~1.5Hz范围内。

(3)被测脉冲信号重复频率在10~100Hz范围内。

(4)被测是间歇脉冲信号,每次有信号时有100个脉冲,重复频率为0.8~1.2MHz间歇频率大约每秒15次,要求测有信号时的脉冲重复频率。

57 判断题

(1)8254芯片不接入扩充槽的系统总线。

(2)IN DST,SRC 指令中,SRC的寻址方式为寄存器方式,DST的寻址方式有直接和间接两种。

(3)从地址为0FEH的端口读一字节的指令可以是IN AL,0FEH;也可以是

MOV DX,0FEH

INAL,DX

(4)向地址为0FE2H的端口输出一字的指令与3)题类似,只是其目的操作数而非源操作数有两种寻址方式。

(5)IN 和OUT指令将影响ZF位。

(6)程序中断方式输入输出的含义是利用CPU响应内中断的能力,用IN和OUT 指令(即程序)来实现数据的输入输出。

(7)系统总线是主机板与外界之间的直接界面,任何一个外设均可直接“挂”到该总线上。

(8)占用多个I/O端口的大规模集成电路的地址译码器的设计类似于存贮器的地址译码器设计,只是地址范围小得多,控制信号有所不同。

(9)主机与键盘之间有一条线专用于传送从键盘到主机的串行键扫描码,不能反向传送。

(10)一个中断类型号乘以4,就是该中断服务程序的入口地址。

[参考答案]

3. MOV AX,1000

MOV DX,1000H

OUT DX,AL

MOV AL,AH

OUT DX,AL

说明:此题若手工将1000化为十六进制数,则多此一举。

6. A

7. 答:有线选法和译码两种,在实际设计时,究竟采用那种方法,要根据系统的规模大小来确定。一般来说,系统规模大的要用译码方法来选片,这样可以增加芯片数量。例如,三根地址线采用线选法只能选三片,而采用译码法就可以接八片,但需要增加译码器。译码器设计又分为全地址译码和部分地址译码,在系统规模允许下,部分地址译码可以简化电路,节省组件。

9. ① 20 ② 1M ③ 00000H ~ FFFFFH

④ 16 ⑤ 64K ⑥ 0000H ~ FFFFH

⑦ 10 ⑧ 1K ⑨ 000H ~ 3FFH

11.外设与主机之间的联络及响应处理方式 多外设管理方式

12.程序直接控制传送方式程序中断控制方式存贮器直接存取方式

15.主机板上的接口逻辑 系统总线 具体外设的接口逻辑 接口的软件和软件的接口

17.B C D

20.C

22.答:在PC机中,有用于主机与外设之间数据传送的DMA控制逻辑,若在开发外设接口逻辑时,未将用于分辨DMA操作和I/O操作的信号AEN以低电平有效(I/O操作)加入地址译码器,就会在其它设备与存贮器之间进行DMA传输,或利用DMA机构进行动态存贮器刷新时,在这个I/O端口地址译码器的输出端可能输出不应有的有效选择信号。而这个端口并不是DMA传输涉及的端口。为避免这种误操作,此时应将AEN加入I/O端口地址译码。但在不含DMA的微机系统中,不存在这个问题。

26.中断向量表是用于存放中断服务程序入口地址的。每一种中断都有一中断类型号,CPU得到此中断类型号,将之乘以4,即查到中断向量表的一个地址,从这个地址开始的连续四个单元中存的就是这种中断的中断服务程序入口地址,将前两个单元中的偏移地址装入IP,后两个单元的段地址装入CS,CPU 就转去执行中断服务程序了。

29. 答:

(1) 设立必要的中断源,确定它们提出的中断请求的方式.

(2) 根据急迫程度的不同,规定好中断源的优先级别,以确定当几个中断源同时请求时,处理机能有一个先后响应次序.

(3) 当处理机响应中断后,需要把被中断程序的现场,断点保存起来,以便中断处理结束后能返回原程序.

(4) 中断服务程序设计.

(5) 恢复现场,返回原程序.

33. C

38.能返回,但存在的问题是未能弹出中断前压栈的PSW,无法恢复至中断前的计算机状态。

40.内部中断 可屏蔽中断 非可屏蔽中断

44. B

46. (1) A(2) B(3) C

48. (1) 以串形方式进行传输的标准

(2) CRT终端

(3) 调制解调器

(4) 负

(5) -5V 至 -15V

(6) +5V 至 +15V

52. C

55. (1) D(2) H(3) L (4) K (5) I

57.(1) D(2) H(3) L

(4) K(5) I