本帖最后由 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);
}
函数指针数组可否做到?谁帮我写个这种情形下函数指针数组的示范,先谢谢了.
|