proteus定时器仿真问题 不准确 求助

2019-07-18 10:28发布

proteus我用的是定时器1进行1us的定时输出 但是最后的出的是40us的输出 这让我很苦恼。
以下是我的程序
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit out=P1^3;
uint num,N;
uchar FT;
void main(viod)
{                               
EA=1;//全开  
ET1=1;
TMOD=0x01;
  TH1=(65536-1)/256;
  TL1=(65536-1)%256;
//EX0=1;
//IT0=1;                       
// ET0=1;

// TR0=1;
TR1=1;
while(1);


}
/*void delay(unsigned int i)
{
        unsigned int j;
        unsigned char k;
        for(j=i;j>0;j--)
                for(k=125;k>0;k--);
}       

void INchack()interrupt 0
{
  num=65536-TH0*256;
  if(num>=30)
  {
   N=N-15;
  }
  else
  {
   N=N+15;
  }
  FT=1;
}  

void T0_timer() interrupt 1
{
  if(FT==1)
  {
   TH0=(65536-N)/256;
   TL0=(65536-N)%256;
   FT=0;
  }
  else
  {
   TH0=(65536-30)/256;
   TL0=(65536-30)%256;
  }
   TR1=1;
}  
            */

void T1_timer() interrupt 3
{  
  TH1=(65536-1)/256;
  TL1=(65536-1)%256;
   out=~out;
  // delay(1);
//  TR1=0;
}

QQ拼音截图未命名.png QQ拼音截图未命名1.png

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
a410670107
1楼-- · 2019-07-18 15:29
一般的51在12MHz的时钟下,执行一条指令就要1us  你用定时器中断还要重载初值 还加了其他代码 肯定会推迟
武力戡乱
2楼-- · 2019-07-18 18:32
 精彩回答 2  元偷偷看……
a410670107
3楼-- · 2019-07-18 22:07
武力戡乱 发表于 2015-8-26 22:59
那个不是一条指令1us,是这样的。
2机器周期 = 一个是节拍,6个节拍为一个指令周期,而一条指令由2-4个指令周期构成。

基础知识真是好久没看都混了……

是一个机器周期为1us   一条指令占几个机器周期
武力戡乱
4楼-- · 2019-07-18 22:10
a410670107 发表于 2015-8-27 00:12
基础知识真是好久没看都混了……

是一个机器周期为1us   一条指令占几个机器周期

OK!我也没说错吧,哈哈!
stone石头163
5楼-- · 2019-07-19 02:58
不错,挺好的,多学习一些东西

一周热门 更多>