论坛风格切换切换到宽版
  • 6965阅读
  • 18回复

请问:我的KEIL为什么不能运行C语言? [复制链接]

上一主题 下一主题
离线BG4ABM
 
发帖
1139
只看楼主 倒序阅读 0楼 发表于: 2006-10-09
最近想学c语言,就找了一个最简单的程序,在keil中建立了一个工程, 但就是编译通不过,总是显示can’t open file ‘at89x51.h’,语法肯定没问题。如果把at89x51.h改成reg51.h,这句话是不出现了,但编译还是通不过。我也试了其它c程序,都是一样的问题。请问是keil没装好,还是漏装了什么文件?以前用汇编时编译都是正常的。
离线wang1jin
发帖
51
只看该作者 1楼 发表于: 2006-10-09
he he...其实装软件最简单了呀..
离线BG6AGB
发帖
915
只看该作者 2楼 发表于: 2006-10-09
'
最近想学c语言,就找了一个最简单的程序,在keil中建立了一个工程, 但就是编译通不过,总是显示can’t open file ‘at89x51.h’,语法肯定没问题。如果把at89x51.h改成reg51.h,这句话是不出现了,但编译还是通不过。我也试了其它c程序,都是一样的问题。请问是keil没装好,还是漏装了什么文件?以前用汇编时编译都是正常的。
'

你先把你先的程序贴上来,再把错误信息贴上来再说~
不然基本没人能告诉你为什么
离线bd7bq
发帖
1491
只看该作者 3楼 发表于: 2006-10-09
通不过是什么意思,在项目里你选了芯片型号吗?
离线BG4ABM
发帖
1139
只看该作者 4楼 发表于: 2006-10-09
#include <at89x51.h>
#include <stdio.h>

void main(void)
{
 scon = 0x50; //串口方式1,允许接收
 tmod = 0x20; //定时器1定时方式2
 tcon = 0x40; //设定时器1开始计数
 th1 = 0xe8; //11.0592mhz 1200波特率
 tl1 = 0xe8;
 ti = 1;
 tr1 = 1; //启动定时器

 while(1)
  {
   printf ("hello world!\n"); //显示hello world
  }
}
程序就象上面那样,肯定没问题,因为这是一个单片机网站的例子。我现在碰到的问题不是某个c程序不能编译,而是所有的c程序都无法编译,而汇编程序却没有问题。已经重装过keil了,问题依旧。我怀疑是不是keil中的某个地方没有设置好。
离线BD4VNF
发帖
1208
只看该作者 5楼 发表于: 2006-10-09
#include <at89x51.h>可能路径不对
#include <nordic\reg9e5.h>试试这样
离线bd7bq
发帖
1491
只看该作者 6楼 发表于: 2006-10-09
看看错误的提示是什么
离线BG4ABM
发帖
1139
只看该作者 7楼 发表于: 2006-10-09
'
#include <at89x51.h>可能路径不对
#include <nordic\reg9e5.h>试试这样
'
问题依旧
离线BG6AGB
发帖
915
只看该作者 8楼 发表于: 2006-10-09
把keil目录下的tools.ini贴上来,同时说明一下你的keil安装的路径,看有没有可能是路径错了~
离线BD4VNF
发帖
1208
只看该作者 9楼 发表于: 2006-10-09
'
问题依旧
'
我是举个例子,你应该看看自己的路径
离线BG4ABM
发帖
1139
只看该作者 10楼 发表于: 2006-10-09
我是直接装在d盘根目录下的,正确吗?
离线BG4ABM
发帖
1139
只看该作者 11楼 发表于: 2006-10-09
tools.ini如下:
[uv2]
organization="liwei"
name="liwei liwei"
email=""
version=v2.2
book0=uv2\release_notes.htm("uvision2 release notes")
book1=uv2\uv2.hlp("uvision2 user's guide")

[c51]
path="d:\keil\c51"
sn=k1dzp-5iush-a01ue
version=v7.0
book0=hlp\release_notes.htm("release notes")
book1=hlp\gs51.pdf("uvision2 getting started")
book2=hlp\c51.pdf("c51 user's guide")
book3=hlp\c51lib.chm("c51 library functions",c)
book4=hlp\a51.pdf("assembler/utilities")
book5=hlp\tr51.chm("rtx51 tiny user's guide")
book6=hlp\dbg51.chm("uvision2 debug commands")
book7=hlp\isd51.chm("isd51 in system debugger")
book8=hlp\flashmon51.chm("flash monitor")
book9=mon390\mon390.htm("mon390: dallas contiguous mode monitor")
tdrv0=bin\mon51.dll ("keil monitor-51 driver")
tdrv1=bin\isd51.dll ("keil isd51 in-system debugger")
tdrv2=bin\mon390.dll ("mon390: dallas contiguous mode")
tdrv3=bin\lpc2emp.dll ("lpc900 epm emulator/programmer")
tdrv4=bin\ul2upsd.dll ("st-upsd ulink driver")
rtos1=rtxtiny.dll ("rtx-51 tiny")
rtos2=rtx51.dll ("rtx-51 full")
离线BD0AAI
发帖
3050
只看该作者 12楼 发表于: 2006-10-09
搜索一下at89x51.h, 看看到底在哪里, 实在搞不清就放在当前目录下
离线BD4VNF
发帖
1208
只看该作者 13楼 发表于: 2006-10-09
#include <atmel\at89x51.h>
改成这样就可以了
离线BG4ABM
发帖
1139
只看该作者 14楼 发表于: 2006-10-09
编译还是通不过啊!
离线BG4UVR
发帖
11288
只看该作者 15楼 发表于: 2006-10-09
7.0版本的keil,的确把原来的at89x51.h改没了,用regx51.h就成。你说:


如果把at89x51.h改成reg51.h,这句话是不出现了,但编译还是通不过。我也试了其它c程序,都是一样的问题。


你需要把这时候出现的错误提示告诉大家,大家才能知道你那是什么问题。
离线BG4UVR
发帖
11288
只看该作者 16楼 发表于: 2006-10-09
'
#include <at89x51.h>
#include <stdio.h>
void main(void)
{
 scon = 0x50; //串口方式1,允许接收
 tmod = 0x20; //定时器1定时方式2
 tcon = 0x40; //设定时器1开始计数
 th1 = 0xe8; //11.0592mhz 1200波特率
 tl1 = 0xe8;
 ti = 1;
 tr1 = 1; //启动定时器
 while(1)
  {
   printf ("hello world!\n"); //显示hello world
  }
}
程序就象上面那样,肯定没问题,因为这是一个单片机网站的例子。我现在碰到的问题不是某个c程序不能编译,而是所有的c程序都无法编译,而汇编程序却没有问题。已经重装过keil了,问题依旧。我怀疑是不是keil中的某个地方没有设置好。
'

还别说!我把这个程序复制到一个新项目中,编译果然通不过

第1个问题,楼上说过了, 就是把at89x51.h改成regx51.h。
第2个问题,这个程序中,有很多个“非打印字符”。这也是新手最不容易发现的一个问题。解决的办法是:1、把这些非打印字符一个一个删除(不过你得先找到它们才行)。2、照着这个程序,重新输入一遍。程序的缩进,使用tab,不要使用空格(要是全角的空格就更不行了)。另外注意,程序所有的(注释中的不算)标点符号,一定要用半角字符,如果有一个全角的,那肯定是编译通不过的。

例子:
半角:
[]{}()
全角:
[]{}()
离线bd7rf
发帖
10148
只看该作者 17楼 发表于: 2006-10-10
也许是原作者无意中设了陷阱吧,当初写文章的时候用的全角 自己重新打一遍估计就没问题了。
离线BG4ABM
发帖
1139
只看该作者 18楼 发表于: 2006-10-10
谢谢大家的讨论,问题已经解决了。尤其要谢谢bg4uvr,我是受他的话鼓舞,才开始学c语言的,也是他指出了问题的要害,按照他的方法去做,程序顺利地通过了编译。