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

[求助]

[求助]

斑竹大人,我按您说的方法写的中断子程序编译通不过。调试器是BDM,芯片是MC9S12DG128。您说的是:#pragma CODE_SEG NON_BANKED void interrupt 8 timer0(void),抱错说断地址不对。我改为:void interrupt 8 timer0(void) 编译通过了,但好象根本没有处理这个中断服务程序。


还有您说的TN101下不下来。麻烦大侠您了!帮帮我啦

2222222222222222222
你的格式不对吧?要把“#pragma CODE_SEG NON_BANKED”和“void interrupt 8 timer0(void)”分行写。
海纳百川  有容乃大
谢谢斑竹大人,小女子又要麻烦您了。以下程序想实现第1个和第8个LED交替亮灭,实现不了啊!!麻烦您帮看一下。
int i;
void main(void) {
DDRB=0xFF;
PORTB=0xFF; // 问题1:在启动初期没有外接共阴LED全灭的过程。
for(i=100;i>0;i--);
asm{
CLI; 问题2:C语言中是否有对A,B,CCR这些寄存器操作的指令。
}
TIOS=0x01;
TIE=0x01;
TCTL2=0x03;
TC0=0xFF00;
TSCR2=0x80;
TSCR1=0x80;
while(1){
DDRB=0x80;
PORTB=0x7F;
for(i=10;i>0;i--);
}
}
#pragma CODE_SEG NON_BANKED
void interrupt 8 Interrupt_TIMER0(void){
TFLG1=0x01;
TC0=0xFF00;
DDRB=0x01;
PORTB=0x01;
TCNT=0; // 问题3:在执行完中断服务后TCNT是否需要再清零,以便返回时再记数
for(i=10;i>0;i--);
asm{
RTI; //问题4:C语言是否需要中断返回的指令。
}
}
2222222222222222222
我用软件仿真试了可以进入中断,你没有中断控制位置1:TIE_C0I,并且不需要RTI,看看生成的汇编就知道了
追求想要得到的,得到我所追求的
Fetchlove同志,你仿真过中断能返回吗?谢谢!还有我的其他问题能帮忙解答一下吗?
2222222222222222222
不能返回,因为软件管不了硬件的信号,清除标志的命令TFLG1=0x01;
执行不了,因为对BDM还不是很了解,所以还没用硬件仿真


问题3:在执行完中断服务后TCNT是否需要再清零,以便返回时再记数
书上说不用清零,他自己会做得
问题2:C语言中是否有对A,B,CCR这些寄存器操作的指令。
当然有了,你不是已经在做了么,不过好像不是全都可以
问题1:在启动初期没有外接共阴LED全灭的过程。
没看懂,不好意思,呵呵……

追求想要得到的,得到我所追求的
我的标志位清了,但返回不了。一直在中断程序里循环。还有我的C里没有直接对A,B,CCR操作的。要用也是嵌汇编。还是谢谢你了!
2222222222222222222
共阴极的LED在:
DDRB=0xFF;
PORTB=0xFF;
是可以全灭的(我试过),除非硬件有不恰当的上拉电阻.
另外有两事不明白:
1DRB有必要每次用到都要重新赋值么.是不是在开始有DDRB=0XFF,后面只要对PORTB处理就可以达到同样目的?
2:中断为什么跳不出去?
关于freescale的更多信息资料,欢迎访问http://www.yuan-ying.com
耽误大家时间了,原来只是延时的问题,把中断部分的延时改长,定时器周期改为半秒就好了。
2222222222222222222
返回列表