c51程序在52单片机上可以运行,在51单片机上运行不了。求高手回答,谢谢

#include <reg52.h>

sbit FEED = P3^5;

void main()
{
TMOD=0x11;
//使用定时器T0,设为16位定时器(工作方式1)
//晶振11.0592M,中断时间T=(2^16-19456)×12/11.0592=50ms
TH0=0x4C;//设置定时器T0初值19456=4C00H
TL0=0x00;
PT0=1;//设置定时器T0中断为高优先级
TR0=1;//定时0开始
ET0=1;//允许定时器T0中断
EA=1;
while(1);
}

//=======================================================================================
// T0定时器中断服务程序,喂看门狗
//=======================================================================================
void Timer0_Int() interrupt 1 using 0
{
TR0=0;//定时0停止
ET0=0;//关闭定时器T0中断

//设置定时初值19456+5=4C05H (弥补中断响应及重新赋值间的时间间隔+5)
TH0=0x4C;
TL0=0x05;
FEED=~FEED;//喂看门狗

TR0=1;//定时0开始
ET0=1;//允许定时器T0中断
}这段程序在52单片机上可以跑,但是在华邦的W78E516上却不运行。但是那片W78E516的51单片机却可以跑汇编编写的程序。请高手帮忙回答一下

78E516也有内部看门狗的,而且还有几个寄存器是52里没有的,下面是我改过的REG52.h
另外,78E516的ROM区前4K是用于BOOT的,如果里面的程序没有跳出来的话,就永远进不了你的应用程序区了,好好看看CHPENR 那几个寄存器的使用方式。
/*
*-----------------------------------------------------------------------------
* Copyright (c) KEIL ELEKTRONIK GmbH and Franklin Software, Inc., 1987-1992
*-----------------------------------------------------------------------------
*/
/* 8052 Processor Declarations */

/* BYTE Registers */
#ifndef POD8751
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr P4 = 0xD8;
#endif

#ifdef POD8751
sfr P0 = 0xC0;
sfr P1 = 0x90;
sfr P2 = 0xD8;
sfr P3 = 0xC8;
#endif

sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;

/* 8052 Extensions */
sfr T2CON = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;

/*W78E516*/
sfr CHPENR = 0xf6;
sfr SFRAH = 0xc5;
sfr SFRAL = 0xc4;
sfr SFRFD = 0xc6;
sfr SFRCN = 0xc7;
sfr CHPCON = 0xbf;

/* BIT Registers */
/* PSW */
sbit CY = 0xD7;
sbit AC = 0xD6;
sbit F0 = 0xD5;
sbit RS1 = 0xD4;
sbit RS0 = 0xD3;
sbit OV = 0xD2;
sbit P = 0xD0;

/* TCON */
sbit TF1 = 0x8F;
sbit TR1 = 0x8E;
sbit TF0 = 0x8D;
sbit TR0 = 0x8C;
sbit IE1 = 0x8B;
sbit IT1 = 0x8A;
sbit IE0 = 0x89;
sbit IT0 = 0x88;

/* IE */
sbit EA = 0xAF;
sbit ES = 0xAC;
sbit ET1 = 0xAB;
sbit EX1 = 0xAA;
sbit ET0 = 0xA9;
sbit EX0 = 0xA8;

/* IP */
sbit PS = 0xBC;
sbit PT1 = 0xBB;
sbit PX1 = 0xBA;
sbit PT0 = 0xB9;
sbit PX0 = 0xB8;

#ifndef POD8751
/* P3 */
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;
#endif
#ifdef POD8751
sbit RD = 0xCF;
sbit WR = 0xCE;
sbit T1 = 0xCD;
sbit T0 = 0xCC;
sbit INT1 = 0xCB;
sbit INT0 = 0xCA;
sbit TXD = 0xC9;
sbit RXD = 0xC8;
#endif

/* SCON */
sbit SM0 = 0x9F;
sbit SM1 = 0x9E;
sbit SM2 = 0x9D;
sbit REN = 0x9C;
sbit TB8 = 0x9B;
sbit RB8 = 0x9A;
sbit TI = 0x99;
sbit RI = 0x98;

/* 8052 Extensions */
/* IE */
sbit ET2 = 0xAD;

/* IP */
sbit PT2 = 0xBD;

/* P1 */
sbit T2EX = 0x91;
sbit T2 = 0x90;

/* T2CON */
sbit TF2 = 0xCF;
sbit T2IP = 0xCE;

sbit RCLK = 0xCD;
sbit T2IE = 0xCD;

sbit TCLK = 0xCC;
sbit T2RSE = 0xCC;

sbit BGEN = 0xCB;
sbit TR2 = 0xCA;
sbit C_T2 = 0xC9;
sbit CP_RL2= 0xC8;

sfr AUXR = 0x8E;

sfr WDT_CONTR = 0xe1;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-18
这种情况一般是编译器的问题,还有C编译器中,有没有堆栈初始化设置呢?建议你在程序中做一个堆栈初始化。
第2个回答  2012-04-18
51没有内部看门狗吧
第3个回答  2012-04-18
俩芯片不一样。。。。