找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2555|回复: 7
收起左侧

为什么这程序Keil警告无法决定根目录?求助

[复制链接]
ID:607192 发表于 2019-9-7 10:33 | 显示全部楼层 |阅读模式
图片10.png 图片9.png
源程序
#include <REGX51.H>

#include <stdio.h>
#define uchar unsigned char  
#define uint unsigned int

uchar h;
uint r=0;
uint s;
uchar code  dis[]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,
                  0X92,0X82,0Xf8,0X80,0X90,0Xff,};//数码管译码表
void delay(uint c)  //定义延迟子程序
{
   uint i,j;
    for(i=0;i<c;i++)
          for(j=0;j<100;j++);
        
}

//中断服务程序1
void t0(void) interrupt 0 using 1    //东西通行
{
  delay(2);
   if(INT0==0)
    {
      r++;
          if(r==2)
           {
                  r=0;
           }
        //  r%=2;
          if(r==0)
           {
                                P0=0xeb;
        P1=0x00;
        P2=0xff;
           }
                 while(1)
            {
                   if(INT0==0|INT1==0|T0==0)
                  {
                  delay(2);
                  if(INT0==0|INT1==0|T0==0)
                          break;
                  }

            };
         
    }

}

//中断服务程序2
void t1(void) interrupt 2 using 1  //南北通行
{
  delay(2);
   if(INT1==0)
    {
          r++;
          if(r==2)
           {
                  r=0;
           }
          r%=2;
          if(r==0)
           {
            P0=0xdd;
        P1=0x00;
        P2=0xff;
           }
                 while(1)
            {
                   if(INT1==0|INT0==0|T0==0)
                  {
                   delay(2);
                   if(INT1==0|INT0==0|T0==0)
                          break;
                  }
            };
    }
}

//中断服务程序3
void t2(void) interrupt 1 using 1  //紧急情况全部禁止
{
  TH0=0xff;
  TL0=0xff;
    delay(2);
     if(T0==0)
       {
                                P0=0xdb;
        P1=0x00;
        P2=0xff;
           }
                while(1)
            {
                   if(INT0==0|INT1==0)
                  {         
                    delay(2);
                        if(INT0==0|INT1==0)
                          break;
                  }

            };

}


//主函数
void main(void)
{
  TMOD=0x06;  //定时器T0工作方式2
  TH0=0xff;
  TL0=0xff;
  TR0=1;
  EA=1;  //允许总中断
  EX0=1;
  EX1=1;
  ET0=1;  //允许定时器t0中断


while(1)
{

                P0=0xeb;
    for(h=25;h>0;h--)
     {
       for(s=248;s>0;s--)
       {
        P1=0x00;
        P2=0xff;
        P1=0x01;
        P2=dis[h/10];
        delay(1);
                                P1=0x00;
        P2=0xff;
        P1=0x02;
        P2=dis[h%10];
                                delay(1);
                                P1=0x00;
        P2=0xff;
                                P1=0x04;
        P2=dis[(h+5)/10];
                                delay(1);
                                P1=0x00;
        P2=0xff;
                                P1=0x08;
        P2=dis[(h+5)%10];
        delay(1);
       }
     }

    delay(248);
                P0=0xf3;
    for(h=5;h>0;h--)
     {
        delay(392);
        P0=0xf3;
        delay(1);
        P1=0x00;
        P2=0xff;
        P1=0xaa;
        P2=dis[h%10];
        delay(600);
        P0=0xfb;
     }

    delay(248);
                P0=0xdd;
    for(h=25;h>0;h--)
     {
       for(s=248;s>0;s--)
       {
            
                                P1=0x00;
        P2=0xff;
        P1=0x01;
        P2=dis[(h+5)/10];
                                delay(1);
                                P1=0x00;
        P2=0xff;
        P1=0x02;
        P2=dis[(h+5)%10];
                                delay(1);
        P1=0x00;
        P2=0xff;
        P1=0x04;
        P2=dis[h/10];
        delay(1);
        P1=0x00;
        P2=0xff;
        P1=0x08;
        P2=dis[h%10];
        delay(1);
       }
     }

    delay(248);
    P0=0xde;
    for(h=5;h>0;h--)
     {
        delay(392);
        P0=0xde;
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0xaa;
        P2=dis[h%10];
        delay(600);
        P0=0xdf;

     }

         delay(248);

   }

}

为什么警告无法决定根目录
交通灯没办法正常运行

回复

使用道具 举报

ID:607192 发表于 2019-9-7 10:35 | 显示全部楼层
求大神解惑
回复

使用道具 举报

ID:235200 发表于 2019-9-7 12:56 | 显示全部楼层
三个中断程序中均有while(1),致使主程序无法知道要执行哪一个循环,所以编译不能通过产生HEX文件,另外三个中断均using 1,这样编程达不到保护现场的作用!
回复

使用道具 举报

ID:458699 发表于 2019-9-7 13:36 | 显示全部楼层
你少了“STARTUP.A51”那个文件,用c语言写51单片机程序都要有那个文件的。。创建工程时候会有个提示 copy “STARTUP.A51”。。。什么什么的,c语言写程序要点是,那个是必须的。。。用汇编的话才要点否
回复

使用道具 举报

ID:155507 发表于 2019-9-7 14:49 | 显示全部楼层
就是你的程序问题  三个中断程序中均有while(1)
先画程序框图,看看能不能行得通,越细越好。
回复

使用道具 举报

ID:607192 发表于 2019-9-7 15:31 | 显示全部楼层
csmyldl 发表于 2019-9-7 12:56
三个中断程序中均有while(1),致使主程序无法知道要执行哪一个循环,所以编译不能通过产生HEX文件,另外三个中 ...

大佬这个怎么改呢
回复

使用道具 举报

ID:607192 发表于 2019-9-7 15:32 | 显示全部楼层
aaaaabangw 发表于 2019-9-7 13:36
你少了“STARTUP.A51”那个文件,用c语言写51单片机程序都要有那个文件的。。创建工程时候会有个提示 copy  ...

感谢。现在只有中断还有点问题了
回复

使用道具 举报

ID:607192 发表于 2019-9-7 16:27 | 显示全部楼层
谢谢大家了,全部OK了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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