找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

搞不懂单片机外部中断 也查了资料 感觉还是找不到错误

查看数: 1579 | 评论数: 11 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-5-28 20:40

正文摘要:

#include<reg52.h> #include<intrins.h> #define uchar  unsigned char #define uint unsigned int sbit flag=P3^2;//外部中断信号产生脚 sbit key=P3^0;//控制flag产生下降沿 sbit led=P2 ...

回复

ID:737694 发表于 2020-5-30 17:29
lyxing 发表于 2020-5-29 22:55
外部中断INT0与INT1,在 P3.2 P3.3口上,按P3.0不能产生外中断。

我知道那两个脚 我网上查的也可以通过别的i/o口来控制P3^2 P3^3的高低电位 触发不就是有下降沿么 别的可以控制他的高低电位  咋就不可以等效那两个脚呢
ID:67199 发表于 2020-5-29 22:55
雪峰1259 发表于 2020-5-29 21:43
额 我是想通过P3^0按键来产生这个中断

外部中断INT0与INT1,在 P3.2 P3.3口上,按P3.0不能产生外中断。
ID:737694 发表于 2020-5-29 21:43
wulin 发表于 2020-5-29 16:11
程序都给你改好了你还玩不转,无语了。

额 我是想通过P3^0按键来产生这个中断
ID:213173 发表于 2020-5-29 16:11
雪峰1259 发表于 2020-5-29 13:16
加过while后 还是不行 我先通过按P3^0按键发现没用 然后我又直接按P3^2想产生跳变沿 还是没反应 懵逼了[e ...

程序都给你改好了你还玩不转,无语了。
ID:737694 发表于 2020-5-29 13:17
273431377 发表于 2020-5-29 00:33
在main()函数结尾加个while(1);
把中断函数名改成void exint0() interrupt 0  
试一下。

应该加个while 不过这和名字没啥关系吧
ID:737694 发表于 2020-5-29 13:16
wulin 发表于 2020-5-29 06:05
楼主犯了两个错误。1.程序结构错误:main函数初始化后必须限制在主循环while(1)中运行,哪怕没有如何任务也 ...

加过while后 还是不行 我先通过按P3^0按键发现没用 然后我又直接按P3^2想产生跳变沿 还是没反应 懵逼了
ID:737694 发表于 2020-5-29 13:12
csmyldl 发表于 2020-5-29 00:43
问题未描述清楚,flag与KEY在程序中定义引脚P32和P30,不知为何要这么定义

想通过按键来控制中断
ID:341098 发表于 2020-5-29 12:44
wulin 发表于 2020-5-29 06:05
楼主犯了两个错误。1.程序结构错误:main函数初始化后必须限制在主循环while(1)中运行,哪怕没有如何任务也 ...

赞同楼上
ID:213173 发表于 2020-5-29 06:05
楼主犯了两个错误。1.程序结构错误:main函数初始化后必须限制在主循环while(1)中运行,哪怕没有如何任务也得在while(1)中死循环。2.外部中断理解错误:所谓外部中断必须是单片机外部信号作用于IN0(IN1),由软件置flag=1; flag=0;不会触发IN0中断。
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar  unsigned char
  4. #define uint unsigned int
  5. sbit flag=P3^2;//外部中断信号产生脚
  6. sbit key=P3^0;//控制flag产生下降沿
  7. sbit led=P2^0;

  8. //外部中断0初始化
  9. void intlInit(void)
  10. {
  11.         IT0=1; //  外部中断0下降沿触发
  12.         IE=0;  //清除标志位
  13.         EX0=1; // 开外部中断
  14.         EA=1;  //开总中断
  15. }
  16. //主函数
  17. void main()
  18. {
  19.         intlInit();         
  20.         while(1)
  21.         {

  22.         }
  23. }
  24. // 外部中断0中服务程序
  25. void int1(void) interrupt 0
  26. {
  27.         led=~led;
  28. }
复制代码
ID:235200 发表于 2020-5-29 00:43
问题未描述清楚,flag与KEY在程序中定义引脚P32和P30,不知为何要这么定义
ID:753266 发表于 2020-5-29 00:33
在main()函数结尾加个while(1);
把中断函数名改成void exint0() interrupt 0  
试一下。

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表