打印

你相信吗?keil能把人整死~~!

[复制链接]
6186|50
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
程疗匠人|  楼主 | 2009-4-1 22:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
keil 8.17a
1、把我的IO操作语句优化掉了,根本没帮我编译.
2、程序仿真一切正常,上板运行就跑飞了,不知为何?,然后把死循环由原来的while(1)改成for(;;)也一样。不知是什么原因。
3、重新建立个工程,再手动敲一边就好了,复制粘贴也不行。

真是郁闷死我了,大家有没碰到这样的问题?

相关帖子

沙发
汽车电子| | 2009-4-1 22:31 | 只看该作者

没遇到过

   我遇到过库函数有问题 
   strstr     strcmp 都不行,自己写一个就可以

使用特权

评论回复
板凳
渤海三叠浪| | 2009-4-1 22:34 | 只看该作者

动手敲的内容和复制粘贴的内容是一样的么?

眼见不一定为实啊!!!!

使用特权

评论回复
地板
mklwcai| | 2009-4-2 10:29 | 只看该作者

还是没有摸透keil的脾气

调段程序,一开始死活不稳定
后来减少了优化等级才稳定下来
虽然知道问题出在哪,但就是不知道该为什么编译器要那种选项

但是不用keil,还能用啥呢

使用特权

评论回复
5
wlq_9| | 2009-4-2 10:40 | 只看该作者

还可以用

iar for 51.只是用的人很少,只有万利在推.
另外还有GCC可用.

使用特权

评论回复
6
未来是梦| | 2009-4-2 12:01 | 只看该作者

re

5楼,哪有gcc for 51?给个连接

使用特权

评论回复
7
程疗匠人|  楼主 | 2009-4-2 12:09 | 只看该作者

keil全速执行后停下来就自动弹出反汇编窗口,很是烦人。为

谁能告诉我~~~谁能告诉我~~~是我们改变了世界还是世界改变了我们~~!!!

使用特权

评论回复
8
程疗匠人|  楼主 | 2009-4-2 12:11 | 只看该作者

自动打铃仪程序,出这个问题。

#include <reg51.h>
unsigned char ms50,xiaoshi,fenzhong,xianmiao,beeptemp;
unsigned long miao;
sbit beep = P1^0;

void init(void)    //初始化函数,就是开机首先要做的事情,init是自己起的名字
     {
     TMOD=0x11;
     PT1=1;
     TH0=0xB1;
     TL0=0xE0;
     TH1=0x3C;
     TL1=0xB0;
     TR1=1;
     TR0=1;
     IE=0x8A;
     }           //这段程序启动了芯片中的两个定时器

void timer0 (void) interrupt 1 using 1    //定时器中断程序,定时时间到,自动运行此程序
     {
     TH0=(65536-5000)/256;                //这两行的数值代表每5000us运行一次此程序
     TL0=(65536-5000)%256;                //置定时值,每次时间到都要重新置定时值
     }

void timer1 (void) interrupt 3 using 2    //定时器中断程序
     {
     TH1=(65536-49990)/256;                //这两行的数值代表每5000us运行一次此程序
     TL1=(65536-49990)%256;                //置定时值,每次时间到都要重新置定时值
     ms50=ms50+1;
     if(ms50>=20)
       {
       miao++;                            //辅助计时变量+1
       ms50=0;
       }
     }

void alarm(void)
    {
    beeptemp=1;
    if(miao>=10&&miao<=12)
      {
      beeptemp=0;
      }
    if(miao>=30&&miao<=35)
      {
      beeptemp=0;
      }
    if(miao>=42&&miao<=50)
      {
      beeptemp=0;
      }
    if(miao>=80&&miao<=120)
      {
      beeptemp=0;
      }
    beep=beeptemp;
    }

void main(void)
     {
     init();
     while(1)
       {
       xiaoshi=miao/3600;
       fenzhong=miao%3600/60;
       xianmiao=miao%60;
       alarm();
       }
     }

使用特权

评论回复
9
mxh0506| | 2009-4-2 12:29 | 只看该作者

5000us * 20 = 1e5us = 0.1s

还有,ms50应该声明成volatile

使用特权

评论回复
10
mxh0506| | 2009-4-2 12:35 | 只看该作者

还有,

为什么要:
#include <reg51.h>
你用的芯片在Keil里选不到么? 项目设置里针对具体芯片的设置做了么?
init()函数里只初始化了最基本的51寄存器,有没有必须初始化的扩展寄存器没有初始化? 比如外部RAM访问控制WDT等.

使用特权

评论回复
11
wlq_9| | 2009-4-2 13:11 | 只看该作者

6L

记错了,不是GCC.是SDCC 51

使用特权

评论回复
12
程疗匠人|  楼主 | 2009-4-2 16:47 | 只看该作者

volatile 有什么特别之处吗?为什么要声明成volatile

使用特权

评论回复
13
程疗匠人|  楼主 | 2009-4-2 16:48 | 只看该作者

还有,静态变量和全局变量有什么不一样的地方、?

除了静态变量只能函数内使用,全局变量能任何函数使用这个区别

使用特权

评论回复
14
mxh0506| | 2009-4-2 19:53 | 只看该作者

能说说你用的是什么芯片么?

也许最合适的头文件不是reg51.h

使用特权

评论回复
15
程疗匠人|  楼主 | 2009-4-2 19:57 | 只看该作者

AT89S51

使用特权

评论回复
16
ayb_ice| | 2009-4-2 20:21 | 只看该作者

又发现有人怀疑KEIL了

使用特权

评论回复
17
程疗匠人|  楼主 | 2009-4-2 20:29 | 只看该作者

找不到自己的原因,只好怀疑keil了。如果ayb_ice告诉我原因我

不怀疑keil了
为什么软仿真和硬运行不一样?

使用特权

评论回复
18
刘前辈| | 2009-4-2 20:41 | 只看该作者

怎么我运行的一点问题都没有?

把LZ的程序简化后我编译、运行了一遍。好好的,没问题呀。

Keil_7.05,正版。

别老说别人的问题,还是查查自己的程序问题。

使用特权

评论回复
19
程疗匠人|  楼主 | 2009-4-2 20:49 | 只看该作者

请问 刘前辈 是怎么简化的?为什么我全速运行停下来就弹出

使用特权

评论回复
20
cddx| | 2009-4-3 01:57 | 只看该作者

山寨版程序匠人

嘿嘿,山寨版程序匠人

使用特权

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

本版积分规则

29

主题

224

帖子

0

粉丝