打印

请教KEIL编译和板子调试问题!

[复制链接]
3416|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
风语者1979|  楼主 | 2007-9-17 11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟是C51新手,我写的主机通讯程序在编译的时候,没有语法上的错误,但老是提示我说:
    *** FATAL ERROR L210: I/O ERROR ON INPUT FILE:
        EXCEPTION 0021H: PATH OR FILE NOT FOUND
        FILE: master.obj
我都不知道到底有什么I/O错误?
还有,如果编译成功以后,我要用板子调试,板子上的电源供电是多少?要怎么在uVision3里面设置呢(我的笔记本上没有串口,用的是一个25针口)?请教!谢谢!
程序如下:

#pragma SRC
#include<reg51.h>
#include<stdio.h>

#define TRUE 1
#define FALSE 0
#define LampComm P0_0        //以上语句定义主机正在通信的闪灯信号

#define SelectComm1 P0_1
#define SelectComm2 P0_2
#define SelectComm3 P0_3
#define SelectComm4 P0_4
#define SelectComm5 P0_5
#define SelectComm6 P0_6         //以上语句定义主机通信的从机号

#define MACHINECOMM_OK 0x11            //定义主机通信传达握手信号

#define MACHINECOMM_RET 0x88    //定义从机回复通信握手信号

#define DELAY_VALUE 3

sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_3=P0^3;
sbit P0_4=P0^4;
sbit P0_5=P0^5;
sbit P0_6=P0^6;
sbit P0_7=P0^7;

sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;

sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P2_4=P2^4;
sbit P2_5=P2^5;
sbit P2_6=P2^6;
sbit P2_7=P2^7;

sbit P3_2=P3^2;
sbit P3_3=P3^3;

bit EvRcv=FALSE;                  //是否收到串行数据的标志位

unsigned char rcvdata=0;          //从串口存储接受的变量
void send(char *temp,int j);      //发送子程序
void initial(void);        //初始化子程序
void delay(short i);         //延时子程序

void main(void)
 {
   unsigned char datacomm,count=0;
   datacomm=MACHINECOMM_OK;
   initial();
   while(1)
    {
      for(count=0;count<6;count++)
        {
          switch(count)
           {
            case 0:SelectComm1=1;
               break;
            case 1:SelectComm2=1;
               break;
            case 2:SelectComm3=1;
               break;
            case 3:SelectComm4=1;
               break;
            case 4:SelectComm5=1;
               break;
            case 5:SelectComm6=1;
               break;
            default: break;                            //根据count的不同值,选通不同的从机
            }
            send(&datacomm,1);                              //发送握手信号
            while(1)
              {
                if(EvRcv)
                  {
                   if(rcvdata==MACHINECOMM_RET)
                     {
                       LampComm=TRUE;
                       delay(DELAY_VALUE);
                       LampComm=FALSE;                            
                       }                                                                                       //指示灯闪烁
                       EvRcv=FALSE;
                       break;    //退出等待                          
                      }
                    }
              
              }
              SelectComm1=0;
              SelectComm2=0;
              SelectComm3=0;
              SelectComm4=0;
              SelectComm5=0;
              SelectComm6=0;                                //再次不选通所有的从机
            }
    }

void initial()            //初始化子程序
 {
   IP=0x10;                              //定义串口为高优先级中断
   IE=0x97;                               //允许串口,中断0,1,定时器0
   TCON=0x05;
   
   TMOD=0x21;                            //定时器为1为自动装入(auto_load)方式
   PCON=0;                               //SMOD=1时波特率翻倍
   SCON=0xD0;                            //smod=1(晶振为11.0592MHz时为0)
   TH1=0xf3;                            //串口工作方式:9位UART,波特率可变
   TL1=0xf3;
   PCON=0x80|PCON;
                                       //SMOD=1;
   TR1=1;                              //启动定时器1
   SelectComm1=0;
   SelectComm2=0;
   SelectComm3=0;
   SelectComm4=0;
   SelectComm5=0;
   SelectComm6=0;
  }

void send(unsigned char *temp,int j)
 {
   int i=0;
   LampComm=TRUE;
   EA=0;
   for(i=0;i<j-1;i++)                           //按发送数据的长度来发送数据
     {
       ACC=*(temp+i);
       TB8=P;
       SBUF=ACC;                              //发送数据
       while(TI==0);                          //发送数据完毕时TI会自动置高
       TI=0;                                  //发送数据完毕,将TI清零,准备下一次发送
      }
      EA=1;
      LampComm=FALSE;
  }

void Rcv_INT(void) interrupt 1                    //串口中断优先级为1
 {
   LampComm=TRUE;
   if(RI)                                    //如果收到数据则进行下面的操作
     {
       ACC=SBUF;                            //将串行通信的缓存忠的数据存入寄存器A
       if(P==RB8)
         {
           rcvdata=ACC;                        //将寄存器A中的数据存入变量rcvdata
           EvRcv=TRUE;                        //将已经接受的数据的标志位置高
          }
          RI=0;                                //RI清零
    }
    LampComm=FALSE;
 }

void delay(int i)                            //延时子程序
 {
   int j=0;
   i=i*DELAY_VALUE;
   while(j<i)j++;
  }

相关帖子

沙发
古道热肠| | 2007-9-17 12:21 | 只看该作者

出现这种情况重新建立一个工程吧

  Keil IDE环境的基本操作就是建立一个新工程,完成编译,链接操作。如果不会看看书或打开example文件夹下的Hellp工程看看结构就会了。
 您的电脑25针口通常是打印机口,买一根USB转RS232来扩充串口吧。
 开发板供电多少伏只有你自己知道,通常是9V通过稳压后给主板供电,也有直接用5V供电的开发板。

使用特权

评论回复
板凳
ayb_ice| | 2007-9-17 13:22 | 只看该作者

屏蔽掉"#pragma SRC"这语...

使用特权

评论回复
地板
风语者1979|  楼主 | 2007-9-17 13:59 | 只看该作者

谢谢楼上两位!

多谢了,程序编译好了.我用的是25针口,不过板子上有一个转换芯片,这不是问题,我就是不知道怎么样把程序和板子链接起来进行调试,我记得以前用TKS-935仿真器的时候要下载一个DLL文件才可以链接,用板子是不是也一样呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

58

帖子

0

粉丝