
请大家帮忙看一下程序,在keil中编译时出现C51 FATAL-ERROR - ACTION: PARSING SOURCE-FILE,谢谢 20
;/*文件1:cs.c*/#include<reg51.h>/51系列单片机初始化头文件#defineucharunsignedchar#defineuintunsign...
;/*文件1:cs.c*/
#include<reg51.h> /51系列单片机初始化头文件
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
extern void cs_t(void); /超声波发生子程序
extern void delay(uint); /延时子程序
extern void displaya(uchar*); /显示子程序
data uchar testok; /测距成功与否标志
void main(void)
{
data uchar dispram[5]; /定义显示距离时用的数组,用于存放测出距离的个位十位百位千位
data uint i;
data ulong time; /用于存放计数器的数值,用来计算超声波从发出到接收所用时间
P0=0xff; /系统初始化,P0与P2口初始值为1
P2=0xff;
TMOD=0x11; /方式为1,为16位的定时计数器
IE=0x80; /EA=1,CPU开中断
while(1)
{
cs_t(); /超声波发生程序,用于产生40KHz方波
delay(1); /调用延时程序
testok=0;
EX0=1; /允许外部中都0中断
ET0=1; /允许T0中断
while (! testok) display(dispram); /显示dispram初始值
if(1==testok) /若testok等于1,表示接收超声波成功,记下计数器的数值,用于计算所用时间
{
time=TH0;
time=(time<<8)|TL0; /高低位赋值给time
time*=172;
time/=10000;
dispram[0]=(uchar) (time%10); /个位
time/=10;
disparm[1]=(uchar) (time%10); /十位
time/=10;
dispram[2]=(uchar) (time%10); /百位
dispram[3]=(uchar) (time/10); /千位
if(0==dispram[3]) dispram[3]=17; /显示' '
}else
{
disparm[0]=16; /显示'-'
disparm[1]=16;
disparm[2]=16;
disparm[3]=16;
}
for(i=0;ik<300;i++) display(dispram); /显示约0.5s的时间
}
}
/*超声接受程序(外中断0)*/
void cs_r(void) interrupt 0
{
TR0=0; /停止计时器T0工作
ET0=0; /禁止T0中断
EX0=0; /禁止外部中断0中断
testok=1; /测距成功
}
/*超时接受程序(内中断0)*/
void overtime(void) interrupt 1
{
EX0=0;
TR0=0;
ET0=0;
testok=2; /测距不成功, 接收超时
}
后面还有三段用汇编写的子程序,分别是超声波发生子程序,延时子程序,
显示子程序,由于字数限制没有附上, 展开
#include<reg51.h> /51系列单片机初始化头文件
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
extern void cs_t(void); /超声波发生子程序
extern void delay(uint); /延时子程序
extern void displaya(uchar*); /显示子程序
data uchar testok; /测距成功与否标志
void main(void)
{
data uchar dispram[5]; /定义显示距离时用的数组,用于存放测出距离的个位十位百位千位
data uint i;
data ulong time; /用于存放计数器的数值,用来计算超声波从发出到接收所用时间
P0=0xff; /系统初始化,P0与P2口初始值为1
P2=0xff;
TMOD=0x11; /方式为1,为16位的定时计数器
IE=0x80; /EA=1,CPU开中断
while(1)
{
cs_t(); /超声波发生程序,用于产生40KHz方波
delay(1); /调用延时程序
testok=0;
EX0=1; /允许外部中都0中断
ET0=1; /允许T0中断
while (! testok) display(dispram); /显示dispram初始值
if(1==testok) /若testok等于1,表示接收超声波成功,记下计数器的数值,用于计算所用时间
{
time=TH0;
time=(time<<8)|TL0; /高低位赋值给time
time*=172;
time/=10000;
dispram[0]=(uchar) (time%10); /个位
time/=10;
disparm[1]=(uchar) (time%10); /十位
time/=10;
dispram[2]=(uchar) (time%10); /百位
dispram[3]=(uchar) (time/10); /千位
if(0==dispram[3]) dispram[3]=17; /显示' '
}else
{
disparm[0]=16; /显示'-'
disparm[1]=16;
disparm[2]=16;
disparm[3]=16;
}
for(i=0;ik<300;i++) display(dispram); /显示约0.5s的时间
}
}
/*超声接受程序(外中断0)*/
void cs_r(void) interrupt 0
{
TR0=0; /停止计时器T0工作
ET0=0; /禁止T0中断
EX0=0; /禁止外部中断0中断
testok=1; /测距成功
}
/*超时接受程序(内中断0)*/
void overtime(void) interrupt 1
{
EX0=0;
TR0=0;
ET0=0;
testok=2; /测距不成功, 接收超时
}
后面还有三段用汇编写的子程序,分别是超声波发生子程序,延时子程序,
显示子程序,由于字数限制没有附上, 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询