打印

请教keil c51中中断函数

[复制链接]
6232|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jt4117|  楼主 | 2009-11-18 14:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
chen3bing| | 2009-11-18 14:47 | 只看该作者
看反汇编代码。。。。

使用特权

评论回复
板凳
jt4117|  楼主 | 2009-11-18 14:52 | 只看该作者
反汇编代码? 看了有用吗?
我的意思是我的程序是c语言写的,只有其中的外部中断0,我想用汇编来写。
普通函数的汇编写法我会。 就是建立一个.A51文件。然后在里面写汇编代码,声明,之后在想用的地方声明一下就可以使用了。 但是中断函数不一样,我不知道如何去声明!!

使用特权

评论回复
地板
airwill| | 2009-11-18 16:43 | 只看该作者
也是 .A51 文件. 入口地址要强制设定(根据中断号)

使用特权

评论回复
5
因特网用户| | 2009-11-18 18:48 | 只看该作者
LZ  我告诉你一个简单的办法
新建一个文件,用C文件的格式输如中断函数,然后再工程管理窗口,右击该文件,选择option for “filename”,然后再properties属性页中选择“generate assembler SRC file”,之后编译,在工程文件目录下找到“filename.SRC”文件,记事本打开,这个就是该中断函数的汇编文件,这个文件的命名格式符合C51的调用规则,你只要修改这个文件,然后建一个.A51的文件,把修改后的代码拷贝进去,一起编译就可以了
这种方法比较简单,不必考虑命名规则等问题,如果带参数的普通函数就更方便了,完全符合参数传递和返回值传递等规则

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
jt4117 + 1
6
冷漠| | 2009-11-18 20:14 | 只看该作者
给你个TEST1.A51宏汇编框架,填入你的汇编程序之后,放入项目组,和你的C程序XXX.C一起编译、连接即可。

?PR?Timer0?TEST1   SEGMENT CODE
        PUBLIC        Timer0

CSEG        AT        0000BH
        LJMP        Timer0

        RSEG  ?PR?Timer0?TEST1
        USING        0
Timer0:
        MOV  TH0,#04CH  ;像这样加入你的汇编语言就行了
       .......
       ......   
        RETI        
        END

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
jt4117 + 1
7
冷漠| | 2009-11-18 20:23 | 只看该作者
INT0中断向量在0003H ?
那下面这句要改:
CSEG  AT   00003H

使用特权

评论回复
8
xwj| | 2009-11-18 20:33 | 只看该作者
照5楼说的去做最简单

使用特权

评论回复
9
冷漠| | 2009-11-18 20:54 | 只看该作者
本帖最后由 冷漠 于 2009-11-18 20:57 编辑

学了一年,5 楼的方法楞没学会。6楼的框架是从下面TEST1.C来的。

#pragma  src(test1.a51)
//   #include <reg52.h>

void Timer0 (void) interrupt 0
{
        TH0=0x4c;
        TL0=0x00;               

}

直接编译,即得到TEST1.A51。实际上如果SRC后面不加(目标名)默认得到TEST1.src,直接当做汇编程序和.C 一起编译即可,不用修改为 .a51。KEIL默认TEST1.SRC和TEST1.A51 等效。

使用特权

评论回复
10
g0tazu| | 2009-11-18 21:51 | 只看该作者
学习分享。。。

使用特权

评论回复
11
jt4117|  楼主 | 2009-11-18 22:47 | 只看该作者
谢谢各位了。明天上班试一试!!

使用特权

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

本版积分规则

234

主题

2897

帖子

1

粉丝