专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
菜鸟遇到问题了!请大家帮忙
2019-03-24 20:03
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
4592
9
909
近日从网上下了个超声测距程序(由于是c语言,小弟看不懂),编译之后出现下图中的错误,好像是“空地址溢出”。不知是何故,求教具体修复方法,附程序
谢谢诸位了!已上传相关图片,劳烦大家了!谢谢!谢谢!
[
本帖最后由 1386734 于 2011-3-26 20:58 编辑
] 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
daicheng
1楼-- · 2019-03-24 22:18
精彩回答 2 元偷偷看……
加载中...
ddllxxrr
2楼-- · 2019-03-25 01:52
加载中...
辛昕
3楼-- · 2019-03-25 07:41
最近挺忙的,都没每天回回贴了。
感觉好像,,daicheng,ddllxx,还有一些人,一时没看到,想不起来。
感觉这几位一直都在帮我看着帖子,心想,是不是琳子姐打得招呼呢?
还是,呵呵,几位主动跑来帮忙,感激不尽,感激不尽。
加载中...
辛昕
4楼-- · 2019-03-25 08:21
下载了你的附件,其中只有一份源程序。
请重新上传你的图,让大家好帮你解决问题。
或者说,直接把那个错误信息 复制上来。
另外,想说,为了让大家更方便地帮你看看问题出在哪里,最好是把你用的整个KEIL的项目文件传上来——如果你是用的KEIL的话,现在51,它是大主流。
加载中...
ddllxxrr
5楼-- · 2019-03-25 12:52
#include <reg51.H>
sbit csbout=P3^5;
sbit csbint=P3^7;
#define csbc=0.034
sbit bg=P3^4;
unsigned char csbds,opto,digit,buffer[3],xm1,xm2,xm0,key,jpjs,ki;//显示标识
unsigned char convert[10]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9段码
unsigned int s,t,i,sj1,sj2,sj3,mqs,sx1,sjtz,sja,sjb;
bit cl;
void csbcj();
void delay(i);
void scanLED();
void showOnce();
void timeToBuffer();
void offmsd();
void main() //主函数
{
EA=1; //开中断
TMOD=0x11; //设定时器0为计数,设定时器1定时
ET0=1; //定时器0中断允许
ET1=1; //定时器1中断允许
TH0=0x00;
TL0=0x00;
TH1=0x9E;
TL1=0x57;
csbds=0;
csbint=1;
csbout=1;
cl=0;
opto=0xff;
jpjs=0;
sj1=25;
sj2=100;
sj3=450;
ki=0;
TR1=1; //设定时值1为20ms
while(1)
{
csbcj(); //调用超声波测距程序
if(s>sj3) //大于时显示"CCC"
{
buffer[2]=0x39;
buffer[1]=0x39;
buffer[0]=0x39;
}
else if(s<sj1) //小于时显示"- - -"
{
buffer[2]=0x40;
buffer[1]=0x40;
buffer[0]=0x40;
}
else timeToBuffer(); //调用转换段码功能模块
offmsd(); //调用判断百位数为零模块,百位为零时不显示
scanLED(); //调用显示函数
}
}
void scanLED() //显示功能模块
{
digit=0x04;
for( i=0; i<3; i++) //3位数显示
{
P3=~digit&opto; //依次显示各位数
P1=~buffer
; //显示数据送P1口
delay(20); //延时处理
P1=0xff; //P1口置高电平(关闭)
if((P3&0x10)==0) //判断3位是否显示完
key=0;
digit>>=1; //循环右移1位
}
}
void timeToBuffer() //转换段码功能模块
{
xm0=s/100;
xm1=(s-100*xm0)/10;
xm2=s-100*xm0-10*xm1;
buffer[0]=convert[xm2];
buffer[1]=convert[xm1];
buffer[2]=convert[xm0];
}
void delay(i) //延时子程序
{
while(--i);
}
void timer1int (void) interrupt 3 using 2 //终断处理程序,1秒测量一次
{
TH1=0x9E;
TL1=0x57;
csbds++;
if(csbds>=40)
{
csbds=0;
cl=1;
}
}
void csbcj() //超声波测距子程序
{
if(cl==1)
{
TR1=0;
TH0=0x00;
TL0=0x00;
i=20; //超声波脉冲个数10个
while(i--)
{
csbout=!csbout;
}
TR0=1;
i=450;
while(i--)
{
}
i=0;
while(csbint) //判断接收回路是否收到超声波的回波
{
i++;
if(i>=2450) //如果达到一定时间没有收到回波,则将csbint置零,退出接收回波处理程序
csbint=0;
}
TR0=0;
TH1=0x9E;
TL1=0x57;
t=TH0;
t=t*256+TL0;
s=t*csbc/2; //计算测量结果
TR1=1;
cl=0;
}
}
void offmsd() //百位为数0判断模块
{
if (buffer[2] == 0x3f) //如果值为零时百位不显示
buffer[2] = 0x00;
}
[
本帖最后由 ddllxxrr 于 2011-3-26 12:27 编辑
]
加载中...
1386734
6楼-- · 2019-03-25 14:42
非常感谢!编译通过了!但直接复制过去不行,有几个括号括错了,我对照原程序改了下行了(虽然不知道为什么
)。
但hex文件有3k多写不进去,打开看20H--7F0H之间没数据啊!800H--C80H之间有数据,程序应该就是这个吧?
能不能吧程序拉到空白的那部分啊?那样的话就好写入了
加载中...
1
2
下一页
一周热门
更多
>
相关问题
相关文章
基于51单片机的计算器设计
0个评论
51单片机300个proteus仿真实例下载
0个评论
51单片机 蜂鸣器
0个评论
51单片机驱动RC522模块
0个评论
基于51单片机的指纹密码锁
0个评论
AT89C51单片机制作简易密码锁
0个评论
51单片机汇编语言计数器
0个评论
51单片机精确延时设计
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
感觉好像,,daicheng,ddllxx,还有一些人,一时没看到,想不起来。
感觉这几位一直都在帮我看着帖子,心想,是不是琳子姐打得招呼呢?
还是,呵呵,几位主动跑来帮忙,感激不尽,感激不尽。
请重新上传你的图,让大家好帮你解决问题。
或者说,直接把那个错误信息 复制上来。
另外,想说,为了让大家更方便地帮你看看问题出在哪里,最好是把你用的整个KEIL的项目文件传上来——如果你是用的KEIL的话,现在51,它是大主流。
sbit csbout=P3^5;
sbit csbint=P3^7;
#define csbc=0.034
sbit bg=P3^4;
unsigned char csbds,opto,digit,buffer[3],xm1,xm2,xm0,key,jpjs,ki;//显示标识
unsigned char convert[10]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9段码
unsigned int s,t,i,sj1,sj2,sj3,mqs,sx1,sjtz,sja,sjb;
bit cl;
void csbcj();
void delay(i);
void scanLED();
void showOnce();
void timeToBuffer();
void offmsd();
void main() //主函数
{
EA=1; //开中断
TMOD=0x11; //设定时器0为计数,设定时器1定时
ET0=1; //定时器0中断允许
ET1=1; //定时器1中断允许
TH0=0x00;
TL0=0x00;
TH1=0x9E;
TL1=0x57;
csbds=0;
csbint=1;
csbout=1;
cl=0;
opto=0xff;
jpjs=0;
sj1=25;
sj2=100;
sj3=450;
ki=0;
TR1=1; //设定时值1为20ms
while(1)
{
csbcj(); //调用超声波测距程序
if(s>sj3) //大于时显示"CCC"
{
buffer[2]=0x39;
buffer[1]=0x39;
buffer[0]=0x39;
}
else if(s<sj1) //小于时显示"- - -"
{
buffer[2]=0x40;
buffer[1]=0x40;
buffer[0]=0x40;
}
else timeToBuffer(); //调用转换段码功能模块
offmsd(); //调用判断百位数为零模块,百位为零时不显示
scanLED(); //调用显示函数
}
}
void scanLED() //显示功能模块
{
digit=0x04;
for( i=0; i<3; i++) //3位数显示
{
P3=~digit&opto; //依次显示各位数
P1=~buffer; //显示数据送P1口
delay(20); //延时处理
P1=0xff; //P1口置高电平(关闭)
if((P3&0x10)==0) //判断3位是否显示完
key=0;
digit>>=1; //循环右移1位
}
}
void timeToBuffer() //转换段码功能模块
{
xm0=s/100;
xm1=(s-100*xm0)/10;
xm2=s-100*xm0-10*xm1;
buffer[0]=convert[xm2];
buffer[1]=convert[xm1];
buffer[2]=convert[xm0];
}
void delay(i) //延时子程序
{
while(--i);
}
void timer1int (void) interrupt 3 using 2 //终断处理程序,1秒测量一次
{
TH1=0x9E;
TL1=0x57;
csbds++;
if(csbds>=40)
{
csbds=0;
cl=1;
}
}
void csbcj() //超声波测距子程序
{
if(cl==1)
{
TR1=0;
TH0=0x00;
TL0=0x00;
i=20; //超声波脉冲个数10个
while(i--)
{
csbout=!csbout;
}
TR0=1;
i=450;
while(i--)
{
}
i=0;
while(csbint) //判断接收回路是否收到超声波的回波
{
i++;
if(i>=2450) //如果达到一定时间没有收到回波,则将csbint置零,退出接收回波处理程序
csbint=0;
}
TR0=0;
TH1=0x9E;
TL1=0x57;
t=TH0;
t=t*256+TL0;
s=t*csbc/2; //计算测量结果
TR1=1;
cl=0;
}
}
void offmsd() //百位为数0判断模块
{
if (buffer[2] == 0x3f) //如果值为零时百位不显示
buffer[2] = 0x00;
}
[ 本帖最后由 ddllxxrr 于 2011-3-26 12:27 编辑 ]
但hex文件有3k多写不进去,打开看20H--7F0H之间没数据啊!800H--C80H之间有数据,程序应该就是这个吧?
能不能吧程序拉到空白的那部分啊?那样的话就好写入了
一周热门 更多>