汇编语言 中断程序代码

汇编语言 中断程序代码,第1张

还是找到了以前写的,拿分来

;

;purpose:ring and display a message every 10 seconds

;

model small

stack 100h

data

count dw 1

msg db 'The bell is ringing!',0dh,0ah,'$'

code

main proc far

start:

mov ax,@data

mov ds,ax

mov al,1ch

mov ah,35h ;get interrupt vector

int 21h

push es

push bx

push ds

mov dx,offset ring

mov ax,seg ring

mov ds,ax

mov al,1ch

mov ah,25h

int 21h

pop ds

in al,21h

and al,11111110b

out 21h,al

sti

mov di,2000

delay:

mov si,3000

delay1:

dec si

jnz delay

pop dx

pop ds

mov al,1ch

mov ah,25h

int 21h

mov ah,4ch

int 21h

main endp

;---------------------

;purpose:ring every 10 seconds when substituted for interrupt 1ch

ring proc near

push ds

push ax

push cx

push dx

mov ax,@data

mov ds,ax

sti

dec count

jnz exit

mov dx,offset msg

mov ah,09h

int 21h

mov dx,100

in al,61h

and al,0fch

sound:

xor al,02

out 61h,al

mov cx,1400h

wait1:

loop wait1

dec dx

jne sound

mov count ,182

exit:

cli

pop dx

pop cx

pop ax

pop ds

iret

ring endp

end start

ORG 0000H

LJMP START

ORG 000BH

LJMP Timer0Interrupt

START:

MOV SP,#60H

LCALL InitTimer0

LOOP:

;add your code here!

LJMP LOOP

InitTimer0:

MOV TMOD,#01H

MOV TH0,#0FCH

MOV TL0,#18H

SETB EA

SETB ET0

SETB TR0

RET

Timer0Interrupt:

PUSH DPH

PUSH DPL

PUSH ACC

MOV TH0,#0FCH

MOV TL0,#18H

CPL P10

POP ACC

POP DPL

POP DPH

RETI

END

这是定时器0的一个1ms中断一次的程序 在P10端口输出1KHz方波

驻留程序

通俗点讲

就是

程序运行完了,

还要保留

临时数据

运行状态,

等下一次

调用时

继续

执行

和普通程序的

区别:

普通程序(如一个

函数

调用完了

临时数据

不需要了,

分配的

内存

空间

回收了,

驻留程序

要保留这些的

驻留

程序

主要

用于

中断函数

非中断函数

有应用,较少。分别举个例子:

1)用于

中断:

假设

一个

定时器

做的

时钟函数,定时器

设置为

1s一个中断。

main()

{

显示

时间

hour,min,sec;

//

循环

刷屏显示

}

中断函数

{

sec++;

if(sec>=60)

{

sec=0;

min++;

}

if(min>=60)

{

min=0;

hour++;

}

if(hour>=24)

{

hour=0;

}

}

这时候

就能看出,

中断程序

运行完的

时候

不能

3个

变量

清空,

因为

下次

中断

还要用到

上次的

值,

这个程序

一直

驻留

内存;

2)再来个

普通

函数的

假设

做了一个程序

,程序中

有一个

函数aa,而

函数

aa

我只能

让它执行

3次就得

关闭程序(这个

用在

密码

验证上)

aa()

{

密码验证次数n+1

返回n

验证结果

}

那这个

aa函数

密码

验证

阶段

就要

常驻

内存

结构很规矩,这个程序。

首先单片机上电复位,运行死循环前面的程序(,你这里就是init_timer(); // 应该叫初始化定时器,才合适,让定时器按照你需要的定时长度工作,或叫产生中断 )

接下来单片机主程序就是一直在死循环了。我们的主要任务一般在这里处理。

中断,就是在处理一些特殊任务,比如按键,或定时处理的程序,或外部一个不知道什么时间发生的任务,或通信任务等等。你在主循环的时候,无论在什么时候,中断请求来了(可以理解为需要处理比较紧急任务,优先处理的任务),就会暂停主循环,进入对应中断服务程序。运行完,在回主循环的暂停地方,继续执行死循环的任务。

定时器中断,就是每过一定时间,运行一下中断服务程序。常用来计时和产生脉冲信号。

初始化定时器,就是给定时器的寄存器,设置工作模式,时钟源,溢出的计数值。设置好了,定时器就能根据每个时钟源的频率,进行计数,直至溢出,然后产生一个中断请求。如果不饿能自动加载计数初值的定时器,在中断处理函数(服务函数)必须手动加载初值。

以上就是关于汇编语言 中断程序代码全部的内容,包括:汇编语言 中断程序代码、用单片机汇编语言编写中断程序、如何用c语言编写一个可中断的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9721501.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存