多个IO口使用不同的中断汇编怎么写?
PxISR.ASM按下面的写,好象不对!;P0 012BH 使用INT0中断入口地址 0003H
;P1 0133H 使用INT1中断入口地址 0013H
;P2 013BH 使用INT2中断入口地址 0053H
;P3 0143H 使用INT3中断入口地址 005BH
;P4 014BH 使用INT4中断入口地址 0083H
;P5 0153H 使用13号中断入口地址 006BH
CSEG AT 012BH ;P0 口中断入口地址
JMP P0INT_ISR
P0INT_ISR:
JMP 0003H ;借用 INT0 号中断的入口地址中断0
END
CSEG AT 0133H ;P1 口中断入口地址
JMP P1INT_ISR
P1INT_ISR:
JMP 0013H ;借用 INT1 号中断的入口地址中断2
END
CSEG AT 013BH ;P2 口中断入口地址
JMP P2INT_ISR
P2INT_ISR:
JMP 0053H ;借用 INT2 号中断的入口地址中断10
END
CSEG AT 0143H ;P3 口中断入口地址
JMP P3INT_ISR
P3INT_ISR:
JMP 005BH ;借用 INT3 号中断的入口地址中断11
END
CSEG AT 014BH ;P4 口中断入口地址
JMP P4INT_ISR
P4INT_ISR:
JMP 0083H ;借用 INT4 号中断的入口地址中断16
END
CSEG AT 0153H ;P5 口中断入口地址
JMP P5INT_ISR
P5INT_ISR:
JMP 006BH ;借用 13 号中断的入口地址中断13
END
可以学习梁工的写法。
//========================================================================
// 函数: AUXR_ISR(void) interrupt 13
// 描述: 扩展中断函数(中断号>=32的中断)
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2018-4-2
// 备注:
//========================================================================
u8 isr_index;
void AUXR_ISR(void) interrupt 13
{
u8 i;
switch(isr_index)
{
case 32: //0103H 波形发生器5 中断入口
//用户中断处理代码
break;
case 33: //010BH 波形发生器异常2 中断入口
//用户中断处理代码
break;
case 34: //0113H 波形发生器异常4 中断入口
//用户中断处理代码
break;
case 35: //011BH 触摸按键 中断入口
//用户中断处理代码
break;
case 36: //0123H RTC 中断入口
i = RTCIF;
RTCIF = 0; //中断标志, 0x80:闹钟中断, 0x40:日中断, 0x20:小时中断, 0x10:分钟中断, 0x08:秒中断, 0x04:1/2秒中断, 0x02:1/8秒中断, 0x01:1/32秒中断
if(i & 0x08) //秒中断
{
B_1S = 1; //用户中断处理代码
}
break;
case 37: //012BH P0口中断入口
//用户中断处理代码
break;
case 38: //0133H P1口中断入口
//用户中断处理代码
break;
case 39: //013BH P2口中断入口
//用户中断处理代码
break;
case 40: //0143H P3口中断入口
//用户中断处理代码
break;
case 41: //014BH P4口中断入口
//用户中断处理代码
break;
case 42: //0153H P5口中断入口
//用户中断处理代码
break;
case 43: //015BH P6口中断入口
//用户中断处理代码
break;
case 44: //0163H P7口中断入口
//用户中断处理代码
break;
case 45: //016BH P8口中断入口
//用户中断处理代码
break;
case 46: //0173H P9口中断入口
//用户中断处理代码
break;
default:
break;
}
}
;isr.asm
EXTRN DATA (isr_index)
CSEG AT 0103H ;32号 波形发生器5 中断入口
MOV isr_index, #32 ;标记中断号32
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 010BH ;33号 波形发生器异常2 中断入口
MOV isr_index, #33 ;标记中断号33
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 0113H ;34号 波形发生器异常4 中断入口
MOV isr_index, #34 ;标记中断号34
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 011BH ;35号 触摸按键 中断入口
MOV isr_index, #35 ;标记中断号35
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 0123H ;36号 RTC 中断入口
MOV isr_index, #36 ;标记中断号36
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 012BH ;37号 P0口中断入口
MOV isr_index, #37 ;标记中断号37
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 0133H ;38号 P1口中断入口
MOV isr_index, #38 ;标记中断号38
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 013BH ;39号 P2口中断入口
MOV isr_index, #39 ;标记中断号39
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 0143H ;40号 P3口中断入口
MOV isr_index, #40 ;标记中断号40
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 014BH ;41号 P4口中断入口
MOV isr_index, #41 ;标记中断号41
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 0153H ;42号 P5口中断入口
MOV isr_index, #42 ;标记中断号42
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 015BH ;43号 P6口中断入口
MOV isr_index, #43 ;标记中断号43
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 0163H ;44号 P7口中断入口
MOV isr_index, #44 ;标记中断号44
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 016BH ;45号 P8口中断入口
MOV isr_index, #45 ;标记中断号45
LJMP 006BH ;跳转到中断号13的向量
CSEG AT 0173H ;46号 P9口中断入口
MOV isr_index, #46 ;标记中断号46
LJMP 006BH ;跳转到中断号13的向量
END
angmall 发表于 2024-7-21 09:25
可以学习梁工的写法。
//========================================================================
还有这个,真不知道啊。{:5_270:} soma 发表于 2024-7-21 09:46
还有这个,真不知道啊。
你都已经是元老级的人物了。
应该会知道啊。 这还是使用财用同一个中断号(13)!!我的要求是使用不同的中断号!!! hrblgd 发表于 2024-7-21 09:49
这还是使用财用同一个中断号(13)!!我的要求是使用不同的中断号!!! ...
这样的话, 要这么改。
PxISR.ASM按下面的写,好象不对!
;P0 012BH 使用INT0中断入口地址 0003H
;P1 0133H 使用INT1中断入口地址 0013H
;P2 013BH 使用INT2中断入口地址 0053H
;P3 0143H 使用INT3中断入口地址 005BH
;P4 014BH 使用INT4中断入口地址 0083H
;P5 0153H 使用13号中断入口地址 006BH
CSEG AT 012BH ;P0 口中断入口地址
JMP P0INT_ISR
P0INT_ISR:
JMP 0003H ;借用 INT0 号中断的入口地址中断0
; END
CSEG AT 0133H ;P1 口中断入口地址
JMP P1INT_ISR
P1INT_ISR:
JMP 0013H ;借用 INT1 号中断的入口地址中断2
;END
CSEG AT 013BH ;P2 口中断入口地址
JMP P2INT_ISR
P2INT_ISR:
JMP 0053H ;借用 INT2 号中断的入口地址中断10
;END
CSEG AT 0143H ;P3 口中断入口地址
JMP P3INT_ISR
P3INT_ISR:
JMP 005BH ;借用 INT3 号中断的入口地址中断11
; END
CSEG AT 014BH ;P4 口中断入口地址
JMP P4INT_ISR
P4INT_ISR:
JMP 0083H ;借用 INT4 号中断的入口地址中断16
;END
CSEG AT 0153H ;P5 口中断入口地址
JMP P5INT_ISR
P5INT_ISR:
JMP 006BH ;借用 13 号中断的入口地址中断13
END
angmall 发表于 2024-7-21 10:51
这样的话, 要这么改。
PxISR.ASM按下面的写,好象不对!
现在就是这样的,死机!
我感觉就当是JMP的问题(跳转不在本页),改用LJMP应该差不多了
hrblgd 发表于 2024-7-21 12:10
现在就是这样的,死机!
我感觉就当是JMP的问题(跳转不在本页),改用LJMP应该差不多了
...
你没抓到重点,汇编里面“END”表示程序到此为止。
你在每个跳转指令后面都加一个END,后面的代码就无效了。
6楼修改的部分是将你前面的“END”都屏蔽掉。
页:
[1]