[求助] 中断跳不出来了,大神帮忙

shijizai   2018-1-25 11:23 楼主
#include       
#define uint unsigned int
#define uchar unsigned char

sbit IN1=P3^1;//接IN1 控制正转
sbit IN2=P3^2;//接IN2 控制反转
sbit IN3=P3^3;
sbit IN4=P3^4;

sbit ENA=P3^5;          //使能
sbit ENB=P3^6;

uchar time;

void head();
void stop();
void configpwm();

void main()
{
        configpwm();  /*   执行完这两条程序就执行不了下面stop这一步,
        head();              根本停不下来,要怎么改一下,求助                */
        stop();
}
void configpwm()
{
       TMOD=0x01;//定时器0工作方式1
       TH0=0xff;//(65536-200)/256;//赋初值定时
       TL0=0xf7;//(65536-200)%256;//0.2ms
       EA=1;//开总中断
       ET0=1;//开定时器0中断
       TR0=1;//启动定时器0
       
}

void timer0() interrupt 1
{
       TR0=0;//赋初值时,关闭定时器
       TH0=0xff;//(65536-200)/256;//赋初值定时         +
       TL0=0xf7;//(65536-200)%256;//0.2ms
       TR0=1;//打开定时器
           time++;
       if(time>=100) time=0;//50hz
       if(time<=80)
           {
            ENA=0; //占空比20%
                ENB=0;
           }
       else
           {
                ENA=1;
                ENB=1;
           }
}
void head(uint i)
{
                 IN1=1;          //正转   前
                IN2=0;
                IN3=0;          
                IN4=1;
}
void stop()
{
        IN1=0;
        IN2=0;
        IN3=0;
        IN4=0;
}

回复评论 (15)

清中断标志了吗?
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2018-1-25 11:24
进入中断处理程序,首先要禁止中断,然后清中断标志位。否则一出来就又进去了。
点赞  2018-1-25 12:07
引用: chenbingjy 发表于 2018-1-25 11:24
清中断标志了吗?

清了呀
点赞  2018-1-25 12:14
引用: yang_alex 发表于 2018-1-25 12:07
进入中断处理程序,首先要禁止中断,然后清中断标志位。否则一出来就又进去了。

有写这个,上面关闭定时器然后清中断标志位,然后又打开定时器
点赞  2018-1-25 12:15
你把 TR0=1;//打开定时器,放到函数最后,因为你中断处理时已经开始运行定时器了
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2018-1-25 12:30
引用: ddllxxrr 发表于 2018-1-25 12:30
你把 TR0=1;//打开定时器,放到函数最后,因为你中断处理时已经开始运行定时器了

void timer0() interrupt 1
{
       TR0=0;//赋初值时,关闭定时器
       TH0=0xff;//(65536-200)/256;//赋初值定时         +
       TL0=0xf7;//(65536-200)%256;//0.2ms
      
           time++;
       if(time>=100) time=0;//50hz
       if(time<=80)
           {
            ENA=0; //占空比20%
                ENB=0;
           }
       else
           {
                ENA=1;
                ENB=1;
           }
           TR0=1;//打开定时器
}
这样写?
点赞  2018-1-25 12:36
引用: shijizai 发表于 2018-1-25 12:36
void timer0() interrupt 1
{
       TR0=0;//赋初值时,关闭定时器
       TH0=0xff;//(65536-200)/2 ...

YES
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2018-1-25 12:49

然后就可以了么?我试试, 还要改什么吗?
点赞  2018-1-25 12:53
引用: shijizai 发表于 2018-1-25 12:53
然后就可以了么?我试试, 还要改什么吗?

TH0=0xff;//(65536-200)/256;//赋初值定时         +
       TL0=0xf7;//(65536-200)%256;//0.2ms


这句定时有点短,不行你改长试试,好用后再改个合适值
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2018-1-25 12:58

还是跳不出来,
点赞  2018-1-25 13:05
TR0=0;//赋初值时,关闭定时器
       TH0=0xff;//(65536-200)/256;//赋初值定时         +
       TL0=0xf7;//(65536-200)%256;//0.2ms
       TR0=1;//打开定时器
           time++;
没有清中断标志呀!
我记得中断标志是TF0
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2018-1-25 13:52
void timer0() interrupt 1 { TF0 = 0;   TR0=0;//赋初值时,关闭定时器 TH0=0xff;//(65536-200)/256;//赋初值定时 + TL0=0x00;//(65536-200)%256;//0.2ms time++; if(time>=100) time=0;//50hz if(time<=80) { ENA=0; //占空比20% ENB=0; } else { ENA=1; ENB=1; } TR0=1;//打开定时器 } 你把这段程序考贝一下看好用不,好用再改 本帖最后由 ddllxxrr 于 2018-1-25 14:01 编辑
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2018-1-25 14:00
引用: ddllxxrr 发表于 2018-1-25 14:00
void timer0() interrupt 1
{
      TF0 = 0;
  TR0=0;//赋初值时,关闭定时器
       TH0=0xff;//( ...

好用了,可以往下执行了,谢谢谢谢,我之前以为清空计数位就是清空标志位呢,原来就差这个TF0。
点赞  2018-1-25 14:16
引用: chenbingjy 发表于 2018-1-25 13:52
TR0=0;//赋初值时,关闭定时器
       TH0=0xff;//(65536-200)/256;//赋初值定时         +
       TL0=0 ...

嗯嗯,好用了,谢谢谢谢,我之前以为清空计数位就是清空标志位呢,原来就差这个TF0。
点赞  2018-1-25 14:17
中断服务程序的一般流程:
1、如果中断支持再入,先关中断,不支持中断再入,本步可省略。
2、清中断标志,如果中断支持自动清标志,本步可省略。
3、中断服务处理。
4、设置中断参数,如有必要的话。
5、与1对应开中断,启动与中断相关资源,比如定时器就需要。
6、返回。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2018-1-25 16:27
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复