找回密码
 立即注册
查看: 537|回复: 7

多个IO口使用不同的中断汇编怎么写?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-07-21 01:21:16

2

主题

2

回帖

26

积分

新手上路

积分
26
发表于 2024-7-21 01:23:59 | 显示全部楼层 |阅读模式
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
               

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-02 00:29:54

10

主题

1159

回帖

5121

积分

论坛元老

积分
5121
发表于 2024-7-21 09:25:46 | 显示全部楼层
可以学习梁工的写法。

//========================================================================
// 函数: 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

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-7-21 09:46:59 来自手机 | 显示全部楼层
angmall 发表于 2024-7-21 09:25
可以学习梁工的写法。

//========================================================================

还有这个,真不知道啊。{:5_270:}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-02 00:29:54

10

主题

1159

回帖

5121

积分

论坛元老

积分
5121
发表于 2024-7-21 09:49:31 | 显示全部楼层
so*** 发表于 2024-7-21 09:46
还有这个,真不知道啊。

你都已经是元老级的人物了。

应该会知道啊。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-07-21 01:21:16

2

主题

2

回帖

26

积分

新手上路

积分
26
发表于 2024-7-21 09:49:33 | 显示全部楼层
这还是使用财用同一个中断号(13)!!我的要求是使用不同的中断号!!!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-02 00:29:54

10

主题

1159

回帖

5121

积分

论坛元老

积分
5121
发表于 2024-7-21 10:51:56 | 显示全部楼层
hrb*** 发表于 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
               
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-07-21 01:21:16

2

主题

2

回帖

26

积分

新手上路

积分
26
发表于 2024-7-21 12:10:38 | 显示全部楼层
angm*** 发表于 2024-7-21 10:51
这样的话, 要这么改。

PxISR.ASM按下面的写,好象不对!

现在就是这样的,死机!
我感觉就当是JMP的问题(跳转不在本页),改用LJMP应该差不多了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-7-22 14:16:04 | 显示全部楼层
hrb*** 发表于 2024-7-21 12:10
现在就是这样的,死机!
我感觉就当是JMP的问题(跳转不在本页),改用LJMP应该差不多了
...

你没抓到重点,汇编里面“END”表示程序到此为止。
你在每个跳转指令后面都加一个END,后面的代码就无效了。
6楼修改的部分是将你前面的“END”都屏蔽掉。
回复 支持 1 反对 0

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 01:40 , Processed in 0.163035 second(s), 100 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表