小白求助,中断程序跳不出来,不能往下执行,大神帮忙看看
怎么改
#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--);
}
}
你是说delay时间太短了?
我的问题现象就是,我加上中断以后,可以执行head语句(这时候电机是正转),但是下一步的语句是延时一段时间以后电机停止,结果这个程序就一直是按照中断里面的速度在执行电机正转,没有往下执行(我觉得是没有跳出中断程序)。我现在就是想要这个程序能够执行完中断以后还能按照指令语句继续往下执行。大神帮我看看那写的不对,要怎么改
另外测试一下关闭定时器后程序是否能达到预定的效果,也可以测定一下delay的时间,可以在加入定时器中断后做对比。
去除了,还是不行。跳不出来。
没有中断时,程序执行正常,加上中断以后就不往下执行了。
delay的时间是3s
改了,声明改了,然后在stop里加了EA=0;试了一下还是不行,不往下执行。这个是不是跟我那个延时的长短有关啊?或者是哪个函数的顺序?
每个中断函数里面都会有个清除中断标志的代码,你的中断里面我没有发现,
一周热门 更多>