[讨论] 定时器的另一种用法

heningbo   2009-5-5 08:37 楼主
我刚接触51
一般认为定时器以中断的方式实现
昨天在书上看到了一个例子

Org 0000h;
Ljmp main;
Org 0030h;
Main:mov tmod,#00h;
Start:clr c;
      Mov a,#0ffh;
      Mov r2,#08h;
Loop:rlc a;
     Mov p2,a;
     Mov r3,#100;
     Call delay;
     Djnz r2,loop;
Delay:setb tr0;
Again:mov tl0,#(8192-2000)mod32;
      Mov th0,#(8192-2000)/32;
Loop1:jbc tf0,loop2;
      Ljmp loop1;
Loop2:djnz r3,again;
      Clr tr0;
      Ret;
end

这样可以吗

终端还有什么用法
请赐教

回复评论 (5)

帮你顶一下! 我不懂汇编 呵呵 惭愧~惭愧~
点赞  2009-5-5 11:35
xiexie o !
点赞  2009-5-5 13:46
好像连定时器都没开吧
点赞  2009-5-5 15:06
引用: 原帖由 tong7127 于 2009-5-5 15:06 发表
好像连定时器都没开吧


Loop1:jbc tf0,loop2;测试TF0是否为1,如果为1的则把它清0,并跳转到LOOP2.如果为0则顺序执行
      Ljmp loop1;跳转LOOP1
Loop2:djnz r3,again,让R3减1,然后测试它是否为0,如果不为0则继续进行定时操作.
这个程序是使用软件查询定时溢出标志位.所以它不需要打开中断允许位.

这种使用方法有一个缺点就是:软件得一直在测试溢出标志位,浪费了CPU资源,因为在这个等待的过程中CPU无法去做其它的运算或者操作.如果使用中断方式的话,可以一边做其它的事,一在等待中断的到来.这样CPU的使用效率就会高一些.
点赞  2009-5-5 23:11
类似的用法可以在介绍一下吗
点赞  2009-5-6 08:36
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复