打印

菜鸟请教叫个小程序,延时问题。

[复制链接]
3157|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hzocce|  楼主 | 2010-1-3 18:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
char j;
void main()
{
char i=0;
char code table[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
P1=table;
j=0;
TMOD=0x01;                //设置定时器1为工作方式1
TH1=(65535-50000)/256;    //装初值
TL1=(65535-50000)%256;
EA=1;                //开总中断
ET1=1;               //开定时器1中断
TR1=1;               //启动定时器1
while(1)
{
  P1=table[i];
   if(j==10)
     {
   j=0;
   i++;
   if(i==8)
    i=0;
  }
}
}
void timer1() interrupt 3
{
TH1=(65535-50000)/256;    //重装初值
TL1=(65535-50000)%256;
j++;
}

程序如上,我的晶振是11.0592M,运行上面的程序,理论上是500ms 的,可实际结果为什么却不是呢? 实际上流水灯的流动时间估计只有100多毫秒,速度很快。

相关帖子

沙发
原野之狼| | 2010-1-3 18:38 | 只看该作者
一周期大约1US*15535*10 约等于168US 当然快了

使用特权

评论回复
板凳
原野之狼| | 2010-1-3 18:39 | 只看该作者
说错了 是168MS

使用特权

评论回复
地板
hzocce|  楼主 | 2010-1-3 19:00 | 只看该作者
可15535不是初值吗?
给的初值,一直加满才中断一次。从15535加了50000之后再溢出。时间应该是50000us.

也就是 1*50000*10这样才对呀??????????????

使用特权

评论回复
5
原野之狼| | 2010-1-3 19:52 | 只看该作者
不好意思 是我算错了
你用的是什么单片机
周期是否为1US?

使用特权

评论回复
6
jaylondon| | 2010-1-3 19:53 | 只看该作者
这个和单片机的指令周期有关系的吧

使用特权

评论回复
7
hzocce|  楼主 | 2010-1-3 20:22 | 只看该作者
85C51

使用特权

评论回复
8
zhiyonghe| | 2010-1-4 10:30 | 只看该作者
TH1=(65535-50000)/256;    //装初值
TL1=(65535-50000)%256;

很多人喜欢这样子做,有那必要吗??现在哪里没有计算器??还非得要程序给你算??浪费程序的执行速度!!

使用特权

评论回复
9
老老实实| | 2010-1-4 11:59 | 只看该作者
你的工作方式设置错了吧!
应该是:TMOD=0X10;

改这个之后,你再试试

使用特权

评论回复
10
老老实实| | 2010-1-4 12:00 | 只看该作者
程序整体看似没什么问题!

使用特权

评论回复
11
lxyppc| | 2010-1-4 12:15 | 只看该作者
TH1=(65535-50000)/256;    //装初值
TL1=(65535-50000)%256;

很多人喜欢这样子做,有那必要吗??现在哪里没有计算器??还非得要程序给你算??浪费程序的执行速度!! ...
zhiyonghe 发表于 2010-1-4 10:30


编译器有个功能叫常量合并的,不管你的表达式有多复杂,只要是常量都是在编译时就算好了的。不会浪费“程序的执行速度”

使用特权

评论回复
12
gz04022167| | 2010-1-4 12:52 | 只看该作者
TMOD=0x01;                //设置定时器1为工作方式1
这里设置的是定时器0为方式1;所以如12楼所说,模式设置错误。

使用特权

评论回复
13
wgj_fly| | 2010-1-4 12:56 | 只看该作者
时钟,运行时钟,指令时钟,再重新看一下,也许对你有帮助

使用特权

评论回复
14
5880527| | 2010-1-4 12:58 | 只看该作者
13位?

使用特权

评论回复
15
stockering| | 2010-1-4 14:09 | 只看该作者
LZ的程序有点问题吧!用定时器1应该写成TMOD=0x10。

使用特权

评论回复
16
marshallemon| | 2010-1-13 12:47 | 只看该作者
恩,程序写的问题,SFR没搞清楚

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

561

帖子

4

粉丝