【小雨的成长】外部中断的简单应用
中断是学过,但是好久没写过这方面的程序了。。。。
今天,就试着写了个。。。但是写的过程中发现了好多问题!!。。
也算是大家以后写中断时要注意的地方吧1!!
题目:将P0口的LED做左移右移。中断时(INT1)让P0口的LED闪烁5次。。
虽然功能简单,用查表写更容易实现但是有时候用中断写也是很有乐趣的一件事啊!!
嘻嘻。。
下面是仿真图,就当电路图用啦。。。

恩。。汇编程序如下:
ORG 00H
AJMP START
ORG 0013H
AJMP LOOP
ORG 0030H
START: SETB EA
SETB EX1
MOV TCON,#00H
MOV SP,#40H
LOOP4: MOV R4,#8
MOV A,#0FFH
CLR C
LOOP1: RLC A
MOV P0,A
ACALL DELAY
DJNZ R4,LOOP1
MOV R5,#7
LOOP3: RRC A
MOV P0,A
ACALL DELAY
DJNZ R5,LOOP3
AJMP LOOP4
DELAY: MOV R0,#20
D1: MOV R3,#20
D2: MOV R1,#248
DJNZ R1,$
DJNZ R3,D2
DJNZ R0,D1
RET
LOOP: PUSH ACC
PUSH PSW
MOV R7,#5
LOOP2: MOV A,#00H
MOV P0,A
ACALL DELAY
MOV A,#0FFH
MOV P0,A
ACALL DELAY
DJNZ R7,LOOP2
POP PSW
POP ACC
RETI
END
下面,我说点我写这个时候的体会。。
总的来说,程序比较简单。就是一个流水灯再加上一个中断服务程序。
但是新手写的时候一个不注意就会出错。。。(当然我也是新手,这个程序也改了几遍,这个程序现在还有点小问题)
要注意的地方:
1 用到中断就涉及到TMOD,TCON ,IP,IE几个都要设定,新手们不要怕,想学好怕的话,那就什么都学不会了。
2 就是因为要用到中断所以就有个现场保护的问题。大家要注意,单片机执行中断的过程,在中断相应阶段首先将PC的值压栈,然后又硬件产生一条LCALL addr16指令,将中断入口地址送入PC(也就是这里的0013H)然后执行0013H后的跳转指令。
3 这里面跳转指令挺多的,大家写程序的时候要仔细点,如要跳入死循环。。





