关于51单片机T0、T1中断的问题
时间:10-02
整理:3721RD
点击:
我是新手,在用T0、T1中断分别控制步进电机时,遇到用同样的参数,T1控制的电机比T0控制时的步进电机要快好几倍。以下是各自程序。请高手分析一下,不胜感激!
- #include "AT892051.h"
- #include "string.h"
- #define uchar unsigned char
- uchar code CCW[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};
- uchar code CW[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80};
- uchar i=0;
- void T1_init()
- {
- TMOD=0x01;
- TH1=41771/256;
- TL1=41771%256;
- EA=1;
- ET1=1;
- TR1=1;
- TF1=0;
- }
- void main(void)
- {
- T1_init();
- P1=0xf0;
- while(1);
- }
- void T1_time() interrupt 3
- {
- TH1=41771/256;
- TL1=41771%256;
- P1=CW[i];
- i++;
- if(i==8) i=0;
- }
以上是用T1中断。
- #include "AT892051.h"
- #include "string.h"
- #define uchar unsigned char
- uchar code CCW[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};
- uchar code CW[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80};
- uchar i=0;
- void T0_init()
- {
- TMOD=0x01;
- TH0=41771/256;
- TL0=41771%256;
- EA=1;
- ET0=1;
- TR0=1;
- TF0=0;
- }
- void main(void)
- {
- T0_init();
- P1=0xf0;
- while(1);
- }
- void T0_time() interrupt 1
- {
- TH0=41771/256;
- TL0=41771%256;
- P1=CW[i];
- i++;
- if(i==8) i=0;
- }
以上是用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:其实我也刚学会!哈哈!
学习一下,之前弄过,不过好像速度有点慢
