首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教一个中断处理的问题,

请教一个中断处理的问题,

请教一个问题,怎样利用ECT模块的自由时钟的溢出中断实现一个功能?比如,让portB逐次加一,怎样编写处理函数和初始化向量?小弟弄了半天还没有弄出来~惭愧ing~[em04]
木鱼石
ECT模块?
你的问题到底在哪里呢?
海纳百川  有容乃大
不管什么中断,都会有中断程序入口,在中断程序中完成你得中断任务,如为了实现PORTB加一,只需在中断程序中使用PORTB++;即可
我用的编译环境是CodeWarrior IDE 3.1,在prm文件里加上如下命令行

VECTOR ADDRESS 0xEFDE TMSK2
VECTOR 0 _Startup                          /*此行原来已有*/

入口地址放在0xEFDE因为试验板里有监控程序,把中断向量转到EF80了。

在asm文件里的处理:

TMSK2:
            INC counter      ;counter是一个计数变量每次加一,然后把它的值输出
            LDAA counter
            INCA
            STAA $0001
            
            RTI
问题在于make文件没有错误,但是   
下载程序到试验板上,程序不能运行。本来很简单的问题……
木鱼石
可以参考一下这个程序。自己写的一个用定时器0产生中断跑马灯。可以运行 main函数: #include /* common defines and macros */ #include /* derivative information */ #define TICK_CNTS 50000 #pragma LINK_INFO DERIVATIVE "mc9s12dp256b" int counter; void interrupt TimerOverflow(void) { /* This function changes the LEDs bargraph display */ counter++; if (counter > 8) counter=0; if (counter == 8) PORTB = 0x7e; /* LEDs' lightshow */ if (counter == 7) PORTB = 0xbd; if (counter == 6) PORTB = 0xdb; if (counter == 5) PORTB = 0xe7; if (counter == 4) PORTB = 0xe7; if (counter == 3) PORTB = 0xdb; if (counter == 2) PORTB = 0xbd; if (counter == 1) PORTB = 0x7e; TFLG1=0x01; TC0=TCNT + TICK_CNTS; } void main(void) { TSCR1 = 0x80; /* enable timer TCNT */ TSCR2 = 0x07; /* TCNT prescaler setup */ counter = 0; TIOS |= 0x01; /* Make channel an output compare */ TC0 = TCNT + TICK_CNTS ; /* Set TC0 to present time + OS_TICK_OC_CNTS */ TCTL1 |= 0x01; /* set timer control reg */ TIE |= 0x01; DDRB=0xff; /* PTB as output */ PORTB=0xff; /* LEDs off */ asm{ nop } EnableInterrupts; for(;;) {;} /* wait forever */ } 再只要在prm文件最下面里面添加一句 VECTOR ADDRESS 0xEFEE TimerOverflow
如果你爱我,请告诉我!
溢出中断应该很容易解决的,一个简单的对实时要求不是很严的用C就可以了,搞个汇编还是比较容易出问题的,我们的变速箱用全部的C代码控制,4千多行,都能满足实时性要求,更何况普通的溢出处理呢,用C就很好啊
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
返回列表