首先开中断,包括各个中断源和总中断,并设置中断触发条件,如定时器初值, 低电平触发还是下降沿触发,然后运行主程序,中断条件具备时,转入中断程序,中断程序完成后,返回主程序,至于保护重要的寄存器内容,属于中断程序之中的内容,包括有些共用中断判断到底属于哪 一个中断和清除中断标志,都是中断程序的内容,有的必须有,有的就没有。
假设晶振频率是12MHz;
P2口输出低电平时LED发光。
下列两个程序,经过了PROTEUS仿真,能够满足要求。
;===================================================
;下面是查询方式
ORG 0000H
LJMP MAIN
ORG 0050H
MAIN:
MOV TMOD, #01 ;令T0定时方式1
MOV TH0, #3CH
MOV TL0, #0B0H ;50ms@12MHz
SETB TR0 ;启动T0
;--------------------------------------------
MOV R7, #20
MOV A, #7FH
MOV P2, A
M_LOOP:
JNB TF0, M_LOOP ;T0没有溢出,就在此循环不止
CLR TF0
MOV TL0, #0B0H
MOV TH0, #3CH
DJNZ R7, M_LOOP ;溢出20次
MOV R7, #20 ;才到1s
RR A
MOV P2, A
SJMP M_LOOP
;--------------------------------------------
END
;===================================================
;下面是中断方式
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_INT
ORG 0050H
MAIN:
MOV TMOD, #01 ;令T0定时方式1
MOV TH0, #3CH
MOV TL0, #0B0H ;50ms@12MHz
SETB TR0 ;启动T0
MOV IE, #82H ;允许中断
;--------------------------------------------
MOV R7, #20
MOV A, #7FH
MOV P2, A
M_LOOP:
;主程序, 空循环
SJMP M_LOOP
;--------------------------------------------
T0_INT: ;50ms执行一次
MOV TL0, #0B0H
MOV TH0, #3CH
DJNZ R7, T0_END ;中断20次
MOV R7, #20 ;才到1s
RR A
MOV P2, A
T0_END:
RETI
;--------------------------------------------
END
;===================================================
中断源初始化是指在系统启动时,对中断控制器和各个设备的中断源进行初始化,包括设置中断源的优先级、中断处理程序的入口地址等。中断源初始化的目的是为了让系统在发生中断时,能够正确地调用相应的中断处理程序,保证系统的正常运行。
中断源程序是指中断处理程序,也就是中断响应程序,当系统发生中断时,中断控制器会通过中断向量表找到相应的中断源程序,并跳转到程序入口地址开始执行。中断源程序的功能是处理中断事件,包括保存CPU现场、处理中断请求、恢复CPU现场等 *** 作,最终返回到中断发生前的执行位置,继续执行系统的正常流程。
因此,中断源初始化和中断源程序是两个不同的概念,中断源初始化是为了确保中断源程序能够正确运行,而中断源程序则是处理中断事件的具体实现。
例如定时器0中断:
void timer0_sev (void) interrupt 1
timer0_sev是中断程序名称,可自己定
interrupt 1指的是中断号,不能随意写
0 1 2 3 4 分别是外部中断0 定时器0 外部中断1 定时器1 串口中断。
有的还在中断序号后面写 using 0 using 1等,指的是用哪一个寄存器组,防止内存冲突,应该没什么用途
我编程写两个中断程序,专门注明 using 1 using 2 用不同的分组
可查反汇编代码,根本没有修改PSW寄存器的语句
两个中断都是 PUSH ACC PUSH PSW
中断结束前 POP ACC POP PSW
以上就是关于简述单片机中断相应过程全部的内容,包括:简述单片机中断相应过程、proteus跑马灯定时器中断和查询源程序、中断源初始化和中断源程序有什么不同等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)