完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
用的是 stc89c52rc 外部中断使用 下降沿触发
#include ***it LED = P2^3; ***it LE =P2^0; void delay(unsigned int t); void s() interrupt 0 using 2 { LED = ~LED; delay(100); } void main() { EX0 = 1; // 外部中断0开中断; EA = 1; // 使能全局中断。 IT0=1; while(1) { LE= 0; // 点亮LED delay(100); // 延时大约0.1s LE= 1; // 熄灭LED delay(100); // 延时大约0.1s } } void delay(unsigned int t) //延时子程序 { while(t--); } 我是想主函数使 P2。0 的LED灯闪 然后 中断程序中 就 P2。。3 的LED闪 但是 运行后 一旦进入中断程序 就不能返回主函数了 就是 一开始 是P2.0闪 按了中断按钮后 就P2,3闪 但是再按还是P2,3闪 P2,0就不闪了~~ 求助各位大神呀 那里出问题了 中断不能返回呢··· |
|
相关推荐
10个回答
|
|
顶~~上去···
|
|
|
|
IT0=0;好像是低电平触发吧
|
|
|
|
。。。你可以弄一个切换标志位,随便拿个标志,不如说“f”。中断里直接 f=~f。大循环里就弄两个小循环判断,当第一个就是当f=0时闪2.0,第二个就是当f=1时闪2.3。。。。我也是刚学,给个建议。
|
|
|
|
而且在我看来,你这个程序2.3是不会闪的,因为是边沿触发方式,你按一下最多2.3闪0.1s,就继续闪2.0了。 除非你把IT0=1改成IT0=0.这样你就按着外部中断不放,2.3就会闪。还有抗干扰延时也没有。。模拟还可以,实物的话就可能会干扰很大了。。一点建议高手们别笑。
|
|
|
|
嗯··对····我是不断按触发键来达到闪的效果 其实这只是个简化程序 2.3 的亮灭 只是来判断 有没有执行中断 及 有没有返回主函数 |
|
|
|
呵呵··这个我可以做到 其实这个是个简化程序··我想做的不仅是闪两个灯而已···只是拿出来做个简化 主要问题 在于 中断后 不能返回主函数 |
|
|
|
你外部中断用的是脉冲还是开关啊?脉冲的话有下降沿就要中断的,可能中断很多次所以以为没跳出吧..
开关的话应该吧IT0改为IT0=0 才对啊! 不然就是你中断程序写成死循环了吧..我觉得应该就这几种情况了吧 |
|
|
|
如果是实物的话就和3楼说的的一样了 没抗干扰延时程序,因为是脉冲沿,外界干扰大了一直触发中断程序,如果你是用软件模拟的话那还真不知道随时什么原因。。。
|
|
|
|
就上边这个程序而言 我个人感觉是没什么问题,是不是你外部的下降沿的问题(比如说 时间 防抖动)
|
|
|
|
{:soso_e103:}
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》 第十六章 WATCH_DOG实验
460 浏览 0 评论
【敏矽微ME32G070开发板免费体验】+ADC测试与LED点亮
418 浏览 0 评论
飞凌嵌入式-ELFBOARD ELF 2的硬件知识分享--核心板
352 浏览 0 评论
【敏矽微ME32G070开发板免费体验】\\+Lora通信终端产品开发项目
514 浏览 0 评论
1576 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11971 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 01:27 , Processed in 0.873573 second(s), Total 89, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号