1.51单片机INT1中断电平触发方式和跳变沿触发方式有什么区别
INT1的边沿触发只有下降沿有效,换句话说,只要出现了下降沿那肯定出现了低电平,所以对于单个中断来说,电平与边沿没区别。真正的区别在于:
电平触发方式时,中断标志寄存器不锁存中断请求信号。也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电平触发的中断被CPU响应并执行,必须保证外部中断源口线的低电平维持到中断被执行为止。因此当CPU正在执行同级中断或更高级中断期间,产生的外部中断源(产生低电平)如果在该中断执行完毕之前撤销(变为高电平)了,那么将得不到响应,就如同没发生一样。同样,当CPU在执行不可被中断的指令(如RETI)时,产生的电平触发中断如果时间太短,也得不到执行。
边沿触发方式时,中断标志寄存器锁存了中断请求。中断口线上一个从高到低的跳变将记录在标志寄存器中,直到CPU响应并转向该中断服务程序时,由硬件自动清除。因此当CPU正在执行同级中断(甚至是外部中断本身)或高级中断时,产生的外部中断(负跳变)同样将被记录在中断标志寄存器中。在该中断退出后,将被响应执行。如果不希望这样,必须在中断退出之前,手工清除外部中断标志。
2.请写出 INT0非 为下降沿触发方式的中断初始化程序
入口参数 出口参数 AX=0001显示光标 无 无 AX=0003取光标位置与状态钮 BX(b=0;左键,b=2右键。
) ------------ 显示鼠标: r.x.ax=1int86(0x33,&x,&x) 检测鼠标 r.x.ax=3int86(0x33,&x,&x) if(r.x.bx=1) {当左键按下时完成的程序。..} if(r.x.bx=2) 。
.. 事实上就这么简单!任何一个中断的调用者是这么简单。 下面的程序是比较规范的经典的鼠标函数。
就不一一界绍了。 #include #include "dos.h" union REGS r; typedef struct {unsigned int shape[32]; char hotx; char hoty; }Shape; Shape hand= {{ 0xe7ff,0xc3ff,0xc3ff,0xc07f,0xc00f,0xc001,0xc001,0xc001, 0x8001,0x8001,0x8001,0xc003,0xc003,0xe007,0xe007,0xe007, 0x1800,0x2400,0x2400,0x2580,0x26b0,0x26d6,0x2232,0x2222, 0x4222,0x4002,0x4002,0x2004,0x2004,0x1ff8,0x1008,0x1ff8},0,0}; void mouseshape(Shape sp) {_BX=sp.hotx; _CX=sp.hoty; _ES=FP_SEG(&sp.shape); _DX=FP_OFF(&sp.shape); _AX=0x09; geninterrupt(0x33); } void mouse_IQR(int *num,int *bx,int *cx,int *dx) /*33H鼠标中断核心函数*/ { r.x.ax=*num; /*寄存器初始化*/ r.x.bx=*bx; r.x.cx=*cx; r.x.dx=*dx; int86(0x33,&r,&r); /*中断调用*/ *bx=r.x.bx; *cx=r.x.cx; *dx=r.x.dx; *num=r.x.ax; } void init_mouse() /*鼠标初始化,检验是否安装鼠标驱动程序*/ { int num=0; mouse_IQR(&num,&num,&num,&num); if(num!=-1) { printf("Mouse not installed!"); exit(1); } } void show_mouse() /*鼠标显示函数*/ { int num=1; mouse_IQR(&num,&num,&num,&num); } void off_mouse() /*鼠标关闭函数*/ { int num=2; mouse_IQR(&num,&num,&num,&num); } void home(int *x,int *y) /*鼠标状态检验函数*/ { int button=0,num; num=3; mouse_IQR(&num,&button,x,y); } int left_press() /*鼠标左键状态检验函数,按下则返回1*/ { int bx=0,num=3; mouse_IQR(&num,&bx,&num,&num); return bx&1; } int right_press() /*鼠标左键状态检验函数,按下则返回1*/ { int bx=0,num=3; mouse_IQR(&num,&bx,&num,&num); return bx&2; } /*main() { int gd=DETECT,gm; initgraph(&gd,&gm,""); init_mouse(); show_mouse(); mouseshape(hand_2); for(;;) { if(left_press()==1) break; } mouseshape(hand); getch(); off_mouse(); closegraph(); exit(1); }*/ main()中你可以测试一下。
在程序中有这样的段代码 Shape hand= {{ 0xe7ff,0xc3ff,0xc3ff,0xc07f,0xc00f,0xc001,0xc001,0xc001, 0x8001,0x8001,0x8001,0xc003,0xc003,0xe007,0xe007,0xe007, 0x1800,0x2400,0x2400,0x2580,0x26b0,0x26d6,0x2232,0x2222, 0x4222,0x4002,0x4002,0x2004,0x2004,0x1ff8,0x1008,0x1ff8},0,0};。
3.编写完整的应用程序,运用外部中断功能,实现从 INT1引脚每输入2个
;汇编语言程序如下:
ORG 0000H
SJMP START
ORG 0013H
SJMP X1_INT
START:
MOV IE, #84H ;1000 0100B
SJMP $
X1_INT:
JNB P3.3, $
CPL F0
JNB F0, X1_END
MOV A, 3FH
ADD A, #1
DA A
MOV 31H, A
MOV P1, A
X1_END:
RETI
END
4.51单片机中设置外部中断0为下降沿触发的语句怎么写啊
51单片机的外部中断是有两种触发方式的,如外部中断0: IT0(TCON.0) ,外部中断 0触发方式控制位。
当IT0=0时,为电平触发方式。 当IT0=1时,为边沿触发方式(下降沿有效)。
51单片机中断系统初始化: 开相应中断源的中断; (IE) 设定中断优先级;(IP) 若为外部中断,设定外部中断的触发方式。 void Outside_Init(void) { EX0 = 1; //开外部中断0 IT0 = 1; //负边沿触发 EA = 1; //开总中断 } void Outside_Int(void) interrupt 0 //外部0中断函数 { EX0 = 0; //关中断 这里写要实现的功能 EX0 = 1; //开中断 }。
5.单片机高手请进
如果是键盘促发的话,一定得在中断函数里面加个消除消抖的代码
参考下面(P32为定义的外部中断0端口,程序开始sbit P32=P3^2,delay(10)为延时10ms,自己声明下):
void extern_int0(void) interrupt 0 using 0
{
EX0=0;
delay(10);
if(P32==0){
cnt++; }
while(!P32);
EX0=1;
}
//延时函数
void delay(uint k)
{
uint data i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++){;}
}
}
6.51单片机INT1中断电平触发方式和跳变沿触发方式有什么区别
真正的区别在于: 电平触发方式时,中断标志寄存器不锁存中断请求信号。
也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。
这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电平触发的中断被CPU响应并执行,必须保证外部中断源口线的低电平维持到中断被执行为止。
因此当CPU正在执行同级中断或更高级中断期间,产生的外部中断源(产生低电平)如果在该中断执行完毕之前撤销(变为高电平)了,那么将得不到响应,就如同没发生一样。同样,当CPU在执行不可被中断的指令(如RETI)时,产生的电平触发中断如果时间太短,也得不到执行。
边沿触发方式时,中断标志寄存器锁存了中断请求。中断口线上一个从高到低的跳变将记录在标志寄存器中,直到CPU响应并转向该中断服务程序时,由硬件自动清除。
因此当CPU正在执行同级中断(甚至是外部中断本身)或高级中断时,产生的外部中断(负跳变)同样将被记录在中断标志寄存器中。在该中断退出后,将被响应执行。
如果你不希望这样,必须在中断退出之前,手工清除外部中断标志。 选择电平触发还是边沿触发方式应从系统使用外部中断的目的上去考虑,而不是如许多资料上说的根据中断源信号的特性来取舍。
转载请注明出处育才学习网 » INT1下降沿触发怎么写