求助:单片机问题

来源:百度知道 编辑:UC知道 时间:2024/06/28 08:53:30
本人用的芯片是89S51的开发板做实验,程序能正常的写入,但是工作不正常,出现个奇怪的故障,基本排除开发板的问提,现象是:比如做一个P1.0口做一个每隔一秒取反一次的实验,只能输出两次(取反两次),然后LED就不正常了,软件写的没有问题,是否是单片机的问题,有没有高手们遇到过哪怕就简单的程序也会出这个问题:

例:这样的程序也无法正常执行,只能正常两秒左右,就不执行了

#include <reg51.h>
sbit P1_0=P1^0;
unsigned char i;
void main()
{
EA=1;
ET0=1;
TMOD=0x01;
TR0=1;
TH0=0x3C;
TL0=0xB0;
i=0x14;
while(1);
}
void timer0() interrupt 1
{
TH0=0x3C;
TL0=0xB0;
while(i==0)
{
i=0x14;
P1_0=!P1_0;
}
i--;

}

软件没有问题,请问那位高手遇到过这样的问题
有加分!

按下面的试下,不行加我的百度HI

#include <reg51.h>
sbit P1_0=P1^0;
unsigned char i;
void main()
{
i=0x14;
ET0=1;
TMOD=0x01;
TR0=1;
TH0=0x3C;
TL0=0xB0;
EA=1;
while(1);
}
void timer0() interrupt 1
{
TH0=0x3C;
TL0=0xB0;
if(i==0)
{
i=0x14;
P1_0=!P1_0;
}
i--;

}

你如何排除软件的问题呢?
这是全部的代码吗

粗看是程序问题
注意最后中断中i--;后的结果,和堆栈的配置及中断入口数据保护,
硬件没问题

你用汇编随便写个试试一定可以,硬件不会出这种问题(强调:一定不要怀疑硬件)
最大的问题可能在:1、刚说的堆栈,及栈保护问题;2、很小的可能在编译器上,但很小!

我也不会!

void main()
{
EA=1;
ET0=1;
TMOD=0x01;

TH0=0x3C;
TL0=0xB0;
i=0x14;
TR0=1; 放这试下
while(1);
}