找回密码
 立即注册
查看: 606|回复: 9

(已使用KEIL中断扩展)STC32G8K128进不去IO中断

[复制链接]
  • TA的每日心情
    郁闷
    2024-3-30 20:16
  • 签到天数: 2 天

    [LV.1]初来乍到

    3

    主题

    9

    回帖

    83

    积分

    注册会员

    积分
    83
    发表于 2023-10-22 08:58:13 | 显示全部楼层 |阅读模式
    如题,萌新刚刚上手STC32,却困在IO口中断上一天多了,始终不知道自己错在哪里,希望大佬们能够指正如何修改(其实想问有没有例程?不是使用13号中断的)

    代码功能描述:屠龙刀开发板,用端子线给P45口外接按钮,按下接地;按钮按下的同时位于P23口的板载LED切换亮灭。
    已经困在这个问题很长时间了!!!!!!
    目前问题:进不去中断
    下面是附上的代码。
    1. #include <STC32G.H>
    2. #include <GPIO.h>
    3. //#include <DELAY.H>
    4. #include "intrins.h"              //汇编相关头文件
    5. #include "stc32_stc8_usb.h"
    6. #define MAIN_FOSC 24000000UL                //定义IRC系统时钟
    7. void sys_init()
    8. {
    9.     WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    10.     EAXFR = 1; //扩展寄存器(XFR)访问使能
    11.     CKCON = 0; //提高访问XRAM速度
    12. }
    13. void P4EXIT_Init(void)
    14. {
    15.        
    16.         P4IM0=0x00;
    17.         P4IM1=0xFF;                        //低电平中断
    18.         P4INTE=0x20;               
    19.        
    20.        
    21. }
    22. void P4EXIT_isr(void) interrupt 41
    23. {
    24.         //在中断里干什么?
    25.         static unsigned int intf;
    26.         intf=P4INTF;
    27.         if(intf==1)                //进入中断了要除标志位,必须软件清空
    28.         {
    29.                 P4INTF=0x00;
    30.                 if (intf & 0x20)        //按下P45       
    31.                 {
    32.                         P23=~P23;
    33.                 }
    34.                
    35.         }
    36.        
    37.        
    38. }
    39. void main(void)
    40. {
    41.         sys_init();
    42.         GPIO_init_pin(23,0);   //初始化单个IO引脚函数
    43.         GPIO_init_pin(45,0);   //初始化单个IO引脚函数
    44.         //GPIO_init_pin(04,0);   //初始化单个IO引脚函数
    45.         //GPIO_init_pin(35,0);   //初始化单个IO引脚函数
    46.        
    47.         P4EXIT_Init();
    48.        
    49.         EA=1;
    50.         P23=0;
    51.         //P21=0;
    52.         while(1)
    53.         {
    54.                
    55.         }
    56. }
    复制代码
    在下面就是GPIO.C的文件
    1. #include "GPIO.h"
    2. #include <STC32G.H>
    3. #include "intrins.h"              //汇编相关头文件
    4. #define uchar unsigned char
    5. #define uint unsigned int
    6. #define uint32 unsigned long
    7. #define u8 unsigned char
    8. #define u16 unsigned int
    9. #define u32 unsigned long
    10. void GPIO_init_pin(int pin,int mode)   //初始化单个IO引脚函数  
    11. {
    12.         int a,b;
    13.         u8 c[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
    14.         a=pin/10; //取得端口号
    15.         b=pin%10; //取得引脚号
    16.         switch(a)
    17.         {
    18.                 case 0:
    19.                                 switch(mode)
    20.                                 {
    21.                                         case 0:P0M0&=c[b];        P0M1&=c[b]; break;
    22.                                         case 1:P0M0|=~c[b];        P0M1&=c[b]; break;
    23.                                         case 2:P0M0&=c[b];        P0M1|=~c[b]; break;
    24.                                         case 3:P0M0|=~c[b];        P0M1|=~c[b]; break;                               
    25.                                 }
    26.                                 break;
    27.                 case 1:
    28.                                 switch(mode)
    29.                                 {
    30.                                         case 0:P1M0&=c[b];        P1M1&=c[b]; break;
    31.                                         case 1:P1M0|=~c[b];        P1M1&=c[b]; break;
    32.                                         case 2:P1M0&=c[b];        P1M1|=~c[b]; break;
    33.                                         case 3:P1M0|=~c[b];        P1M1|=~c[b]; break;                               
    34.                                 }
    35.                                 break;
    36.                 case 2:
    37.                                 switch(mode)
    38.                                 {
    39.                                         case 0:P2M0&=c[b];        P2M1&=c[b]; break;
    40.                                         case 1:P2M0|=~c[b];        P2M1&=c[b]; break;
    41.                                         case 2:P2M0&=c[b];        P2M1|=~c[b]; break;
    42.                                         case 3:P2M0|=~c[b];        P2M1|=~c[b]; break;                               
    43.                                 }
    44.                                 break;
    45.                 case 3:
    46.                                 switch(mode)
    47.                                 {
    48.                                         case 0:P3M0&=c[b];        P3M1&=c[b]; break;
    49.                                         case 1:P3M0|=~c[b];        P3M1&=c[b]; break;
    50.                                         case 2:P3M0&=c[b];        P3M1|=~c[b]; break;
    51.                                         case 3:P3M0|=~c[b];        P3M1|=~c[b]; break;                               
    52.                                 }
    53.                                 break;
    54.                 case 4:
    55.                                 switch(mode)
    56.                                 {
    57.                                         case 0:P4M0&=c[b];        P4M1&=c[b]; break;
    58.                                         case 1:P4M0|=~c[b];        P4M1&=c[b]; break;
    59.                                         case 2:P4M0&=c[b];        P4M1|=~c[b]; break;
    60.                                         case 3:P4M0|=~c[b];        P4M1|=~c[b]; break;                               
    61.                                 }
    62.                                 break;
    63.                 case 5:
    64.                                 switch(mode)
    65.                                 {
    66.                                         case 0:P5M0&=c[b];        P5M1&=c[b]; break;
    67.                                         case 1:P5M0|=~c[b];        P5M1&=c[b]; break;
    68.                                         case 2:P5M0&=c[b];        P5M1|=~c[b]; break;
    69.                                         case 3:P5M0|=~c[b];        P5M1|=~c[b]; break;                               
    70.                                 }
    71.                                 break;
    72.                 case 6:
    73.                                 switch(mode)
    74.                                 {
    75.                                         case 0:P6M0&=c[b];        P6M1&=c[b]; break;
    76.                                         case 1:P6M0|=~c[b];        P6M1&=c[b]; break;
    77.                                         case 2:P6M0&=c[b];        P6M1|=~c[b]; break;
    78.                                         case 3:P6M0|=~c[b];        P6M1|=~c[b]; break;                               
    79.                                 }
    80.                                 break;
    81.                 case 7:
    82.                                 switch(mode)
    83.                                 {
    84.                                         case 0:P7M0&=c[b];        P7M1&=c[b]; break;
    85.                                         case 1:P7M0|=~c[b];        P7M1&=c[b]; break;
    86.                                         case 2:P7M0&=c[b];        P7M1|=~c[b]; break;
    87.                                         case 3:P7M0|=~c[b];        P7M1|=~c[b]; break;                               
    88.                                 }
    89.                                 break;
    90.                                
    91.         }
    92. }
    93. bit Get_IO(int IO)
    94. {
    95.         bit status;
    96.         switch(IO)
    97.         {
    98.                 case 00: status=P00;break;
    99.                 case 01: status=P01;break;
    100.                 case 02: status=P02;break;
    101.                 case 03: status=P03;break;
    102.                 case 04: status=P04;break;
    103.                 case 05: status=P05;break;
    104.                 case 06: status=P06;break;
    105.                 case 07: status=P07;break;
    106.                
    107.                 case 10: status=P10;break;
    108.                 case 11: status=P11;break;
    109.                 case 12: status=P12;break;
    110.                 case 13: status=P13;break;
    111.                 case 14: status=P14;break;
    112.                 case 15: status=P15;break;
    113.                 case 16: status=P16;break;
    114.                 case 17: status=P17;break;
    115.                
    116.                 case 20: status=P20;break;
    117.                 case 21: status=P21;break;
    118.                 case 22: status=P22;break;
    119.                 case 23: status=P23;break;
    120.                 case 24: status=P24;break;
    121.                 case 25: status=P25;break;
    122.                 case 26: status=P26;break;
    123.                 case 27: status=P27;break;
    124.                
    125.                 case 30: status=P30;break;
    126.                 case 31: status=P31;break;
    127.                 case 32: status=P32;break;
    128.                 case 33: status=P33;break;
    129.                 case 34: status=P34;break;
    130.                 case 35: status=P35;break;
    131.                 case 36: status=P36;break;
    132.                 case 37: status=P37;break;
    133.                
    134.                 case 40: status=P40;break;
    135.                 case 41: status=P41;break;
    136.                 case 42: status=P42;break;
    137.                 case 43: status=P43;break;
    138.                 case 44: status=P44;break;
    139.                
    140.                 case 50: status=P50;break;
    141.                 case 51: status=P51;break;
    142.                 case 52: status=P52;break;
    143.                 case 53: status=P53;break;
    144.                 case 54: status=P54;break;
    145.                 case 55: status=P55;break;
    146.                
    147.                 case 60: status=P60;break;
    148.                 case 61: status=P61;break;
    149.                 case 62: status=P62;break;
    150.                 case 63: status=P63;break;
    151.                 case 64: status=P64;break;
    152.                 case 65: status=P65;break;
    153.                 case 66: status=P66;break;
    154.                 case 67: status=P67;break;
    155.                
    156.                 case 70: status=P70;break;
    157.                 case 71: status=P71;break;
    158.                 case 72: status=P72;break;
    159.                 case 73: status=P73;break;
    160.                 case 74: status=P74;break;
    161.                 case 75: status=P75;break;
    162.                 case 76: status=P76;break;
    163.                 case 77: status=P77;break;
    164.                 default: status=1;  break; //其他情况
    165.         }
    166.         return status;
    167. }
    168. void Out_IO(unsigned char IO,bit status)
    169. {
    170.         switch(IO)
    171.         {
    172.                 case 00: P00=status;break;
    173.                 case 01: P01=status;break;
    174.                 case 02: P02=status;break;
    175.                 case 03: P03=status;break;
    176.                 case 04: P04=status;break;
    177.                 case 05: P05=status;break;
    178.                 case 06: P06=status;break;
    179.                 case 07: P07=status;break;
    180.                
    181.                 case 10: P10=status;break;
    182.                 case 11: P11=status;break;
    183.                 case 12: P12=status;break;
    184.                 case 13: P13=status;break;
    185.                 case 14: P14=status;break;
    186.                 case 15: P15=status;break;
    187.                 case 16: P16=status;break;
    188.                 case 17: P17=status;break;
    189.                
    190.                 case 20: P20=status;break;
    191.                 case 21: P21=status;break;
    192.                 case 22: P22=status;break;
    193.                 case 23: P23=status;break;
    194.                 case 24: P24=status;break;
    195.                 case 25: P25=status;break;
    196.                 case 26: P26=status;break;
    197.                 case 27: P27=status;break;
    198.                
    199.                 case 30: P30=status;break;
    200.                 case 31: P31=status;break;
    201.                 case 32: P32=status;break;
    202.                 case 33: P33=status;break;
    203.                 case 34: P34=status;break;
    204.                 case 35: P35=status;break;
    205.                 case 36: P36=status;break;
    206.                 case 37: P37=status;break;
    207.                
    208.                 case 40: P40=status;break;
    209.                 case 41: P41=status;break;
    210.                 case 42: P42=status;break;
    211.                 case 43: P43=status;break;
    212.                 case 44: P44=status;break;
    213.                
    214.                 case 50: P50=status;break;
    215.                 case 51: P51=status;break;
    216.                 case 52: P52=status;break;
    217.                 case 53: P53=status;break;
    218.                 case 54: P54=status;break;
    219.                 case 55: P55=status;break;
    220.                
    221.                 case 60: P60=status;break;
    222.                 case 61: P61=status;break;
    223.                 case 62: P62=status;break;
    224.                 case 63: P63=status;break;
    225.                 case 64: P64=status;break;
    226.                 case 65: P65=status;break;
    227.                 case 66: P66=status;break;
    228.                 case 67: P67=status;break;
    229.                
    230.                 case 70: P70=status;break;
    231.                 case 71: P71=status;break;
    232.                 case 72: P72=status;break;
    233.                 case 73: P73=status;break;
    234.                 case 74: P74=status;break;
    235.                 case 75: P75=status;break;
    236.                 case 76: P76=status;break;
    237.                 case 77: P77=status;break;
    238.                 default:  break; //其他情况
    239.         }
    240. }
    复制代码


    回复 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-3-30 20:16
  • 签到天数: 2 天

    [LV.1]初来乍到

    3

    主题

    9

    回帖

    83

    积分

    注册会员

    积分
    83
     楼主| 发表于 2023-10-22 18:08:16 | 显示全部楼层
    没人吗?
    回复 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9598

    回帖

    1万

    积分

    管理员

    积分
    14085
    发表于 2023-10-22 21:04:26 | 显示全部楼层
    周一我们研发上班,你可以先参照下,STC8H4K64TL的演示程序,
    STC32G8K64支持高、低电平中断,边沿变化
    中断
    STC32G12K128
    支持高、低电平中断,不要用边沿变化中断
    截图202310222103222482.jpg

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9598

    回帖

    1万

    积分

    管理员

    积分
    14085
    发表于 2023-10-22 21:07:13 | 显示全部楼层
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-3-30 20:16
  • 签到天数: 2 天

    [LV.1]初来乍到

    3

    主题

    9

    回帖

    83

    积分

    注册会员

    积分
    83
     楼主| 发表于 2023-10-23 12:51:04 | 显示全部楼层
    神农鼎 发表于 2023-10-22 21:04
    周一我们研发上班,你可以先参照下,STC8H4K64TL的演示程序,
    STC32G8K64支持高、低电平中断,边沿变化中断 ...

    谢谢老师,辛苦~~~
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:54
  • 签到天数: 148 天

    [LV.7]常住居民III

    27

    主题

    1379

    回帖

    4280

    积分

    论坛元老

    积分
    4280
    发表于 2023-10-23 13:45:44 | 显示全部楼层
    把这行屏蔽掉试试:

    截图202310231344465494.jpg

    或者改成:
    1. if(intf)
    复制代码


    点评

    STC8所有普通IO口都支持外部中断的延时程序: /************* 功能说明 ************** 请先别修改程序, 直接下载"interrupt.hex"测试, 主频选择11.0592MHZ. 测试正常后再修改移植. 由于使用的中断号超过了31,所  详情 回复 发表于 2023-10-23 14:06
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3093

    回帖

    6969

    积分

    超级版主

    积分
    6969
    发表于 2023-10-23 14:06:11 | 显示全部楼层
    本帖最后由 梁工 于 2023-10-23 14:59 编辑
    乘风飞扬 发表于 2023-10-23 13:45
    把这行屏蔽掉试试:

    STC8所有普通IO口都支持外部中断的演示程序:


    /*************        功能说明        **************
    请先别修改程序, 直接下载"interrupt.hex"测试, 主频选择11.0592MHZ. 测试正常后再修改移植.
    由于使用的中断号超过了31,所以KEIL编译器要拓展Keil的C代码中断号, 运行一下"拓展Keil的C代码中断号.exe"即可。

    P0~P7所有IO中断测试程序.
    P0.0~P0.7中断对应取反P1.0~P1.7输出指示。
    P1.0~P1.7中断对应取反P0.0~P0.7输出指示。
    P2.0~P2.7中断对应取反P4.0~P4.7输出指示。
    P3.0~P3.7中断对应取反P4.0~P4.7输出指示。
    P4.0~P4.7中断对应取反P2.0~P2.7输出指示。
    P5.0~P5.7中断对应取反P4.0~P4.7输出指示。
    P6.0~P6.7中断对应取反P7.0~P7.7输出指示。
    P7.0~P7.7中断对应取反P6.0~P6.7输出指示。

    由于IO有限, 本例子只设置了P0.0~P0.7和P2.0~P2.7的中断, 中断函数分别取反P1.0~P1.7和P4.0~P4.7来指示进入中断.
    用户可以根据例子随意设置自己需要的IO中断.
    主函数取反P3.3输出一个大约4KHz方波信号, 方便用户测试.

    ******************************************/


    STC8-所有普通IO的中断.rar (61.98 KB, 下载次数: 19)

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3093

    回帖

    6969

    积分

    超级版主

    积分
    6969
    发表于 2023-10-23 14:08:18 | 显示全部楼层
    本帖最后由 梁工 于 2023-10-23 15:00 编辑

    STC32所有普通IO口都支持外部中断的演示程序:


    /*************        功能说明        **************

    请先别修改程序, 直接下载"Objects"里的"interrupt.hex"测试, 主频选择11.0592MHZ. 测试正常后再修改移植.
    由于使用的中断号超过了31,所以KEIL C251编译器要拓展Keil的C代码中断号, 运行一下"拓展Keil的C代码中断号.exe"即可。

    P0~P7所有IO中断测试程序.
    P0.0~P0.7中断对应取反P1.0~P1.7输出指示。
    P1.0~P1.7中断对应取反P0.0~P0.7输出指示。
    P2.0~P2.7中断对应取反P4.0~P4.7输出指示。
    P3.0~P3.7中断对应取反P4.0~P4.7输出指示。
    P4.0~P4.7中断对应取反P2.0~P2.7输出指示。
    P5.0~P5.7中断对应取反P4.0~P4.7输出指示。
    P6.0~P6.7中断对应取反P7.0~P7.7输出指示。
    P7.0~P7.7中断对应取反P6.0~P6.7输出指示。

    由于IO有限, 本例子只设置了P0.0~P0.7和P2.0~P2.7的中断, 中断函数分别取反P1.0~P1.7和P4.0~P4.7来指示进入中断.
    用户可以根据例子随意设置自己需要的IO中断.
    主函数取反P3.3输出一个大约4KHz方波信号, 方便用户测试.

    ******************************************/

    STC32系列-所有普通IO的中断.rar (56.77 KB, 下载次数: 30)


    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9598

    回帖

    1万

    积分

    管理员

    积分
    14085
    发表于 2023-10-23 14:11:58 | 显示全部楼层
    梁工,再单独发帖,好转发

    点评

    好的!  详情 回复 发表于 2023-10-23 15:00
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3093

    回帖

    6969

    积分

    超级版主

    积分
    6969
    发表于 2023-10-23 15:00:35 | 显示全部楼层
    神农鼎 发表于 2023-10-23 14:11
    梁工,再单独发帖,好转发

    好的!
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-25 00:53 , Processed in 0.078286 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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