单片机复习材料(9)
发布时间:2021-06-05
发布时间:2021-06-05
例6-1 在如图6-3所示的电路中,P1.4~P1.7接有4个发光二极管,P1.0~P1.3接有4个开关,消除抖动电路用于产生中断请求信号,当消抖电路的开关来回拨动一次,将产生一个下降沿信号,通过INT0向CPU申请中断,要求:P1.0~P1.3所接的开关状态反映到发光二极管上,且要求开关打开的对应发光二极管亮,编程如下: ORG 0000H SETB IT0 SWAP A AJMP MAIN SETB EX0 MOV P1,A ORG 0003H SETB EA RETI AJMP WBI HERE: AJMP HERE END ORG 0030H WBI: MOV P1,#0FH MAIN: MOV P1,#0FH MOV A,P1
例6-2 89C51(或89S51)的P1口接一个共阴极的数码管,利用消抖开关产生中断请求信号,每来回拨动一次开关,产生一次中断,用数码管显示中断的次数(最多不超过15次)。 ORG 0000H MOV R7,#0FFH PUSH DPL AJMP MAIN DJNZ R7,$ PUSH DPH ORG 0013H MOV P1,#0 RETI AJMP INTV1 CLR EA TAB:DB ORG 0030H SJMP $ 3FH,06H,5BH,4FH,66H,6DH,7DH,0MAIN:SETB IT1 INTV1:INC R0 7H SETB EX1 MOV A,R0 DB SETB EA MOV DPTR,#TAB 7FH,6FH,77H,7CH,39H,5EH,79H,71MOV R0,#0 MOVC A,@A+DPTR H MOV A,#3FH POP DPH END AL1:MOV P1,A POP DPL AL2:CJNE R0,#0FH,,AL1 MOV DPTR,#AL1 例6-3 对例6-1(见图6-3),要求每中断一次,发光二极管显示开关状态,用C语言编程。 #include<reg51.h> } IT0=1; int0()interrupt 0{ main(){ while(1); p1=0x0f; EA=1; } p1<<=4; EX0=1;
例6-4对例6-2记录并显示中断次数,用C语言编程,可有两种编程方法。 方法1:在主程序中判断中断次数,程序如下: #include<reg51.h> int()interrupt2{ IT1=1; char i; i++; ap5:
P1=tab[i]; P1=0x3f; code char tab[16]={0x3f,ox06,
} for(i=0;i<16;); 0x5b,0x4F,0x66,0x6d,0x7d,0x07,
main(){ goto ap5; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79EA=1; } ,0x71}; EX1=1; 方法2:在中断程序中判断中断次数,程序如下:
EX1=1; if(i<16)PI=tab[i]; #include<reg51.h>
IT1=1; else {i=0;P1=0x3f;} code char tab[16]={0x3f,ox06,0x5b,0x4F,0x66,0x6d,0x7d,0x07,
P1=0x3f; } 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
while(1); main(){ int()interrupt2{
} EA=1; i++;