用51单片机外部中断0计数时候,一次记得数不是加1,而是跳了几个,在中断程序里延时还是不行

用51单片机外部中断0计数时候,一次记得数不是加1,而是跳了几个,在中断程序里延时还是不行,第1张

嘿嘿 俺来帮你解决

1 选择计数脉冲的上升沿 触发中断 即设外部中断0为边沿触发方式

2 进入外部中断0的中断服务程序后,首先要让外部中断0关中断,避免计一个脉冲时产生多次中断。

3 计数加1后,要延时一段时间,让计数脉冲稳定后,再让外部中断0重新开中断。

呵呵 赶快试试吧 如果对的话 就给俺加分吧

外部中断0设置为低电平触发,去掉while循环后一直按下按键实际代码为

delay();

p1=0xfe;

delay();

ex0=0;

p1=_crol_(p1,1);

delay();

ex0=1;

p1=0x00;

一直重复

之前的代码进入中断后会一直循环,并不会退出中断。正确做法中断应该改为:

void

tx0()

interrupt

0

using

0

{

unsigned

char

i;

delay();

p1=0xfe;

delay();

ex0=0;

while(1)

{

p1=_crol_(p1,1);

delay();

if(p3&0x04)

//判断是否松开中断0的按键

{

break;

}

}

ex0=1;

p1=0x00;

}

中断分为4个步骤:中断请求→中断相应→中断处理→中断返回(先做更重要的事)

1、数据的输入/输出传送方式

外部中断要看对应引脚外部的电平状态。

例如:外部中断0(INT0)对应的引脚是P32,

当出现 低电平 ,即P32引脚连接的地方是 低电平 ,进入相应的中断函数;

当出现 下降沿 ,即P32引脚连接的地方 由高电平变为低电平 ,进入相应的中断函数

内部中断源要看单片机内部的定时器/计数器

中断允许寄存器IE

定时器/计数器0/1控制寄存器TCON

对同时发生多个中断申请时:

不同优先级的中断同时申请:先高后低

相同优先级的中断同时申请:按序执行

正处理低优先级中断又接到高级别中断:高打断低

正处理高优先级中断又接到低级别中断:高不理低

初始化的意思如图所示

实现思路

查看上方 P3第二功能各引脚功能定义 ,P33是外部中断1 (INT1)的外部输入引脚

编写一个程序,使得 S2按键按下 时,某个IO口(下面程序选择了P37这个IO口) 产生跳变沿 (由1变0)。P33与P37用跳线连接,使P33口与P37口同时产生跳变沿。

如果在没有更改过优先级的情况下,外部中断1被触发,定时器1和定时器0哪个还能工作?

不知道楼主所说的“工作”,是什么意思。

外部中断0、定时器0、外部中断1、定时器1和串行口,它们是同时工作的。

只是当满足一定的条件,它们会向CPU申请中断,而CPU只有一个,只能执行一个外设的中断程序。

如果外部中断1被触发,CPU执行X1的中断程序,这时,定时器1和定时器0仍然在做自己的工作,并没有停止工作。

楼主的问题,可能是问CPU的,当CPU在执行外部中断1的程序期间,还能不能接受T1、T0的中断申请。

答案是:不能。

只有高级的,可以中断低级的。

楼主已经说它们是同一级别的中断源,那么它们就是不能互相中断的。

只有当这个中断程序结束了,返回主程序后,CPU才会响应刚才早已来到的中断申请。

按键一头接在外部中断口,一头接地。按一次触发一次。

void main()

{

EA=1; //开总中断开关

EX0=1; //打开外部中断0开关

IT0=1; //触发方式设置

while(1)

{

省略

}

}

void int0 () interrupt 0//外部中断函数

{

led0=0;

delay_ms(1000);//延时1s

led0=1;

}

解释2个if

num2++;//定时器中断一次加一

if(num2==20)//如果num2加了20次了那么

{num2=0;num++;//把num2加的数清0,num进这个if一次加一次

if(num==60)num=0; 如果num2加了20次了那么,把num加的数清0

shi=num/10;//求模

ge=num%10;//求余

}

呵呵,前面几位网友,回答都是错的。

网友说:

外部中断0优先级高于外部中断1

同优先级情况下,外部中断0还是会比的外部中断1更优先;

都是不对的。

你没有设置中断短优先级,那么,它们,就都是低级的。

要想嵌套,必须有高、低两个级别。

同样的优先级,是不能出现中断嵌套的。

只有高级的,才能中断低级的。

ORG 0003H ;INT 0 中断入口地址"

INT0是外部中断0,就是接单片机P32口,按一个按键连到地就行,P32口有低电平就能触发中断

但是你的程序是不完整的,还在主程序和延时子程序都用省了,

比如主程序里要写 SETB EA;打开总中断

SETB IT0;低电平触发

SETB EX0;开中断0

延时程序到书上抄个就行

试试看:

ORG 0000H

JMP MAIN

ORG 0013H

AJMP INT

JMP MAIN

TAB:

DB 0X01, 0X02, 0X04, 0X08

DB 0X10, 0X20, 0X40, 0X80

MAIN:

SETB EA

SETB EX1

MOV DPTR, #TAB

LOOP:

MOV R1, #8

MOV B, #0

AGAIN:

MOV A, B

MOVC A, @A+DPTR

MOV P1, A

INC B ;下一个状态

CALL DELAY

DJNZ R1, AGAIN

JMP LOOP

DELAY:

MOV R6, #2

LOOP3: MOV R5, #255 ;延迟0。5秒

LOOP2: MOV R4, #255

LOOP1: NOP

NOP

DJNZ R4, LOOP1

DJNZ R5, LOOP2

DJNZ R6, LOOP3

RET

INT:

MOV P2, #0XAA

CALL DELAY

CALL DELAY

CALL DELAY

CALL DELAY

CALL DELAY

MOV P2, #0XFF

MOV A, B ;显示下一个状态

MOVC A, @A+DPTR

MOV P1, A

INC B

RETI

END

以上就是关于用51单片机外部中断0计数时候,一次记得数不是加1,而是跳了几个,在中断程序里延时还是不行全部的内容,包括:用51单片机外部中断0计数时候,一次记得数不是加1,而是跳了几个,在中断程序里延时还是不行、C51单片机外部中断扩展程序设计、51单片机之中断系统,外部中断等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9515853.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存