打印

8051 定时器 1s钟的程序

[复制链接]
楼主: nicker88
手机看帖
扫描二维码
随时随地手机跟帖
41
冷漠| | 2010-9-26 16:11 | 只看该作者 回帖奖励 |倒序浏览

highgear 又露怯了。

本帖最后由 冷漠 于 2010-9-26 17:08 编辑

“14楼的说法是对的”?!   
highgear 又露怯了,感情连T2是多少位自动重载定时器都不知道?
哈哈,这年头玩自动重载谁还用8位重载?


14楼 singleywy     To   13楼  冷漠

大家都知道( T2 )自动重载没有软件误差,不过那么短时间就中断一次你吃的消么,
     ……请你把书看透了再来吧,不要口出狂言




         highgear 看了这段兴奋不已,狂顶。哈哈……highgear 再请仔细看看singleywy说的是什么。

          所以,highgear 还在这混个什么劲?连个 T2 用法都不知道就在这瞎喊。劝你先回家把 T2 书本内容好好看透了再来吧。——别连本书都舍不得买。

       再攒钱也一样被人看不起。——奔三好几了,成家有没有点进展?冷漠没有故意恶意,只是想说,这么有才能的高手,怎么生活上混的这么惨,褴褛落拓?

“5年了,昆仑派一点长进都没有。”


先看看下面讲的关于T2的内容:




定时器T2是一个16位自动重载定时器。自动重装的特性对于产生延迟来说没有价值,但是对于贯穿于本书大部分内容所使用的调度器来说,它是一个理想的“时标”源。

                     —— 摘自J.Pont 《时间触发嵌入式系统设计模式》


所以,T2的自动重载周期最大值是65536,冷漠绝对吃得消。

使用特权

评论回复
42
singleywy| | 2010-9-26 18:28 | 只看该作者
本帖最后由 singleywy 于 2010-9-26 21:29 编辑

41# 冷漠
呵呵,我估计highgear不是这个意思,与我一样误解你的意思了,其实,您说T1的+7,其本质上就是软件修正,只是代码简化了不少,而T2是硬件上的16位自动重载,所以您说的没错,highgear说的也没错,只是大家都指错了方向,陷入到各自的圈子里了,当然也包括我在内,所以造成了双方的误解,因此大家要和谐,不要在不同的着落点上起争执

使用特权

评论回复
43
hotpower| | 2010-9-26 18:54 | 只看该作者
首先应该选11.0592MHz的晶振,其次中断中不能折腾TL,即设TL=0,最后计数器应该用静态或全局变量,注意变量优化的问题。

使用特权

评论回复
44
singleywy| | 2010-9-26 18:56 | 只看该作者
43# hotpower
恩,这一点,老X特地指出来了

使用特权

评论回复
45
hotpower| | 2010-9-26 18:59 | 只看该作者
哈哈,谁说俺不会T2?T2的第一要诀就是在中断中不要忘记清除TF2

使用特权

评论回复
46
hotpower| | 2010-9-26 19:06 | 只看该作者
俺没看所有的跟帖,实际T0和T1也可“自动装载”的,这要遵循俺前几楼所述的几点,重点是搞出TL=0的时间常数来。而且中断处理不要让TL再翻转为0即可。

使用特权

评论回复
47
singleywy| | 2010-9-26 19:11 | 只看该作者
46# hotpower
恩,HOT大叔说的有道理,学习了

使用特权

评论回复
48
hotpower| | 2010-9-26 19:19 | 只看该作者
记得所长“一生”没对俺拍砖的就是“T0/T1自动装载”,再啰嗦一句:初始化TL0或TL1为0,程序中别再出现这些“字眼”!

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xuyiyi + 1
49
highgear| | 2010-9-26 20:22 | 只看该作者
呵呵, 冷漠不必如此兴奋, 洋洋洒洒浪费这么多口水。

8051 没有16-bit自动重载定时器.  注意看楼主的主题。

使用特权

评论回复
50
john_light| | 2010-9-26 20:37 | 只看该作者
常见的51芯片,T2是标配了。

使用特权

评论回复
51
冷漠| | 2010-9-26 20:45 | 只看该作者

闲扯

本帖最后由 冷漠 于 2010-9-27 18:07 编辑

Hot大叔终于来了,刚还在夸你领导RTOS新潮流,率先在51_RTOS中使用了T2,16位自动捕捉重载定时器,使得一切T0/T1 16位软件重载(这技巧,那方法)的讨论全没了意义。

“T0/T1自动装载”?还是省了吧,正如singleywy 14楼所说,“那么短的周期中断,你吃得消么?”
    别忘了T0/T1重载和T2重载的根本差别——T0/T1重载最大周期是多少?8位256!那是用于UART串口通信波特率发生器的吧,和RTOS系统心跳有什么关系?和LZ的50ms循环定时有什么关系?RTOS系统心跳最少5ms,T0 / T1自动装载能实现么,不能实现的事情在这扯什么?冷漠早研究过了,好像我们都不知道?

哈哈,所以,Hot大叔最好拣重要的概念讲,“T0/T1自动装载”吃不消的事,T2完全吃得消,对吧?有这个结论不就完了吗,14楼说“T2也吃不消”,highgear 也跟着喊“14楼说得对”,冷漠只能怀疑各位会不会用、用没用过T2?否则只好郑重告诉各位:
       瞎扯淡!   一个8位重载,用于波特率发生器的应用,(根本不能开放中断的)一个16位重载,用于循环延时的应用,(有效利用中断)风牛马不相及的2件事,能误解?——无知造成的误解!
       没用过T2就别在这硬撑装懂。Hot大叔一个 T2 的 TF2不自动清零的问题想了20年;谁比大叔还严谨?什么事那么容易?想当然 T2 和T0、T1一样,开玩笑,Intel 公司看2个定时器不够用,加一个T2 ?撑的。T2 还叫捕捉器,它可以做精确时标。说不好就是Intel 为自己的RTOS设计的。

所长唯一没有拍过Hot大叔“定时器自动重载”,是因为所长不会玩,拍不好怕露怯。因此可以推断,highgear 更不会玩了,别说T2自动捕捉,就算是“T0/T1自动重载”也赶不上所长吧。哈,——所长没教过他呀。

使用特权

评论回复
52
highgear| | 2010-9-26 20:50 | 只看该作者
回 john_light: 没错, 市面上有一些 8051 扩展功能的型号。不过楼主并没有特指具体型号, 而且程序用的是 T1 。

使用特权

评论回复
53
highgear| | 2010-9-26 21:05 | 只看该作者
另外:
冷漠同学最好不要无中生有。41楼你若引用 singleywy 14楼, 就直接引用, 为何替 singleywy 加入 T2? 真是本性难改。

使用特权

评论回复
54
冷漠| | 2010-9-26 21:28 | 只看该作者
本帖最后由 冷漠 于 2010-9-26 23:13 编辑

53楼真逗,14楼是13楼冷漠的回帖,你去看看13楼冷漠说的是什么,冷漠可从没教过谁T0/T1自动重载。这么简单的逻辑,highgear的脑子是一年不如一年了,你再问问singleywy ,14楼说的是不是指的T2。没关系,我再把13楼冷漠的原帖贴上来,——跟highgear讲话真比跟我爷爷讲话还费劲,逻辑老弄不清楚。冷漠既然没有说过T0/T1,那就是只有一种可能——T2。我爷爷就搞不清,非要直接跟他讲。


13楼    冷漠贴

没那么复杂。
1、书上早就写了:改用T2自动重载,什么都不用考虑。精度必然和晶振一样!
2、如果一定要用T1程序重载,那么Intel已经计算过,每次T1中断重载开销+7!
   请参考Intel源程序。


再看14楼回帖:


14楼 singleywy     To   13楼  冷漠

大家都知道( T2 )自动重载没有软件误差,不过那么短时间就中断一次你吃的消么,
     ……请你把书看透了再来吧,不要口出狂言


呵呵,一应一答,直指冷漠。冷漠什么时候说过T0 / T1重载?难道14楼说的重载是自言自语?没关系,那只有一种解释:14楼根本不知道13楼冷漠说的T2自动重载是怎么回事!还自我认为冷漠说的T2是和T0 / T1自动重载完全一样的8位重载。
        所以,无论从哪方面逻辑分析,冷漠只能唯一地理解为:14楼根本不知道T2是什么,更不知道T2是16位捕捉自动重载定时器。还可能有其他解释吗?singleywy 说自己理解误差,没错呀,这个理解误差不正是由于对T2功能的无知造成的吗?
         问题讨论的双方是要站在对等的平台上,我和我86岁的爷爷能对等讨论问题吗?说什么双关语他都不知道,看着他着急。问问highgear,singleywy 写的RTOS有什么明显的缺点?再问问singleywy : 为什么你的任务不分段,宏汇编分段、分页是什么意思?你的RTOS只有一个段?用户任务和OS内核都在一个段里?还有ORG?开玩笑了,谁在控制系统——纯粹的超循环程序。——美其名曰RTOS?highgear 懂什么在这硬撑,highgear 不是率先顶singleywy写的RTOS么,呵,连个为什么要分段的概念都不知道,顶谁那。建议 highgear 好好看看操作系统——存储器管理内容,学好了再来装相吧。

.

使用特权

评论回复
55
hotpower| | 2010-9-26 21:35 | 只看该作者
晕,又是口水。俺只是说t0/t1也可以在特定条件下完成伪自动装载的。

使用特权

评论回复
56
highgear| | 2010-9-26 21:39 | 只看该作者
呵呵, 冷漠老弟, 表激动。
我不管也不关心 14 指的是什么, 只是告诉你既然引用原文, 就不应该篡改。同时, 请再次看看搂主的主题。

使用特权

评论回复
57
冷漠| | 2010-9-26 23:23 | 只看该作者

18 楼冷漠的精彩程序。用不着T2 重载。

本帖最后由 冷漠 于 2010-9-27 18:29 编辑

呵呵,这年头还有人用8051?楼主的意思是8051内核指令系统(而不是ARM什么的);如今各大公司的51系列芯片都叫8051,highgear去看看Philips的80C31有几个定时器:——3个!我们公司前一阵把产品上的89C51全部换为89S52了。89C51比C52还贵,都不生产了东西,谁还用?这么老旧的观念,还生活在10年以前?

不过就算是Intel_8031,没关系,建议highgear 仔细看看18楼冷漠写的是什么,如若看不懂冷漠可真着急,平台水平不对等呀。

LZ将下面2句修正一下误差即可:
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;

修正为:
TL1 | = (-50000);       //   ORL   TL1, #0B0H ;误差校正
TH1=(65536-50000)/256;   //或者 TH1=(-50000)>>8;   //   MOV   TH1 , #03CH


哈,用C直接写的。比Intel 蓝本的汇编修正程序可精彩多了。看不懂仔细看,再拿笔好好算算。
没什么,冷漠就是欺负你写不出来。(冷漠用C和汇编都写过了)highgear一条语句也没憋出来,多少年来一个程序也没写过,还一天到晚评论这个点评那个,—— 光靠嘴皮子那点本事可找不到对象。一年比一年困难了。

.

使用特权

评论回复
58
冷漠| | 2010-9-26 23:39 | 只看该作者
本帖最后由 冷漠 于 2010-9-26 23:47 编辑
14 指的是什么, 只是告诉你既然引用原文, 就不应该篡改。


highgear 脑子越来越幼稚了,括号里的内容叫“注释”,谁见过篡改内容加括号的?中学语文课就学过的知识;原本写的是(T2——冷漠注)或者(T2 注①),(这种形式的注释书上见得多了)由于和后面意思不连贯,所以把后面“冷漠注”去掉了。——哈哈,“篡改”,真逗。——语文水平也那么差。
     别为自己找理由啦,不懂就是不懂,非要说是(由于冷漠的篡改)自己误解了。

没关系。问问highgear,T2的捕捉功能捕捉个啥?或者给咱冷漠写个T2 外部信号捕捉初始化程序看看;唉,算了吧,知道你写不出来,互联网上没有啊,问所长更是白痴。所长连T0/T1 自动重载怎么用还搞不清呢。

.

使用特权

评论回复
59
xuyiyi| | 2010-9-27 08:04 | 只看该作者
记得所长“一生”没对俺拍砖的就是“T0/T1自动装载”,再啰嗦一句:初始化TL0或TL1为0,程序中别再出现这些“字眼”!
hotpower 发表于 2010-9-26 19:19



学习了,“初始化TL0或TL1为0,程序中别再出现这些“字眼”!”

使用特权

评论回复
60
DINGXIAOYU777| | 2010-9-27 18:14 | 只看该作者
把TH1=(65536-50000)/256;
    TL1=(65536-50000)%256;
两句放在if语句外面。
因为你现在的语句只有在t=20时赋定时器初值,其他次进入中段没有赋,这样计时器会从0-65536,时间当然会长一些,LED亮灭的时间间隔为(65.536*19+5)>1.3s。

使用特权

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

本版积分规则