微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于51的定时器

关于51的定时器

时间:10-02 整理:3721RD 点击:
最近学习定时器,就想自己编一个利用定时器定时一秒输出方波,来点亮,熄灭小灯,但是结果不对。这个程序在哪里有问题呢?对于关于定时器的程序改按怎样的顺序来看,工作的顺序是怎样的?希望大神百忙之中,指点一二、谢谢!
ORG 0000H
LJMP  MAIN
ORG 000BH
LJMP LOOP1
ORG 1000H
MAIN:
MOV P0,#00H
ACALL DELAY
MOV A,P0
CPL A
MOV P0,A
LJMP MAIN
DELAY:
MOV B,#0AH
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
SETB TR0
RET
LOOP1:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ B,LOOP2
MOV B,#0AH
LOOP2:
RETI
END
   

你应该把P0电平的转换放在中断函数里面才行的,你现在P0电平变化和定时器中断无关,只和main函数的运行频率有光。我改了一下程序,你参考一下。程序还没有运行过。不知道有没有问题。有问题再上来问。

  1. ORG 0000H
  2. LJMP  MAIN
  3. ORG 000BH
  4. LJMP LOOP1
  5. ORG 1000H
  6. MAIN:
  7. ACALL LOOP0
  8. AJMP $
  9. LOOP0:
  10. MOV TMOD,#01H
  11. MOV TH0,#3CH
  12. MOV TL0,#0B0H
  13. SETB EA
  14. SETB ET0
  15. SETB TR0
  16. RET
  17. LOOP1:
  18. MOV TH0,#3CH
  19. MOV TL0,#0B0H
  20. DJNZ B,LOOP2
  21. MOV B,#0AH
  22. MOV A,P0
  23. CPL A
  24. MOV P0,A
  25. LOOP2:
  26. RETI
  27. END

复制代码

按我原本的想法
MAIN:
MOV P0,#00H
ACALL DELAY
MOV A,P0
CPL A
MOV P0,A
LJMP MAIN
如果将定时器看做延时函数的话,程序应该正确。您的意思是,定时器不能将它看做延迟函数?为什么呢?谢谢!

小编还是对定时器的工作原理有点搞不懂。建议小编还是看看书,看下定时器中断是怎样工作的。
另附我在另一个帖子的回复给你参考下,希望对你有帮助。
http://bbs.elecfans.com/forum.php?mod=viewthread&tid=431136&page=1#pid2891135

好的,谢谢您!真心感谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top