找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4178|回复: 2
打印 上一主题 下一主题
收起左侧

求解定时器控制二极管发光问题

[复制链接]
跳转到指定楼层
楼主
ID:44091 发表于 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);
   }
  }
 
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:34608 发表于 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

回复

使用道具 举报

板凳
ID:7485 发表于 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时间长。

 

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表