香河英茂工作室 发表于 2025-1-25 13:56:08

用P3.2做I/O的第三个中断按钮程序烧录后没有效果


王昱顺 发表于 2025-1-25 14:16:12

可否给出完整的初始化程序?
有可能是没有打开对应引脚的IO中断使能?

Lkck8210 发表于 2025-1-25 23:54:40

什么型号?多少脚的芯片?
超31号中断要打补丁或重定向,做了吗?

香河英茂工作室 发表于 2025-1-26 09:13:38

王昱顺 发表于 2025-1-25 14:16
可否给出完整的初始化程序?
有可能是没有打开对应引脚的IO中断使能?

void P3_IO_Init(void)
{
        P3IM0 = 0X00;                //IO中断模式设置为了下降沿
        P3IM1 = 0Xff;
       
        P3INTE= 0X08;                //打开中断       
}

void P3_IO_ISR(void)        interrupt 40
{
        u8 intf;
       
        intf = P3INTF;
       
        if( intf )                        //判断也没有IO触发了中断
        {
                P3INTF = 0;
               
                if( intf & 0x08 )//判断是否是P33按钮按下
                {
                        passward = 1;
                        //P01 = !P01;
                }
                if( intf & 0x04 )//判断是否是P32按钮按下
                {
                        passward = 2;
                        //P01 = !P01;
                }               
        }
}


***
//main中:
        P3_IO_Init();                                                                        //IO中断初始化
        P4_IO_Init();
其他地方没变,就是I/O原例程,要做的是作业:抢答器,需要三个按键中断。

香河英茂工作室 发表于 2025-1-26 09:14:34

王昱顺 发表于 2025-1-25 14:16
可否给出完整的初始化程序?
有可能是没有打开对应引脚的IO中断使能?

感谢回复与关注。

香河英茂工作室 发表于 2025-1-26 09:24:16

Lkck8210 发表于 2025-1-25 23:54
什么型号?多少脚的芯片?
超31号中断要打补丁或重定向,做了吗?

感谢关注,是AI8051U V1.2 实验箱,第14集I/O中断例程的作业:抢答器,31号中断打补丁或重定向,例程能调的通,没有报错,两个按键的烧录例程没有问题,三个按键时P32/P34/P35都试过,用一个Init P3,两个P3.3/P3.2,是不是一个中断定义,控制不了多个端口呢?

王昱顺 发表于 2025-1-26 09:39:52

香河英茂工作室 发表于 2025-1-26 09:13
void P3_IO_Init(void)
{
        P3IM0 = 0X00;                //IO中断模式设置为了下降沿


P3IM0 = 0X00;                //IO中断模式设置为了下降沿
P3IM1 = 0Xff;

这一句错误了

你现在设置的是低电平中断,也就是端口电平为低的时候会反复重复进入中断,可能导致一些奇怪的问题。
改为
P3IM0 = 0X00;                //IO中断模式设置为了下降沿
P3IM1 = 0X00;
再试一下

香河英茂工作室 发表于 2025-1-27 11:08:23

王昱顺 发表于 2025-1-26 09:39
P3IM0 = 0X00;                //IO中断模式设置为了下降沿
P3IM1 = 0Xff;



感谢分享,我这就试试。

香河英茂工作室 发表于 2025-1-27 13:32:33

王昱顺 发表于 2025-1-26 09:39
P3IM0 = 0X00;                //IO中断模式设置为了下降沿
P3IM1 = 0Xff;



感谢关注,试了P3.2/P3.3/P3.4/P3.5不能同时控制数码管和LED,不知道为什么。不知道知道是不是端口冲突,还是一个声明P3端口,下面的具体端口不能使用一个定义。

王昱顺 发表于 2025-1-27 16:26:38

香河英茂工作室 发表于 2025-1-27 13:32
感谢关注,试了P3.2/P3.3/P3.4/P3.5不能同时控制数码管和LED,不知道为什么。不知道知道是不是端口冲突, ...

只要按下按键能有效果就说明IO中断没有问题,至于不能同时控制的问题大概是程序的逻辑问题
页: [1] 2
查看完整版本: 用P3.2做I/O的第三个中断按钮程序烧录后没有效果