OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5986|回复: 8

关于51定时器取初值的困惑 高手解答~感激

[复制链接]

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
发表于 2013-5-5 18:43:25 | 显示全部楼层 |阅读模式
 //晶振是11.0592Mhz
#include <reg52.h>
#define s8 signed char
#define u8 unsigned char
#define u16  unsigned int


sbit D1 = P0^0;//位定义LED0

u16 tmr0_value = 1000;//定时器0的初值

void init_tmr0(void);


int main(void)
{
 init_tmr0();//初始化定时器0
 
 while (1);
 
 return 0;
}

void init_tmr0(void)
{
 TMOD = 0x01;//设置tmr0为工作方式1
 EA = 1;//开总中断
 ET0 = 1;//开定时器0中断
 TH1 = (65536 - tmr0_value)  >> 8;//得到高8位
 TH0 = (65536 - tmr0_value)  & 0x00ff;//得到低8位
 TR0 = 1;//启动定时器0

 return;
}

//注:定时器溢出后若没重装初值就重新从0开始计数(0—65535)
//计数到65536就溢出!
void tmr0(void) interrupt 1//定时器0中断
{   
    TR0 = 0;//关闭定时器0
 //重新给定时器0赋初值
 TH1 = (65536 - tmr0_value) >> 8;
 TH0 = (65536 - tmr0_value)  & 0x00ff;
   
    D1 = !D1;//D1的闪烁速度和tmr0_value的值不匹配
 
    TR0 = 1;//启动定时器0
 
    return;
}
        现象:tmr0_value 取值为25000时,人眼可以明显地看见D1的闪烁!
        困惑:大家看红色代码tmr0_value = 20000时,人眼是看不到D1闪烁的;当tmr0_value = 30000时,人眼能微微看见D1闪烁,这当然是符合情理的,但当tmr0_value = 25000时,D1的闪烁变的非常明显,这真是好奇怪呃!
        另外:tmr0_value 取值为15000、5000时,也能看见D1强烈的闪烁!高人解答~

乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-5-5 19:32:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11471
金钱
11471
注册时间
2013-3-8
在线时间
1226 小时
发表于 2013-5-5 19:37:08 | 显示全部楼层
回复【楼主位】可乐虎:
---------------------------------
#include "reg51.h"

//timer init
void initTimer(void)
{
 TMOD=0x1;
 TH0=0xb1;
 TL0=0xe0;
}

//timer0/counter0 interrupt
void timer0(void) interrupt 1
{
 TH0=0xb1;
 TL0=0xe0;
 //add your code here.

}

//the main fun
void main(void)
{
initTimer();
TR0=1;
ET0=1;
//EA=1;
}

给个模板,自己往里加代码吧!
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-5-5 19:38:48 | 显示全部楼层
回复【2楼】xouou_53320:
---------------------------------
        这位仁兄,感谢你的回答,你让我看到了希望 呵呵,但具体是怎么回事呢?为什么说定时器不是这么用的啊?我一直都是这么用定时器的呢,能具体说说吗?感激不尽啊
我的单片机就是最普通的51了:stc89c52
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11471
金钱
11471
注册时间
2013-3-8
在线时间
1226 小时
发表于 2013-5-5 19:43:49 | 显示全部楼层
回复【4楼】可乐虎:
---------------------------------
看看,定时器0,两个寄存器为TH0,TL0,不是TH1,TH0。这两个都用错了,程序怎么可能对呢。
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-5-5 19:44:42 | 显示全部楼层
回复【3楼】augustedward:
---------------------------------
这为兄台,谢谢你,不过小弟真心不懂你的代码和我的有啥本质区别呢?说实话,我觉得你的代码很乱啊,呵呵 勿见怪!
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-5-5 19:46:46 | 显示全部楼层
回复【5楼】augustedward:
---------------------------------
嗯嗯  谢谢啊,真是太粗心了啊,太谢谢你了
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11471
金钱
11471
注册时间
2013-3-8
在线时间
1226 小时
发表于 2013-5-5 19:47:23 | 显示全部楼层
回复【6楼】可乐虎:
---------------------------------
呵呵,那代码也不是我写的,是我用软件自动生成的,软件名子为lanrenmcu。呵呵
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-5-5 19:54:31 | 显示全部楼层
回复【8楼】augustedward:
---------------------------------
啊  还有这种软件啊,太酷了啊!我的又一个困惑 你帮我看看呀
http://www.openedv.com/posts/list/15162.htm
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 11:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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