标题: 求解定时器控制二极管发光问题 [打印本页]

作者: li329475867    时间: 2012-8-22 22:19
标题: 求解定时器控制二极管发光问题

程序目的是

利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,
使8个发光二极管依次一个一个闪动,闪动频率为10次/秒(8个
灯依次亮一遍为一个周期),循环
下面是我写的程序,运行时没有提示错误,但是下载之后不对,,请问是那里有错,本人菜鸟中的菜鸟,求高手解答!!!

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar aa,b,temp;
void yanshi(uint);
void   main()
{
 
 TMOD=0x01;
 TH1=(65536-100000)/256;
 TL1=(65536-100000)%256;
 EA=1;
 ET1=1;
 TR1=1;
 temp=0xfe;
 P1=temp;
 while(1)
 {
  
 }
}
void time_1() interrupt 3
{
 
 TH1=(65536-10000)/256;
 TL1=(65536-10000)%256;
 aa++;
  if(aa==10)
  {
   aa=0;
   for(b=0;b<7;b++)
   {
    P1=temp;
    temp=_crol_(temp,1);
   }
  }
 
}


作者: zuoluo    时间: 2012-8-23 10:24

你这个程序两个地方错了,你不够小心啊,我给你改的地方加标注了

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar aa,b,temp;
void yanshi(uint);
void   main()
{
 
 TMOD=0x01;                                             //你用的是定时1,工作方式为1,应该改为TMOD=0x10;
 TH1=(65536-100000)/256;                       //这个地方和下面的赋值不一样,应该是 TL1=(65536-10000)%256;
 EA=1;
 ET1=1;
 TR1=1;
 temp=0xfe;
 P1=temp;
 while(1)
 {
  
 }
}
void time_1() interrupt 3
{
 
 TH1=(65536-10000)/256;
 TL1=(65536-10000)%256;
 aa++;
  if(aa==10)
  {
   aa=0;
   for(b=0;b<7;b++)
   {
    P1=temp;
    temp=_crol_(temp,1);
   }
  }
 
}

有问题在问我,qq:676733417


作者: ahshmj    时间: 2012-8-23 11:32

void time_1() interrupt 3
{
 
 TH1=(65536-10000)/256;
 TL1=(65536-10000)%256;
 aa++;
  if(aa==10)
  {
   aa=0;
  // for(b=0;b<7;b++)
   //{
    P1=temp;
    temp=_crol_(temp,1);
   //}
  }
 
}

 

“TH1=(65536-100000)/256” 是不对的,但是仅仅是时间不对,将会给TH1赋值补码,就是100000-65536,比65536-10000时间长。

 

但是上面一段就错多了,在一次中断里循环显示一遍,速度很快,人眼根本不无法分辨。按上面改后的程序,循环去掉试一试。






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1