Board logo

标题: 在汇编中是怎样实现中断的? [打印本页]

作者: aoxue525    时间: 2006-3-20 19:45     标题: 在汇编中是怎样实现中断的?

在汇编中是怎样实现中断的?
是怎样进入中断的?


在codewarrior2.0下是这样设置的?


作者: seuafu2005    时间: 2006-3-21 10:32

如果用Codewarrior写的话就和C语言比较类似,在prm文件中写中断向量中的函数地址,程序中正常编写函数即可
作者: lingdukongjian    时间: 2006-3-21 15:17

可我写了
还是进不去
为什么?
我的程序是:
#include
#include

/* PORTB definitions */
#define PORTB (*((volatile unsigned char*)(0x0001)))
#define DDRB (*((volatile unsigned char*)(0x0003)))
#define RTICTL (*((volatile unsigned char*)(0x0014)))
#define RTIFLG (*((volatile unsigned char*)(0x0015)))

/* RTI definitions */


/*----------------中断服务程序------------------ */
#pragma CODE_SEG NON_BANKED
interrupt void _RTI_ISR(void){
RTICTL=0x07; //屏蔽中断

RTIFLG=0x80; //清中断标志
PORTB=~PORTB; //输出取反
RTICTL=0x87; //使能中断

}

#pragma CODE_SEG DEFAULT

/*----------------主函数-------------------------*/
void main(void) {
DDRB=0xff; //B口输出
PORTB=0x55;

//RTIFLG=0x80; //分频比是RTR2-RTR0:111 延时65.536MS
RTICTL=0x87; //使能实时中断并清中断

EnableInterrupts; //使能总中断


while(1);
}
/*--------------主函数结束-----------------------*/
我在。PRM文件里设置如下:
NAMES END

SECTIONS
MY_RAM = READ_WRITE 0x2000 TO 0x3FFF;
MY_ROM = READ_ONLY 0xC000 TO 0xFEFF;


PLACEMENT
DEFAULT_ROM INTO MY_ROM;
DEFAULT_RAM INTO MY_RAM;
END

STACKSIZE 0x600

VECTOR 0 _Startup /* set reset vector on _Startup */

VECTOR 7 _RTI_ISR //我添加的
请问我为什么出错了
编译能通过
可进不去中断

作者: strongchen    时间: 2006-3-23 10:55

中断号“7”对吗?仔细检查一下_RTI_ISR对应的地址到底是什么?
作者: lingdukongjian    时间: 2006-3-23 13:44

是7呀
我想问知道,这个实时时钟是怎么开启的?
作者: jiazhenhua    时间: 2006-4-4 09:59

RTI实时时钟是干什么用的啊,不懂。。。
作者: BORNJIANG    时间: 2006-4-7 12:55

利用ORG 指令定义中断入口地址,然后跳转到中断服务程序




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0