小弟是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++; } |