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