tanguicaicai 发表于 2014-5-17 11:33:34

STC单片机的一个怪问题!

typedef struct
{
u16Quality;//质量
u8   SetNum;
u8   NowNum;///////无用没有的话会重启---无解
u8   RunNowNum;
u8   Timer;
u8   RunStatus;
u8   Select;
}RunData;
extern RunData xdata My_RunData;


LcdShowNum(56,0,3,Data->Quality,0);
LcdDislayChar(0,2,"设数:",0);
LcdShowNum(40,2,2,Data->SetNum,0);
LcdDislayChar(72,2,"现数:",0);
//LcdShowNum(112,2,2,(u8)Data->NowNum,0);//运行这个会重启
//LcdShowNum(112,2,2,(u8)Data->RunNowNum,0);

先前我用的是STC11的 一下可以运行LcdShowNum(112,2,2,(u8)Data->NowNum,0); 能过这里,也就是上电5-6次 能4次能运行这里不重启!
我还以为单片机坏了 我又换了几块,问题还是一样的!现在我用STC12的。过到这里就会重启!找不到原因是为什么?然后我就在结构里了再
定义一个 u8   RunNowNum; 而不使用NowNum这个数据,就没事!但是不能把NowNum去了!去了还是一样!各位大神有遇到的不?我用的
是keil 2 直接加STC头文件的法子!

tanguicaicai 发表于 2014-5-17 11:40:29

{:mad:}{:mad:}{:mad:}{:mad:}{:mad:}{:mad:}{:mad:}

maxwelllls 发表于 2014-5-17 12:51:00

Data这个变量哪里来的?怀疑是外部ram的问题 或者访问超限了

tanguicaicai 发表于 2014-5-17 13:35:05

maxwelllls 发表于 2014-5-17 12:51
Data这个变量哪里来的?怀疑是外部ram的问题 或者访问超限了

结构体指针!

lcw_swust 发表于 2014-5-17 17:53:27

如果单片机没有xdata但是你用了xdata那就有可能出现奇怪的问题。
具体要看单片机手册。

xiaobendan 发表于 2014-5-17 18:06:08

这个可以看看汇编,看看到底走到哪儿产生的复位了,另外你在用SetNum的时候怎么不使用(u8)?

jlhgold 发表于 2014-5-17 19:12:26

直接指向 结构体中间的变量?这也行么?如果不是那么Data这个变量也是RunData的结构体?

tanguicaicai 发表于 2014-5-19 08:44:02

lcw_swust 发表于 2014-5-17 17:53
如果单片机没有xdata但是你用了xdata那就有可能出现奇怪的问题。
具体要看单片机手册。 ...

这个是有的!

tanguicaicai 发表于 2014-5-19 08:45:18

xiaobendan 发表于 2014-5-17 18:06
这个可以看看汇编,看看到底走到哪儿产生的复位了,另外你在用SetNum的时候怎么不使用(u8)? ...

这个没试?因为上面的没有问题?就没有试!

tanguicaicai 发表于 2014-5-19 08:46:51

jlhgold 发表于 2014-5-17 19:12
直接指向 结构体中间的变量?这也行么?如果不是那么Data这个变量也是RunData的结构体? ...

原形是这样的
void RunWindow(RunData *Data)
{

LcdDislayChar(0,0,"加注量:   g",0);
LcdShowNum(56,0,3,Data->Quality,0);
LcdDislayChar(0,2,"设数:",0);
LcdShowNum(40,2,2,Data->SetNum,0);
LcdDislayChar(72,2,"现数:",0);
//LcdShowNum(112,2,2,(u8)Data->NowNum,0);//运行这个会重启
LcdShowNum(112,2,2,(u8)Data->RunNowNum,0);

zhugean 发表于 2014-5-19 09:03:11

换个芯片试试,可能是这个芯片的某块RAM损坏了
记得告诉我答案哦

tanguicaicai 发表于 2014-5-19 09:19:33

zhugean 发表于 2014-5-19 09:03
换个芯片试试,可能是这个芯片的某块RAM损坏了
记得告诉我答案哦

这个问题!有过!先前几块芯片!有的能过~上一下电能过!有的不行~~以后不敢用了!

tigerman520 发表于 2014-5-19 09:28:08

是不是看门狗复位了。

xiaobendan 发表于 2014-5-19 10:49:13

STC12C5A60S2我用过很多了,除了有一次新片子就有两个脚是短路的,还有一个晶振改成外部后不能起振的以外,没有发现其他问题。
我的程序的RAM使用:Program Size: data=38.2 xdata=615 code=51091

tanguicaicai 发表于 2014-5-19 14:02:33

tigerman520 发表于 2014-5-19 09:28
是不是看门狗复位了。

不会 我都还没放狗!以前做个项目时也出现过!

tanguicaicai 发表于 2014-5-26 11:34:21

当这个My_RunData.RunNowNum=0;也会复位!不知为何?

tanguicaicai 发表于 2014-5-26 11:48:52

以前与时不用结构体?没出现这么多的事来!难道和这个有关系?

jzkn 发表于 2014-5-26 11:54:51

没遇到过,你再多测试一下,屏蔽代码什么的,另外可以引串口到电脑上看打印信息。我用过STC12C5A08AD和STC12LE4052AD,目前出货的比较多,开发过程中还没遇到这个情况。这个STC除了写程不稳定,比较挑电脑和写程器以外,其他貌似还凑合。

tanguicaicai 发表于 2014-5-26 14:04:56

RunData xdata My_RunData=
{
100,
20,
0,//////无用
20,
10,
3,
3,
};
这个是结构体的初始化的?现在是只要改了这个初始化的值和现在的不一样,就会复位!重新赋值只要小于现在的值也不行,也会复位!
这是为什么?我这样用法不对还是?
   IDATA   0021H   0001H   UNIT         ?STACK
堆栈也没溢出!

tanguicaicai 发表于 2014-5-26 15:01:06

木有遇到过的大神?

wenhenshi 发表于 2014-5-26 17:20:55


把这个选上试试

tanguicaicai 发表于 2014-5-27 09:06:35

wenhenshi 发表于 2014-5-26 17:20
把这个选上试试

谢谢 !试试看啊 !

叶大鹏 发表于 2014-5-27 09:12:53

tanguicaicai 发表于 2014-5-27 09:06
谢谢 !试试看啊 !

楼主是做产品开发还是做做实验啊?
要是做产品开发的话还是建议你不要用STC的单片机了,选个能在线调试的,比如STM8,比这个资源多,还便宜。

tanguicaicai 发表于 2014-5-27 16:43:49

叶大鹏 发表于 2014-5-27 09:12
楼主是做产品开发还是做做实验啊?
要是做产品开发的话还是建议你不要用STC的单片机了,选个能在线调试的 ...

准备换了!STM8要用外部时钟的话抗干扰也不行?

叶大鹏 发表于 2014-5-27 18:38:07

tanguicaicai 发表于 2014-5-27 16:43
准备换了!STM8要用外部时钟的话抗干扰也不行?

不管再这么说ST也是国际大厂,比STC做的肯定要好。其实要是对成本不是十分的敏感可以选择STM32F0系列的。
页: [1]
查看完整版本: STC单片机的一个怪问题!