单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:3470|回复:4

c语言定时器T0方式2控制led点亮时间1s 仿真led闪得很快

[复制链接]
ID:893765发表于 2021-4-30 10:28|显示全部楼层
想知道自己的代码问题出在哪里
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar count=0;
uchar led;
void time0(void)interrupt 1
{   TH0=-100000/250;
   TL0=-100000%250;
   count++;
   if(count==10)
   { count=0;
     led=_crol_(led,1);
     P1=led;
   }
}
void main(void)
{  led=0xfe;
   TMOD=0x02;
   TH0=-100000/250;
   TL0=-100000%250;
   ET0=1;
   TR0=1;
   EA=1;
   while(1);
}

ID:275826发表于 2021-4-30 13:19|显示全部楼层
   把TH0=-100000/250;   TL0=-100000%250; 改成TH0=-10000/256;   TL0=-10000%256;
再把if(count==10)改成if(count==100) 就可以了
ID:893765发表于 2021-4-30 14:43|显示全部楼层
tyrl800 发表于 2021-4-30 13:19
把TH0=-100000/250;   TL0=-100000%250; 改成TH0=-10000/256;   TL0=-10000%256;
再把if(count==10)改 ...

还是很快 话说方式2最多255us吧 不知道怎么办
ID:213173发表于 2021-4-30 18:11|显示全部楼层
田所浩二单推人 发表于 2021-4-30 14:43
还是很快 话说方式2最多255us吧 不知道怎么办

定时器方式2是8位自动重装初值模式,12M晶振最大256us。并且TH0=TL0,如果预装值6,可以定时250us,定时1秒需要累加中断4000次。
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. unsigned int count=0;//无符号整型数据(16位)
  5. uchar led;
  6. void time0(void)interrupt 1
  7. {
  8. //无需再对TH0 TL0 赋值
  9.      count++;
  10.      if(count==4000)
  11.      {
  12.          count=0;
  13.          led=_crol_(led,1);
  14.          P1=led;
  15.      }
  16. }
  17. void main(void)
  18. {
  19.      led=0xfe;         //赋初值
  20.      P1=led;
  21.      TMOD= 0x02;         //设置定时器自动重装模式
  22.      TL0 = 0x06;         //设置定时初值
  23.      TH0 = 0x06;         //设置定时重载值
  24.      TR0 = 1;         //定时器0开始计时
  25.      ET0=1;
  26.      EA=1;
  27.      while(1);
  28. }
复制代码
ID:893765发表于 2021-5-1 21:23|显示全部楼层
wulin 发表于 2021-4-30 18:11
定时器方式2是8位自动重装初值模式,12M晶振最大256us。并且TH0=TL0,如果预装值6,可以定时250us,定时1 ...

谢谢您!

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网