小白求助,中断程序跳不出来,不能往下执行,大神帮忙看看

2019-07-15 08:57发布

小白求助,中断程序跳不出来,不能往下执行,大神帮忙看看怎么改
#include<reg52.h>       
#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 delay(uint);
void head();
void stop();
void configpwm();

void main()
{
        configpwm();    /*执行完这两个语句以后,
        head();             就不往下执行stop这条语句了,是哪个地方不对,大神帮忙看看怎么改*/
        delay(300);
        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;
}
void delay(uint z)
{
        uint x,y;
        for(x=1000;x>0;x--)
        {
                for(y=z;y>0;y--);
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
泥月月
1楼-- · 2019-07-16 15:55
lee_st 发表于 2018-1-25 13:42
每个中断函数里面都会有个清除中断标志的代码,你的中断里面我没有发现,

     time++;
       if(time>=100) time=0;      //50hz
这里,这个是清除中断标志,当time=100时清零
人中狼
2楼-- · 2019-07-16 16:18
用KEIL仿真了一下你的程序,似乎定时器中断影响了delay,时间延长了很多,可能延长了10倍左右,程序可以运行下去
lee_st
3楼-- · 2019-07-16 20:23
 精彩回答 2  元偷偷看……
勇哥-lzu
4楼-- · 2019-07-17 02:03
在stop后面加个while(1);
单片机的程序执行main函数,如果执行到main函数底部退出,会重启再次从main函数开始执行
houjue
5楼-- · 2019-07-17 05:26
13楼说的对,请你在【 stop 】后面加个【while(1);】改天我再来仔细看你的程序,总觉得哪里怪怪的。

一周热门 更多>