amen 发表于 2012-11-20 16:54:31

请教:51+Proteus 仿真结果不正确

我用51定时器作个1s定时用的是50MS*20 放了2个LED 进入中断有一个,1S到有一个 ,都是时间到闪烁。可是我仿真结果,50MS定时到的比1S到的灯闪的还快。程序如下:

sbit led=P2^0;

sbit led1=P2^4;

void T0_Init () //定时器0初始化
{         
    TMOD = 0x01;   
    TH0 = (65536-50000) /256;
    TL0 = (65536-50000) %256;
    EA = 1;      
    ET0 = 1;
      
}

void Time0_Int() interrupt 1//中断处理函数:定时器中断0
{ static unsigned int c;
EA = 0;
led=~led;

TH0 = (65536-50000) /256;
TL0 = (65536-50000) %256;
c++;

if(c==20)
{ c=0;
   led1=~led1;
   //s++;
}

   EA = 1;   
}


谢谢各位!

netawater 发表于 2012-11-21 21:20:50

50ms的灯当然闪得快吧。

心飞扬 发表于 2012-11-21 21:57:13

楼上正解

amen 发表于 2012-11-22 08:43:54

netawater 发表于 2012-11-21 21:20 static/image/common/back.gif
50ms的灯当然闪得快吧。

呵呵实际情况是1S的闪的比较快

netawater 发表于 2012-11-22 10:49:18

amen 发表于 2012-11-22 08:43 static/image/common/back.gif
呵呵实际情况是1S的闪的比较快

咳,正文表述有问题。
把驱动LED电路去掉,proteus自己会显示IO口高低电平,再看看行不行。

amen 发表于 2012-11-22 15:38:48

我弄了个视频大家帮忙看下。应该是下面的灯是1S定时到,但是看起来,下面的反而闪的快。

amen 发表于 2012-11-22 15:41:29

netawater 发表于 2012-11-22 10:49 static/image/common/back.gif
咳,正文表述有问题。
把驱动LED电路去掉,proteus自己会显示IO口高低电平,再看看行不行。 ...

你好 我试了下,去掉驱动,还是1S的50MS的快,应该是程序有问题

amen 发表于 2012-11-22 15:51:54

amen 发表于 2012-11-22 15:38 static/image/common/back.gif
我弄了个视频大家帮忙看下。应该是下面的灯是1S定时到,但是看起来,下面的反而闪的快。 ...

比较奇怪的是,我用示波器测波形   P2.4的周期的确是P2.0的20倍,但不知道为什么P2.4的波形跑的非常快

amen 发表于 2012-11-22 16:23:49

还有我测了下P2.0的周期为 5MS 而不是50MS 感觉应该是初值设错了。我的晶振 11.0592M初值现在 TH0 = (65536-46080) /256;
    TL0 = (65536-46080) %256;

amen 发表于 2012-11-23 09:12:16

初步确定为初值设的有问题,希望得到大家的帮助

error_dan 发表于 2012-11-23 09:46:10

amen 发表于 2012-11-22 15:51 static/image/common/back.gif
比较奇怪的是,我用示波器测波形   P2.4的周期的确是P2.0的20倍,但不知道为什么P2.4的波形跑的非常快 ...

这不对的么...顺便,仿真的效果只能定性不能定量的,说不定只是显示的问题.

跑的快的问题,用示波器的one-shot模式可以解决.

netawater 发表于 2012-11-23 10:07:08

amen 发表于 2012-11-22 16:23 static/image/common/back.gif
还有我测了下P2.0的周期为 5MS 而不是50MS 感觉应该是初值设错了。我的晶振 11.0592M初值现在 TH0 = (655 ...

无符号16为整型最大值该是65535吧。

jssd 发表于 2012-11-23 10:14:04

我同意11楼的说法,电脑的问题,以前模拟蜂鸣器的时候发音也很慢。估计电脑太烂处理不过来

amen 发表于 2012-11-23 10:38:52

error_dan 发表于 2012-11-23 09:46 static/image/common/back.gif
这不对的么...顺便,仿真的效果只能定性不能定量的,说不定只是显示的问题.

跑的快的问题,用示波器的one-s ...

用one-shot 跑的不快了 谢谢。但是P2.0口本譔是50MS高,50MS低,用示波器测到的只有5MS高 5MS低,导致P2.4口上为100MS高,100MS低,感觉是定时器初值没写对。
对了,电压幅度倒是够了 接近5V

amen 发表于 2012-11-23 10:41:55

netawater 发表于 2012-11-23 10:07 static/image/common/back.gif
无符号16为整型最大值该是65535吧。

恩 这也是一个问题 谢谢

amen 发表于 2012-11-23 10:42:41

jssd 发表于 2012-11-23 10:14 static/image/common/back.gif
我同意11楼的说法,电脑的问题,以前模拟蜂鸣器的时候发音也很慢。估计电脑太烂处理不过来 ...

就是这个周期还不对

amen 发表于 2012-11-23 10:56:54

终于找到问题了。我的程序中还有串口,我还开了,定时器1来产生串口波特率。两个地方分别写了TMOD,并且写的还不一样,定时器乱了。改一致后,结果正常了。谢谢各位的帮助。{:handshake:}

netawater 发表于 2012-11-23 16:15:28

amen 发表于 2012-11-23 10:56 static/image/common/back.gif
终于找到问题了。我的程序中还有串口,我还开了,定时器1来产生串口波特率。两个地方分别写了TMOD,并且写 ...

晕倒,下次把程序贴完整啊!!!!!

amen 发表于 2012-11-24 17:33:45

netawater 发表于 2012-11-23 16:15 static/image/common/back.gif
晕倒,下次把程序贴完整啊!!!!!

恩 谢谢 主要是在调这一块 没想到其它的 后来一看 才发现那也初始化了

netawater 发表于 2012-11-25 13:42:59

amen 发表于 2012-11-24 17:33 static/image/common/back.gif
恩 谢谢 主要是在调这一块 没想到其它的 后来一看 才发现那也初始化了

哎,你搞定了就好。
页: [1]
查看完整版本: 请教:51+Proteus 仿真结果不正确