找回密码
 立即注册
查看: 122|回复: 7

STC8G1K08A的INT2 INT2中断总是触发不了

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2026-04-07 13:13:23
已绑定手机

2

主题

14

回帖

46

积分

新手上路

积分
46
发表于 2026-3-31 10:47:34 | 显示全部楼层 |阅读模式
我是想用STC8G1K08A的INT2,同时做触发睡眠、唤睡睡眠。但INT2中断总是触发不了(使用的是STC-ISP下载)。困饶几天了,寝食难安。 今附了UART 和INT2初始化代码及过程图片(改变初始化前后顺序情况一样)。请各位老师释疑
155288b32e723e6ce2c34a5963baa2ac.jpg
7193705e4b98254e00995bcf2baded20.jpg
bbcf48ace34148537edb4c6508e1f71e.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:243
  • 最近打卡:2026-05-09 00:06:43
已绑定手机

22

主题

422

回帖

1906

积分

金牌会员

DIY玩家

积分
1906
发表于 2026-3-31 13:43:27 | 显示全部楼层
常见应用
定时进入休眠
无操作进入休眠
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:883
  • 最近打卡:2026-05-08 00:24:31

14

主题

1363

回帖

7384

积分

论坛元老

积分
7384
发表于 2026-3-31 13:57:32 | 显示全部楼层
//11.5.5 INT2 中断(下降沿) ,只支持下降沿中断
//C 语言代码
//测试工作频率为 11.0592MHz
#include "reg51.h"
#include "intrins.h"

sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
sfr INTCLKO = 0x8f;

#define EX2 0x10
#define EX3 0x20
#define EX4 0x40

sbit P10 = P1^0;

void INT2_Isr() interrupt 10
{
        P10 = !P10; //测试端口
}

void main()
{
        P0M0 = 0x00;        P0M1 = 0x00;
        P1M0 = 0x00;        P1M1 = 0x00;
        P2M0 = 0x00;        P2M1 = 0x00;
        P3M0 = 0x00;        P3M1 = 0x00;
        P4M0 = 0x00;        P4M1 = 0x00;
        P5M0 = 0x00;        P5M1 = 0x00;
        
        INTCLKO = EX2; //使能 INT2 中断
        EA = 1;
        while (1);
}


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2026-04-07 13:13:23
已绑定手机

2

主题

14

回帖

46

积分

新手上路

积分
46
发表于 2026-4-5 11:57:54 | 显示全部楼层
狂热*** 发表于 2026-3-31 13:43
常见应用
定时进入休眠
无操作进入休眠

老师,我改了帖子,附了图片,请看一下
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2026-04-07 13:13:23
已绑定手机

2

主题

14

回帖

46

积分

新手上路

积分
46
发表于 2026-4-5 11:58:12 | 显示全部楼层
angm*** 发表于 2026-3-31 13:57
//11.5.5 INT2 中断(下降沿) ,只支持下降沿中断
//C 语言代码
//测试工作频率为 11.0592MHz

老师,我改了帖子,附了图片,请看一下
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:67
  • 最近打卡:2026-05-08 06:02:18
已绑定手机

3

主题

115

回帖

561

积分

高级会员

积分
561
发表于 2026-4-5 13:44:35 | 显示全部楼层
将INT0中断唤醒程序改成INT2中断唤醒

  1. //测试功能:加电即睡眠,按键即外部中断2唤醒,短按LED亮灭演示操作,长按进入睡眠。
  2. //适合STC15/STC8系列
  3. //#include <STC15F2K60S2.H>
  4. #include <STC8G.H>
  5. #include "intrins.h"
  6. #define uchar unsigned char
  7. #define uint unsigned int
  8. sbit key  = P5^4;
  9. sbit LED  = P5^5;
  10. uchar Key_value; //键值
  11. uint  keyTim;    //按键时长
  12. bit   flag1ms;   //1ms中断标志
  13. bit   on_off;    //开关标志
  14. bit   allow;     //允许关机标志
  15. void Timer0Init(void)//1毫秒@11.0592MHz
  16. {
  17.         AUXR |= 0x80;                //定时器时钟1T模式
  18.         TMOD &= 0xF0;                //设置定时器自动重载模式
  19.         TL0 = 0xCD;                        //设置定时初始值
  20.         TH0 = 0xD4;                        //设置定时初始值
  21.         TF0 = 0;                                //清除TF0标志
  22.         TR0 = 1;                                //定时器0开始计时
  23.         ET0 = 1;                                //允许T0中断
  24. //        EA  = 1;                                //开总中断
  25. }
  26. void Delay20ms()                //@11.0592MHz
  27. {
  28.         unsigned char i, j;
  29.         i = 216;
  30.         j = 37;
  31.         do
  32.         {
  33.                 while (--j);
  34.         } while (--i);
  35. }
  36. void key_scan()    //按键扫描函数
  37. {
  38.         if(flag1ms)  //1ms时间标志
  39.         {
  40.                 flag1ms = 0;//1ms时间标志清0
  41.                 if(!key && !on_off)
  42.                 {
  43.                         if(++keyTim>1000)keyTim=1001;//防止溢出
  44.                         if(keyTim==20) //大于20ms小于1s算短按
  45.                         {
  46.                                 Key_value=0x01;
  47.                         }
  48.                         if(keyTim==1000) //达到1s算长按
  49.                         {
  50.                                 Key_value|=0x10;
  51.                         }
  52.                 }
  53.                 else
  54.                 {
  55.                         keyTim=0;        //按键松手keyTim清0
  56.                 }
  57.         }
  58. }
  59. void key_service()//按键服务函数
  60. {//短按等松手响应,长按达1s不论是否松手即响应
  61.         if((keyTim==0||keyTim==1000) && Key_value!=0x00)
  62.         {
  63.                 if(Key_value==0x01)//短按任务
  64.                 {
  65.                         LED=~LED;
  66.                 }
  67.                 if(Key_value==0x11)//长按关机
  68.                 {
  69.                         allow=1;//允许休眠
  70.                 }
  71.                 Key_value=0x00;//任务完成后键值清0
  72.         }
  73. }
  74. void Shutdown()//掉电模式函数
  75. {
  76.         if(allow)
  77.         {
  78.                 //关闭所有在用硬件,减小能耗
  79.                 while(!key);//等待按键松手
  80.                 Delay20ms();//消抖防止误动作
  81.                 INTCLKO |= 0x10;//使能INT2中断
  82.                 PCON = 0x02;//MCU进入掉电模式
  83. /************************************************/
  84.                 _nop_();    //掉电模式被唤醒后,首先执行此语句,然后再进入中断服务程序
  85.                 _nop_();    //中断服务程序执行完再接着此句继续执行
  86.                 while(!key);//等待按键松手,防止按键扫描程序误读
  87.                 Delay20ms();//消抖防止误动作
  88.                 //打开所有在用硬件,恢复正常运行
  89.                 allow=0;                //清0
  90.                 on_off=0;        //开关标志清0
  91.                 LED=0;        //恢复LED显示
  92.         }
  93. }
  94. void main()
  95. {
  96.         P3M0 = 0x00;
  97.         P3M1 = 0x00;
  98.         P5M0 = 0x00;
  99.         P5M1 = 0x00;
  100.         INTCLKO |= 0x10;//使能INT2中断
  101.         Timer0Init();//定时器0初始化函数
  102.         EA = 1;                        //使能总中断
  103.         PCON = 0x02;  //MCU进入掉电模式
  104.         _nop_();
  105.         _nop_();
  106.         _nop_();
  107.         _nop_();  
  108.         while (1)
  109.         {
  110.                 key_scan();                //按键扫描函数
  111.                 key_service(); //按键服务函数
  112.                 Shutdown();                //掉电模式函数
  113.         }
  114. }
  115. //INT2中断服务程序
  116. void INT2_Isr() interrupt 10
  117. {
  118.         INTCLKO &= 0xef;  //关闭INT2中断
  119.         on_off=1;         //开关标志置1
  120. }
  121. //T0中断服务程序
  122. void interruptTimer0() interrupt 1
  123. {
  124.         flag1ms = 1;    //1ms标志
  125. }
复制代码


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2026-04-07 13:13:23
已绑定手机

2

主题

14

回帖

46

积分

新手上路

积分
46
发表于 2026-4-7 14:00:33 | 显示全部楼层
wul*** 发表于 2026-4-5 13:44
将INT0中断唤醒程序改成INT2中断唤醒

进去就是灯长亮,按下P54键没没变呢
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:67
  • 最近打卡:2026-05-08 06:02:18
已绑定手机

3

主题

115

回帖

561

积分

高级会员

积分
561
发表于 2026-4-7 20:55:24 | 显示全部楼层
hao*** 发表于 2026-4-7 14:00
进去就是灯长亮,按下P54键没没变呢

先用这个代码把INT2调通,按一次P54键,LED翻转一次。
  1. #include <STC8G.H>
  2. sbit LED=P5^5;
  3. void INT2_Isr() interrupt 10
  4. {
  5. }
  6. void main()
  7. {
  8.         P3M0 = 0x00;
  9.         P3M1 = 0x00;
  10.         P5M0 = 0x00;
  11.         P5M1 = 0x00;               
  12.         INTCLKO = 0x10;//使能INT2下降沿中断
  13.         EA = 1;
  14.         while (1)
  15.         {
  16.                 LED = ~LED;
  17.                 PCON = 0x02;//MCU进入掉电模式
  18.                 _nop_();
  19.                 _nop_();
  20.                 _nop_();
  21.                 _nop_();
  22.         }
  23. }
复制代码
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-5-9 05:41 , Processed in 0.123654 second(s), 85 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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