找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1314|回复: 3
打印 上一主题 下一主题
收起左侧

在外部中断停止定时器后,后面单片机代码就没有反应了不运行了,什么问题

[复制链接]
跳转到指定楼层
楼主
在外部中断停止定时器后,后面代码就没有反应了。不运行了,什么问题?
能停止,但在中断代码里再也不能启动定时器了

单片机源程序如下:
void Int4()        interrupt 16                //外部中
{

        TR0=0;//停止定时器
              MS1=0;
              MS2=1;
Delayms(100);
        TR0=1;//启动
              Dir=0;//正转
        Delayms(1000);
           TR0=0;//停止

}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:475031 发表于 2022-12-16 21:29 | 只看该作者
下面主程序,我按一下按钮,可以运行有动作的。上面是外部中断和定时器不能在一起使用吗?


void main()
{
        Timer0Init();//        初始化定时器中断0
                Int4Init();  //        初始化外部中断4

        EN=0;
        MS1=1;
        MS2=0;
        MS3=0;

                               
       
        while(1)
        {
  if(KEY1==0)  //判断是否按下键盘
        {
                Delayms(10); //延时,软件去干扰
                if(KEY1==0)   //确认按键按下
                {

                       

                               
                                MS1=1;
              MS2=0;
   
               
Dir=1;//反转
Delayms(3000);
TR0=0;//停止
                               

                       

                }
                while(KEY1==0);//按键锁定,每按一次count只加1.
        }

       
       
       

       
       
        }
}
回复

使用道具 举报

板凳
ID:277550 发表于 2022-12-17 10:12 | 只看该作者
不要在中断中,做这种耗时的活  Delayms(1000);
回复

使用道具 举报

地板
ID:475031 发表于 2022-12-17 10:45 | 只看该作者
devcang 发表于 2022-12-17 10:12
不要在中断中,做这种耗时的活  Delayms(1000);

谢谢回复,。我自己找到办法了,。解决完美
在中断里加上  这两句就可以后面执行了,

        PT0=1;//把定时器中断优先级别提最高
        PX0=0;//把外部中断优先级别降最低






然后再在主程序main
        while(1)循环里。把中断优先级别改回就完美了运行,没有差错了





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表