关于NEC中断的小问题,高手进来帮帮忙看看.谢谢
#defineuintunsigned int#pragma interrupt INTTM50 timer50 /*TIMER50*/
#pragma sfr
#pragma EI
#pragma DI
#pragma halt
#pragma nop
#define __EI() EI()
#define __DI() DI()
void initial(void);
void main(void)
{
initial();
for(;;)
{
WDTE = 0xAC;
}
}
/***********************************************************/
void initial(void)
{
uint i;
for(i = 0; i < 1000; i++);
P4 = 0xF0;
PU4 = 0x00;
PM4 = 0x00; // 0--output1--input
TMC00 = 0x06; // T00Free-running mode
CRC00 = 0x01;
TOC00 = 0x00;
PRM00 = 0x01; // count clock 2MHz 0.5us/1
CR010 = 20000;
CR000 = 20000;
TMC50 = 0x00; // clr TM50
TCL50 = 0x05; // 8us/1
CR50 = 125;// - 1; // 1ms
TMC50 = 0x80; // start TM50
PCC = 0x00;
MOC = 0x00;
OSTS = 0x03;
// 0--permit 1---not permit
MK0L = 0xF9; // PMK1PMK0
MK0H = 0x1F; // TMMK010TMMK000TMMK50
EI();
}
/*************** interrupt service routines **************/
__interrupt void timer50(void) // 1ms
{
IF0H &= 0xDF;
P4.1=~P4.1;
}
编译下载都通过了,不知道为什么运行的时候会崩溃,好像就是进入中断一次就再也没进入了.也回不到main的主程序里去.死掉了.高手看看..谢谢 你再搞个LED,来测试一下死机的地方!估计不应该是死掉了, void main(void)
{
WDTE = 0xAC;
while(1);
{
initial();
}
}
不知道这样可以吗? 搞定啦.原来是
MK0L = 0xF9; // PMK1PMK0
MK0H = 0x1F; // TMMK010TMMK000TMMK50
这里开了几个中断,我现在用的只有一个,改成
MK0L = 0xFF;
MK0H = 0xDF; // TMMK50
只开一个50就好了. 谢谢楼上两位热心人
页:
[1]