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方波
主要是出于效率方面的考量。中断处理程序需要在尽量短的时间内完成所需的必要处理,尽量减少对线程/程序流造成的影响,因此大部分情况下用汇编直接编写,跳过了通用编译过程中冗余的适配部分。
汇编语言是
汇编指令
集、
伪指令
集和使用它们
规则
的统称,使用具有一定
含义
的
符号
为助记符。由于汇编语言是完全依赖于硬件的,因此通过适当的
汇编程序
设计,能够充分发挥出硬件的潜力,产生高效率的运行
代码
。
不光是中断处理程序,有许多软件系统的
内核
(例如
*** 作系统内核
)都是用汇编语言编写的。
第一步把0号中断向量设置成0000:0200h(0号中断发生时CS为0000 IP为0200h)
第三步把int0到int0end的代码复制到00200h中去了
注意到int0处的第一个指令是jmp short int0start
这条语句的汇编代码为0ebh(jmp short *** 作码) 02h(偏移量)
所以紧接着的db "my name is xiongbingxin" 的首地址安排在了0000(CS就是0000):0202h了
ORG 0000H
LJMP MAIN 主程序开始
ORG 000BH
AJMP PIT0 t0中断入口
ORG 001BH
AJMP PIT1 t1中断入口
MAIN: MOV SP, #60H 设置堆栈
MOV TMOD, #03H 定时器方式 T0T1都是方式1
MOV TL0, #9CH T0初始值
MOV TH0, #38H
MOV TCOM, #50H ;TR0=1 TR1=1 启动定时器
MOV IE, #8AH 开启定时器中断
HERE: AJMP HERE
PIT0: MOV TL0, #9CH T0 时间到 重新送初值
CPL P10 取反P10 生成方波
RETI
PIT1: MOV TH0, #38H T1时间到 重新送初值
CPL P11 取反p11 生成方波
RETI
END
不知道你要显示几位,我写了个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
嘿嘿。
这是定时器T0中断,那么就是定时器T0开始不断加1,到TH0TL0为FFFF时,中断产生。
如果是外部中断,比如INT0脚 接一按键另一端搂地 ,按键 按下时,外中断产生。
以上就是关于用单片机汇编语言编写中断程序全部的内容,包括:用单片机汇编语言编写中断程序、为什么现代计算机系统中还有中断处理程序是用汇编语言编写、汇编语言中中断程序的中一个问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)