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

关于51单片机T0、T1中断的问题

时间:10-02 整理:3721RD 点击:

我是新手,在用T0、T1中断分别控制步进电机时,遇到用同样的参数,T1控制的电机比T0控制时的步进电机要快好几倍。以下是各自程序。请高手分析一下,不胜感激!


  1. #include "AT892051.h"
  2. #include "string.h"
  3. #define uchar unsigned char
  4. uchar code CCW[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};
  5. uchar code CW[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80};
  6. uchar i=0;
  7. void T1_init()
  8. {
  9. TMOD=0x01;
  10. TH1=41771/256;
  11. TL1=41771%256;
  12. EA=1;
  13. ET1=1;
  14. TR1=1;
  15. TF1=0;
  16. }
  17. void main(void)
  18. {
  19. T1_init();
  20. P1=0xf0;
  21. while(1);
  22. }
  23. void T1_time() interrupt 3
  24. {
  25. TH1=41771/256;
  26. TL1=41771%256;
  27.   P1=CW[i];
  28.      i++;
  29.   if(i==8) i=0;
  30. }

复制代码


以上是用T1中断。


  1. #include "AT892051.h"
  2. #include "string.h"
  3. #define uchar unsigned char
  4. uchar code CCW[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};
  5. uchar code CW[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80};
  6. uchar i=0;
  7. void T0_init()
  8. {
  9. TMOD=0x01;
  10. TH0=41771/256;
  11. TL0=41771%256;
  12. EA=1;
  13. ET0=1;
  14. TR0=1;
  15. TF0=0;
  16. }
  17. void main(void)
  18. {
  19. T0_init();
  20. P1=0xf0;
  21. while(1);
  22. }
  23. void T0_time() interrupt 1
  24. {
  25. TH0=41771/256;
  26. TL0=41771%256;
  27.   P1=CW[i];
  28.     i++;
  29.   if(i==8) i=0;
  30. }

复制代码


以上是用T0中断。

顶顶!高手快出现!

把定时1的TMOD=0x01 改成TMOD=0x10

谢谢回复!
我需要T1中断的速度,是不是我改了T1速度就跟T0一样慢了?
只能回家试试了。我想把T0的速度提高,跟T1的一样。

程序最下面的那个中断服务就是用来调速度的
建议先看看书这似乎为什么
不要只复制个代码

看看呢啊。

。好像很难。我新手

z都这么牛了还是新手

    好像是很久之前的帖子了,不知道现在回复对小编好了还有用不?算了还是回了吧,如果没用小编就当我在吐槽好了!
   
    TMOD是单片机中负责中断定时器/计数器工作方式的寄存器,其定义为:GATE   C/T   M1   M0         //       GATE   C/T   M1   M0
前四节是控制定时器1的,后四是控制定时器0的,所以你每次都赋值0x01,即为0000  0001;所以结果肯定就不一样喽!
ps:其实我也刚学会!哈哈!

学习一下,之前弄过,不过好像速度有点慢

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

网站地图

Top