续上一篇文章在0-99自动计数中再加入程序复位功能(汇编语言,proteus,AT89C51中断的使用)
1.电路原理图Proteus仿真2.中断按钮之前的电路采用复位电路用于是实现复位功能现在在原来的电路原理图中新增了一颗按钮BUTTON-2用于编程实现复位功能按钮BUTTON-2采用中断方式实现复位其与 外部中断0P3.2接口引脚接通按钮BUTTON-1采用中断方式实现0-99计数器的开始与暂停3.复位按钮思想(1) 如何在自动计数期间用查询实现复位此效果为复位后重新计数不会和复位电路一样暂停计数因为0-99自动计数的主程序放在了中断程序外部中断1里面所以想要在自动计数时实现复位可以采用查询中断标志位的方式实现如下图LOP: ;自动计数主程序 MOV A,R4 ;用减法判断个位计数是否满9 SUBB A,#09H ……………… TIME: JB IE0,CLRS ;判断中断0标志位用于复位 ……………… CLRS: ;计数器未暂停时的复位程序 MOV R4,#00 ;个位计数器清零 MOV R3,#00 ;十位计数器清零 CLR IE0 ;中断0标志位释放 MOV P0,#3FH ;十位晶体管初始化 LJMP LOP ………………JB IE0 判断外部中断0是否发出中断请求置1 是则执行CLRS清零否则继续计数之所以采用查询方式其一是因为计数程序本身在中断程序内不会响应同级中断要使用中断嵌套中断就只能修改中断优先级难度较大。其二不采用查询接布尔值方式是因为其响应不灵敏采用查询中断标志位响应速度快(2) 如何在暂停计数时实现复位主程序在暂停计数后会跳出中断继续等待中断指令此时上阶段的中断已经结束可以使用中断方式实现暂停时的复位功能 基本就结构如下……………… ORG 0003H ;中断方式0起始地址 LJMP INT_0 ……………… INT_0: ;在自动计数器暂停时实现复位的中断程序 MOV R4,#00 ;计数器清零 MOV R3,#00 MOV P0,#3FH ;数码管初始化 MOV P2,#3FH RETI ;中断返回4.汇编语言代码及注释ORG 0000H LJMP MAIN ORG 0003H ;中断方式0起始地址 LJMP INT_0 ORG 0013H ;中断方式1起始地址 LJMP INT_1 ORG 0100H MAIN: MOV DPTR,#TAP ;赋值DPTR查表首地址 MOV P0,#03FH ;数码管初始化 MOV P2,#03FH ;数码管初始化 MOV R4,#00H ;计数初始化 MOV R3,#00H ;计数初始化 MOV R1,#200 ;计时器初始化 SETB IT1 ;开中断1 SETB EA ;开总中断 SETB EX1 ;设置中断0触发方式 SETB IT0 ;开中断0 SETB EX0 ;设置中断0触发方式 MOV SP,#60H ;堆栈初始化 SJMP $ ;等待中断 INT_1: ;中断主程序 CLR IE1 ;清楚中断INT_1标志位为暂停计数做准备 LOP: ;自动计数主程序 MOV A,R4 ;用减法判断个位计数是否满9 SUBB A,#09H JZ LOOP ;个位计数满9跳转清零程序 MOV A,R4 ;个位查表赋值 MOVC A,ADPTR MOV P2,A ;个位数码管赋值 INC R4 ;个位计数1 TIME: JB IE0,CLRS ;判断中断0标志位用于复位 JB IE1,LMP ;判断中断1标志位用于暂停计数 MOV R2,#250 ;延时程序0.3S左右 DJNZ R2,$ MOV R2,#250 DJNZ R2,$ DJNZ R1,TIME LJMP LUP ;跳转LUP LOOP: MOV R4,#00H ;个位计数器清零 INC R3 ;十位计数器1 MOV A,R3 ;用减法判断十位计数是否满10 SUBB A,#0AH JZ LUU ;满10跳转请零程序 MOV A,R3 ;否则查表赋值十位数码管 MOVC A,ADPTR MOV P0,A LJMP LUP ;跳转LUP LUU: MOV R3,#00H ;十位计数器清零 MOV A,R3 ;重新查表赋值十位数码管 MOVC A,ADPTR MOV P0,A SJMP LUP LUP: LJMP LOP ;跳转主程序继续计数 CLRS: ;计数器未暂停时的复位程序 MOV R4,#00 ;个位计数器清零 MOV R3,#00 ;十位计数器清零 CLR IE0 ;中断0标志位释放 MOV P0,#3FH ;十位晶体管初始化 LJMP LOP LMP: CLR IE1 NOP RETI INT_0: ;在自动计数器暂停时实现复位的中断程序 MOV R4,#00 ;计数器清零 MOV R3,#00 MOV P0,#3FH ;数码管初始化 MOV P2,#3FH RETI ;中断返回 TAP:DB 3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH;晶体管编码表 END