打印
[C语言]

谁帮我写个这种情形下函数指针数组的示范,先谢谢了.

[复制链接]
1347|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
datouyuan|  楼主 | 2016-9-8 16:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 datouyuan 于 2016-9-8 16:19 编辑

之前的一些项目只用了一个引脚变化中断,这些模块单独使用是完全正常的.
这些模块都以状态机方式做的,耗时极短.
//U2270b 曼彻斯特码 P17
void manchester_int(void) interrupt 8
{
}

//模拟温度湿度模块 P16
void wdsd_int(void) interrupt 8
{
}


现在要2个模块要同时使用,程序修改如下,也能完全从正常使用.
//U2270b 曼彻斯特码 P17
void manchester_int(void)
{
}

//mcu模拟温度湿度模块 P16
void wdsd_int(void)
{
}

//u8P1是全局变量,存的是上次中断P1的值
//P1WKUP 使能对应引脚中断
void p1_change_int(void) interrupt 8
{
        uint8 temp=u8P1;//读P1端口值
        u8P1=P1;                //存P1端口值,以供其他模块使用
        temp=temp^u8P1;        //对应位为1表示P1端口对应位发生了引脚变化

        if(P1WKUP & temp & 0x80) manchester_int();
        if(P1WKUP & temp & 0x40) wdsd_int();
}


假如有8个功能完全不同的模块要使用8个引脚中断,能否用一种统一的方法做?
void p1_change_int(void) interrupt 8 
{
        uint8 i=0x01;
        uint8 j=0;
        uint8 temp=u8P1;
        u8P1=P1;
        temp=temp^u8P1;//
        do{
                if(i & P1WKUP & temp)
                {
                        //可否根据i或j的值直接调用不同的函数?
                        //函数指针数组可否做到?
                }
                i<<=1;j++;
        }while(i);
}


函数指针数组可否做到?谁帮我写个这种情形下函数指针数组的示范,先谢谢了.


相关帖子

沙发
airwill| | 2016-9-8 19:43 | 只看该作者
引脚 IO 口没有办法用统一的指针来操作, 因为 IO 口指令不支持间接寻址

使用特权

评论回复
板凳
datouyuan|  楼主 | 2016-9-9 09:34 | 只看该作者
airwill 发表于 2016-9-8 19:43
引脚 IO 口没有办法用统一的指针来操作, 因为 IO 口指令不支持间接寻址

可以使用变量i或j操作,不一定非用IO口.
i<<=1;j++;

使用特权

评论回复
地板
416356084| | 2016-9-9 11:27 | 只看该作者
datouyuan 发表于 2016-9-9 09:34
可以使用变量i或j操作,不一定非用IO口.
i

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:maowenyuan@126.com

31

主题

1081

帖子

9

粉丝