Board logo

标题: 请教08中断和子程序 [打印本页]

作者: cddyzfc    时间: 2007-7-21 20:18     标题: 请教08中断和子程序

请教斑竹,下面的程序在中断允许时 w=(float)(admid(0x2c));和 y=(float)(admid(0x3c));执行不正常,当中断屏蔽后就正常了!

unsigned int admid(unsigned char channel)
{
unsigned int i,j,k,tmp;
return tmp;
}
void main(void)
{
int PI;
float w,y;
w=(float)(admid(0x2c));//0x68;//
Delay_ms(5);
y=(float)(admid(0x3c));//0xa8;//
Delay_ms(10);
}
interrupt 6 void _CH0F_Interrupt(void)
{
f1=1;
T1SC;
T1SC_TOF=0;
}
作者: sideline    时间: 2007-7-22 16:33

w=(float)(admid(0x2c));和 y=(float)(admid(0x3c));执行时间用的时间较长,执行过程中被中断打断了
作者: cddyzfc    时间: 2007-7-22 17:44

楼上请教:
中断结束后应该继续执行呀!但是每次w=(float)(admid(0x2c));和 y=(float)(admid(0x3c));执行结果都不对,如果在Delay_ms(10);语句上设断点,感觉停在那里不运行,只有复位才执行一次,再停下又重复上面情况?

作者: strongchen    时间: 2007-7-23 10:04

单步运行时的情况怎样?具体是什么芯片?你进的中断是否就是所清标志的中断?
作者: cddyzfc    时间: 2007-7-23 20:20

在Delay_ms(10);语句上设断点,单步每次都进入中断,无法继续运行,同样在Delay_ms(10);语句上设断点,全速运行都不可以始终在那里,无法执行下一条语句,我用的芯片是908GP32,每次进入的中断就是上面程序中给出的中断。请版主指点,先谢过了
作者: cddyzfc    时间: 2007-7-23 21:00

我又试着在y=(float)(admid(0x3c));//0xa8;//和Delay_ms(10);上都设断点,做全速运行时也始终停在y=(float)(admid(0x3c));//0xa8;//上,不运行;如果把y=(float)(admid(0x3c));//0xa8;//上的断点取消就可以继续运行,停到下一个断点上;如果屏蔽中断一切正常,我用的仿真机硬件是复旦大学的SEMV-HC08GJ,软件是code warrior3.0同时安装了复旦大学提供的一个C编译调试GDI接口软件.

[此贴子已经被作者于2007-7-23 21:00:14编辑过]


作者: strongchen    时间: 2007-7-24 09:54

把整个project打包贴出来看看吧。
作者: cddyzfc    时间: 2007-7-24 15:59

不好意思,程序有点乱请版主指点http://bbs.chinaecnet.com/uploadImages/716.rar

[此贴子已经被作者于2007-7-24 15:59:23编辑过]


作者: strongchen    时间: 2007-7-25 10:53

既然屏蔽中断就一切正常,你可以先把所有的中断都关闭,然后一个一个地开启,看看问题到底出在那个中断上。IRQ中断是最大的怀疑对象。
作者: cddyzfc    时间: 2007-7-25 18:53

IRQ和定时器中断都出现一样的问题,会不会是仿真机有问题

 

[此贴子已经被作者于2007-7-25 18:53:13编辑过]


作者: strongchen    时间: 2007-7-26 10:15

你的IRQ是否一直为低?或者悬空,有很多干扰进去?定时中断的周期是否很短?
作者: strongchen    时间: 2007-7-30 10:34

问题的具体现象是什么?
作者: cddyzfc    时间: 2007-7-30 14:08

#include /* for EnableInterrupts macro */
#include /* include peripheral declarations */


void wait(uint t) //延时子程序
{while(t>0)t--;
}
void Delay_ms(unsigned char i)
{ unsigned char j;
unsigned char u;
for(j=0;j for(u=0;u<=250;u++) ;
}

void sys_init() //系统初始化
{CONFIG2=0x01;
CONFIG1=0x1d;
PCTL=0x00;
PCTL=0x02;
PMSH=0x03;
PMSL=0x84;
PMRS=0xc0;
PCTL_PLLON=1;
PBWC_ACQ=1;
PCTL_BCS=1;
T1SC=0x70;
T1SC0=0x3A;
T1MODH=0x0F;
T1MODL=0xA0;
T1CH0H=0x07;
T1CH0L=0xD0;
T1CH1H=0x07;
T1CH1L=0xD0;
EnableInterrupts;
}
void main(void) {
sys_init();
T1SC_TSTOP=0;
while(1)
{ Delay_ms(10);
wait(10);
asm(NOP);}

// EnableInterrupts; /* enable interrupts */
/* include your code here */


}

interrupt 6 void _CH0F_Interrupt(void)
{
//f1=1;//PWMbit=!PWMbit;//T1CH0H=0x07;
//T1CH0L=0xD0;

//T1CH0H=th;
//T1CH0L=tl;
///T1SC|=0xFF;
asm(LDA T1SC);
asm(BCLR 7,T1SC);
//asm(BCLR 6,T1SC);

}
上面这段程序用P&E FCS 软件仿真没有问题,在我的仿真机上就有问题。
所以我怀疑我的仿真机了,

[此贴子已经被作者于2007-7-30 14:08:49编辑过]


作者: cddyzfc    时间: 2007-7-30 14:14

Delay_ms(10);
wait(10);
asm(NOP);
在我的仿真机上运行时,在上面三条语句上设断点时,当程序停在上一个断点,做全速运行,程序仍停在原地,不能运行到下一个断点上,
在P&E FCS 上运行时,在上面三条语句上设断点时,当程序停在上一个断点,做全速运行,程序就可以运行到下一个断点上,
作者: strongchen    时间: 2007-7-31 10:17

那把Delay_ms(10);和wait(10);去掉程序能否正常运行?





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