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

2020-02-02 09:17发布

我用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;   
}



谢谢各位!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
amen
1楼-- · 2020-02-04 04:24
error_dan 发表于 2012-11-23 09:46
这不对的么...顺便,仿真的效果只能定性不能定量的,说不定只是显示的问题.

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


用one-shot 跑的不快了 谢谢。但是P2.0口本譔是50MS高,50MS低,用示波器测到的只有5MS高 5MS低,导致P2.4口上为100MS高,100MS低,感觉是定时器初值没写对。
对了,电压幅度倒是够了 接近5V
amen
2楼-- · 2020-02-04 04:43
 精彩回答 2  元偷偷看……
amen
3楼-- · 2020-02-04 07:57
jssd 发表于 2012-11-23 10:14
我同意11楼的说法,电脑的问题,以前模拟蜂鸣器的时候发音也很慢。估计电脑太烂处理不过来 ...

就是这个周期还不对
amen
4楼-- · 2020-02-04 11:52
终于找到问题了。我的程序中还有串口,我还开了,定时器1来产生串口波特率。两个地方分别写了TMOD,并且写的还不一样,定时器乱了。改一致后,结果正常了。谢谢各位的帮助。
netawater
5楼-- · 2020-02-04 13:53
amen 发表于 2012-11-23 10:56
终于找到问题了。我的程序中还有串口,我还开了,定时器1来产生串口波特率。两个地方分别写了TMOD,并且写 ...

晕倒,下次把程序贴完整啊!!!!!
amen
6楼-- · 2020-02-04 19:07
netawater 发表于 2012-11-23 16:15
晕倒,下次把程序贴完整啊!!!!!

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

一周热门 更多>