EDN首页   博客首页

最新日志

发表于:2008-3-10 16:04:10
标签:AVR  

1

ICC错误集锦

ICC错误集锦

作者:古欣 AVR与虚拟仪器,www.avrvi.com

新手用ICC编程的时候,经常会出现一些错误,现在将常见的错误报告整理如下。这里的一些错误是我为了展示而故意制造的,欢迎你提供你遇到的错误。排名不分先后:

一、正常编译通过

CODE:
C:\icc\bin\imakew -f main.mak
  iccavr -c -IC:\icc\include\ -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:\桌面\实验教程\LED应用\霓虹灯\main.c
  iccavr -o main -LC:\icc\lib\ -g -ucrtatmega.o -bfunc_lit:0x54.0x4000 -dram_end:0x45f -bdata:0x60.0x45f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @main.lk   -lcatmega
Device 1% full.
Done.
这是我们最想看到的了,万事大吉。

二、工程中未加入.C文件
CODE:

C:\icc\bin\imakew -f main.mak
  iccavr -o main -LC:\icc\lib\ -g -ucrtatmega.o -bfunc_lit:0x54.0x4000 -dram_end:0x45f -bdata:0x60.0x45f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @main.lk   -lcatmega
unknown file type @main.lk, passed to linker
!ERROR unknown file type '@main.lk'
C:\icc\bin\imakew.exe: Error code 1
Done: there are error(s). Exit code: 1

解决办法:将你的程序加入工程中,可以右键程序区>>ADD to project

三、程序没有后缀名,或者后缀名不正确。
CODE:

C:\icc\bin\imakew -f main.mak
C:\icc\bin\imakew.exe: 'main' is up to date
Done.

这是一个很难理解的错误,它是由工程中的程序文件没有后缀名造成的。
解决办法:将原有文件移出工程,将文件的后缀名改为.C,然后再加入工程中。

四、没有main函数
CODE:
C:\icc\bin\imakew -f main.mak
  iccavr -c -IC:\icc\include\ -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:\桌面\实验教程\LED应用\霓虹灯\main.c
  iccavr -o main -LC:\icc\lib\ -g -ucrtatmega.o -bfunc_lit:0x54.0x4000 -dram_end:0x45f -bdata:0x60.0x45f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @main.lk   -lcatmega
!ERROR file 'crtatmega.o': undefined symbol '_main'
C:\icc\bin\imakew.exe: Error code 1
Done: there are error(s). Exit code: 1

解决办法,编写程序主函数MAIN。

五、没有选择目标芯片出现如下错误:
CODE:
C:\icc\bin\imakew -f main.mak
  iccavr -c -IC:\icc\include\ -e -l -g -Wa-W D:\桌面\实验教程\LED应用\霓虹灯\main.c
  iccavr -o main -LC:\icc\lib\ -g -Wl-W -bfunc_lit:0.0x2000 -dram_end:0x25f -bdata:0x60.0x25f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @main.lk
!E C:\icc\lib\crtAVR.o(41): Code address 0 already contains a value
!E C:\icc\lib\crtAVR.o(41): Code address 0x1 already contains a value
C:\icc\bin\imakew.exe: Error code 1
Done: there are error(s). Exit code: 1


解决办法:project>>Options>>target>>device configuration 选择合适的芯片。

六、缺少分号
CODE:

C:\icc\bin\imakew -f main.mak
  iccavr -c -IC:\icc\include\ -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:\桌面\实验教程\LED应用\霓虹灯\main.c
!E D:\桌面\实验教程\LED应用\霓虹灯\main.c(52): unrecognized statement
!E D:\桌面\实验教程\LED应用\霓虹灯\main.c(53): syntax error; found `}' expecting `;'
!E D:\桌面\实验教程\LED应用\霓虹灯\main.c(53): syntax error; found `end of input' expecting `}'
C:\icc\bin\imakew.exe: Error code 1
C:\icc\bin\imakew.exe: 'main.o' removed.
Done: there are error(s). Exit code: 1

上面的报告说明了第52行缺少一个分号,预期分号的地方出现了“}”。
解决方法,在52行末尾添加分号。
类似的有:缺少}的报错
CODE:

C:\icc\bin\imakew -f main.mak
  iccavr -c -IC:\icc\include\ -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:\桌面\实验教程\LED应用\霓虹灯\main.c
!E D:\桌面\实验教程\LED应用\霓虹灯\main.c(55): illegal statement termination
!E D:\桌面\实验教程\LED应用\霓虹灯\main.c(55): skipping `void'
!W D:\桌面\实验教程\LED应用\霓虹灯\main.c(55):[warning] calling function without prototype may cause errors
!E D:\桌面\实验教程\LED应用\霓虹灯\main.c(56): syntax error; found `{' expecting `;'
!E D:\桌面\实验教程\LED应用\霓虹灯\main.c(57): syntax error; found `end of input' expecting `}'
C:\icc\bin\imakew.exe: Error code 1
C:\icc\bin\imakew.exe: 'main.o' removed.
Done: there are error(s). Exit code: 1


七:变量没有定义
CODE:

C:\icc\bin\imakew -f main.mak
  iccavr -c -IC:\icc\include\ -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:\桌面\实验教程\LED应用\霓虹灯\main.c
!E D:\桌面\实验教程\LED应用\霓虹灯\main.c(48): undeclared identifier `i'
C:\icc\bin\imakew.exe: Error code 1
C:\icc\bin\imakew.exe: 'main.o' removed.
Done: there are error(s). Exit code: 1


解决办法:在程序开始前添加变量定义,比如unsigned char i;注意,定义变量要在函数的最前面进行,及在进行计算操作之前定义所有变量。

感谢 [小飞]一凡 提供下面的内容。

!E touchpad.c(67): unrecognized statement
!E touchpad.c(68): syntax error; found `void' expecting `;'

上一行缺少“;”号所致。
!W touchpad.c(325):[warning] calling function without prototype may cause errors

没有在头文件中添加调用的函数库
!E E:\ICCAVR\icc\user001\main.c(100): undeclared identifier `temp'

错误:变量'temp'未声明

!E D:\iccavr6.31.A\icc\lib\crtAVR.(41):Codeaddress 0 already contains a value
!E D:\iccavr6.31.A\icc\lib\crtAVR.(41):Codeaddress 0x1 already contains a value

没有选择芯片型号。
!E library(31) area ' text' not large enough

程序空间不够。
?!E _3Q0.AAA(0): area 'data' not large enough

内存不足
C:/icc/include/iom8v.h(18): D:\icc圆织机程序\8.c(288): Macro redefinition of TWBR

重复定义TWBR
calling function without prototype may cause errors

没有extern声明

!E lianxi.o(103): multiple define: '_main'

main函数重复了,应该只能有一个main.

[warning] declaring a function without prototype may cause errors
函数原型没有声明。

你调用的某个函数没有声明。



Ambiguous operators need parentheses
不明确的运算需要用括号括起

Ambiguous symbol ``xxx``
不明确的符号

Argument list syntax error
参数表语法错误

Array bounds missing
丢失数组界限符

Array size toolarge
数组尺寸太大

Bad character in paramenters
参数中有不适当的字符

Bad file name format in include directive
包含命令中文件名格式不正确

Bad ifdef directive synatax
编译预处理ifdef有语法错

Bad undef directive syntax
编译预处理undef有语法错

Bit field too large
位字段太长

Call of non-function
调用未定义的函数

Call to function with no prototype
调用函数时没有函数的说明

Cannot modify a const object
不允许修改常量对象

Case outside of switch
漏掉了case 语句

Case syntax error
Case 语法错误

Code has no effect
代码不可述不可能执行到

Compound statement missing{
分程序漏掉"{"

Conflicting type modifiers
不明确的类型说明符

Constant expression required
要求常量表达式

Constant out of range in comparison
在比较中常量超出范围

Conversion may lose significant digits
转换时会丢失意义的数字

Conversion of near pointer not allowed
不允许转换近指针

Could not find file ``xxx``
找不到XXX文件

Declaration missing ;
说明缺少";"
[小飞]一凡(490152151) 12:03:21
很多人用它,学起来资源多.
 圣心决(350310876) 12:03:26
Declaration syntax error
说明中出现语法错误

Default outside of switch
Default 出现在switch语句之外

Define directive needs an identifier
定义编译预处理需要标识符

Division by zero
用零作除数

Do statement must have while
Do-while语句中缺少while部分

Enum syntax error
枚举类型语法错误

Enumeration constant syntax error
枚举常数语法错误

Error directive :xxx
错误的编译预处理命令

Error writing output file
写输出文件错误

Expression syntax error
表达式语法错误

Extra parameter in call
调用时出现多余错误

File name too long
文件名太长

Function call missing )
函数调用缺少右括号

Fuction definition out of place
函数定义位置错误

Fuction should return a value
函数必需返回一个值

Goto statement missing label
Goto语句没有标号

Hexadecimal or octal constant too large
16进制或8进制常数太大

Illegal character ``x``
非法字符x

Illegal initialization
非法的初始化

Illegal octal digit
非法的8进制数字

Illegal pointer subtraction
非法的指针相减

Illegal structure operation
非法的结构体操作

Illegal use of floating point
非法的浮点运算

Illegal use of pointer
指针使用非法

Improper use of a typedefsymbol
类型定义符号使用不恰当

In-line assembly not allowed
不允许使用行间汇编

Incompatible storage class
存储类别不相容

Incompatible type conversion
不相容的类型转换

Incorrect number format
错误的数据格式

Incorrect use of default
Default使用不当

Invalid indirection
无效的间接运算

Invalid pointer addition
指针相加无效

Irreducible expression tree
无法执行的表达式运算

Lvalue required
需要逻辑值0或非0值

Macro argument syntax error
宏参数语法错误

Macro expansion too long
宏的扩展以后太长

Mismatched number of parameters in definition
定义中参数个数不匹配

Misplaced break
此处不应出现break语句

Misplaced continue
此处不应出现continue语句

Misplaced decimal point
此处不应出现小数点

Misplaced elif directive
不应编译预处理elif

Misplaced else
此处不应出现else

Misplaced else directive
此处不应出现编译预处理else

Misplaced endif directive
此处不应出现编译预处理endif

Must be addressable
必须是可以编址的

Must take address of memory location
必须存储定位的地址

No declaration for function ``xxx``
没有函数xxx的说明

No stack
缺少堆栈

No type information
没有类型信息

Non-portable pointer assignment
不可移动的指针(地址常数)赋值

Non-portable pointer comparison
不可移动的指针(地址常数)比较

Non-portable pointer conversion
不可移动的指针(地址常数)转换

Not a valid expression format type
不合法的表达式格式

Not an allowed type
不允许使用的类型

Numeric constant too large
数值常太大

Out of memory
内存不够用

Parameter ``xxx`` is never used
能数xxx没有用到

Pointer required on left side of ->
符号->的左边必须是指针

Possible use of ``xxx`` before definition
在定义之前就使用了xxx(警告)

Possibly incorrect assignment
赋值可能不正确

Redeclaration of ``xxx``
重复定义了xxx

Redefinition of ``xxx`` is not identical
xxx的两次定义不一致

Register allocation failure
寄存器定址失败

Repeat count needs an lvalue
重复计数需要逻辑值

Size of structure or array not known
结构体或数给大小不确定

Statement missing ;
语句后缺少";"

Structure or union syntax error
结构体或联合体语法错误

Structure size too large
结构体尺寸太大

Sub scripting missing ]
下标缺少右方括号

Superfluous & with function or array
函数或数组中有多余的"&"

Suspicious pointer conversion
可疑的指针转换

Symbol limit exceeded
符号超限

Too few parameters in call
函数调用时的实参少于函数的参数不

Too many default cases
Default太多(switch语句中一个)

Too many error or warning messages
错误或警告信息太多

Too many type in declaration
说明中类型太多

Too much auto memory in function
函数用到的局部存储太多

Too much global data defined in file
文件中全局数据太多

Two consecutive dots
两个连续的句点

Type mismatch in parameter xxx
参数xxx类型不匹配

Type mismatch in redeclaration of ``xxx``
xxx重定义的类型不匹配

Unable to create output file ``xxx``
无法建立输出文件xxx

Unable to open include file ``xxx``
无法打开被包含的文件xxx

Unable to open input file ``xxx``
无法打开输入文件xxx

Undefined label ``xxx``
没有定义的标号xxx

Undefined structure ``xxx``
没有定义的结构xxx

Undefined symbol ``xxx``
没有定义的符号xxx

Unexpected end of file in comment started on line xxx
从xxx行开始的注解尚未结束文件不能结束

Unexpected end of file in conditional started on line xxx
从xxx 开始的条件语句尚未结束文件不能结束

Unknown assemble instruction
未知的汇编结构

Unknown option
未知的操作

Unknown preprocessor directive: ``xxx``
不认识的预处理命令xxx

Unreachable code
无路可达的代码

Unterminated string or character constant
字符串缺少引号

User break
用户强行中断了程序

Void functions may not return a value
Void类型的函数不应有返回值

Wrong number of arguments
调用函数的参数数目错

``xxx`` not an argument
xxx不是参数

``xxx`` not part of structure
xxx不是结构体的一部分

xxx statement missing (
xxx语句缺少左括号

xxx statement missing )
xxx语句缺少右括号

xxx statement missing ;
xxx缺少分号

xxx`` declared but never used
说明了xxx但没有使用

xxx`` is assigned a value which is never used
给xxx赋了值但未用过

Zero length structure
结构体的长度为零

系统分类: 单片机   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(436)
发表于:2008-3-6 8:35:58
标签:单片机  

3

单片机学习点滴

一、硬件部分
  • 一定要记得接晶振和复位电路。很多学生在Proteus上仿真成功后,焊板子的时候总是不记得把晶振和复位电路接上,这样板子是不会工作的。
  • 一般没有特殊要求的话,选用11.0592MHZ的晶振。这样有利于得到没有误差波特率。特别是当与PC机进行通信的话,选用这种晶振比较好。
  • 复位电路的电容可以选择10uF或者22uF。如果是10uF的话,充电电阻R的值要高于4K欧姆,如果你的单片机工作速度很慢,可以选择8.2K欧姆。
  • 每个大规模的数字IC旁边都要放一个0.1uF的电容(一端接电源,一端接地)来去除高频的干扰。
  • 在板子上最好做一个ISP下载座子与单片机相连,这样调试改写程序的时候就不用把单片机拔来拔去的,调试的周期也可以缩短。
  • 目前比较好用的51单片机有ATMEL公司的AT89S系列、SST公司的SST89系列,现在新出现一个公司的好51单片机,价格更便宜,听说性能也不错,就是STC系列单片机

二、软件部分

  • 能用C语言开发就用C语言,这样开发速度比较快,而且代码也比较容易维护。
  • 将你常用的芯片的服务编成函数库,这样就能重复利用了,降低开发的周期。
  • 善于利用KEIL C51的开发环境与PROTEUS仿真环境的联合调试,可以降低开发的成本。
  • 平常多做设计练习,多学多看,尤其要多多地收集别人公开的驱动源程序,这样可以在设计的时候少写很多代码。
  • 设计完成后,要结合电路图和代码写出设计说明书,这样可以很好地保存自己的设计思路,对以后维护设计和移植设计都是很有好处的。
  • 多看看《软件工程》和《数据结构与算法》,提高自己代码的可重用能力。
  • 好的程序员是热爱程序的程序员,把你编写的每个源代码文件都加上自己的名字和版权说明,在能保护自己的知识产权的同时,也是对自己的一种激励。
  • 大一点的设计都要写出数据词典,这样在用变量、写功能的时候就不会晕头转向。

系统分类: 单片机   |    用户分类:    |    来源: 转贴

评论(3) | 阅读(320)
发表于:2007-11-13 8:14:10
标签:无标签

1

89S51看门狗的使用方法

 

在ATMEL的89S51系列的89S51与89C51功能相同。指令兼容。HEX程序无需任何转换可以直接使用。89S51只比89C51增加了一个看门狗功能。89S51的其它功能可以参见89C51的资料。

看门狗具体使用方法如下:

在程序初始化中向看门狗寄存器(WDTRST地址是0A6H)中先写入01EH,再写入0E1H。即可激活看门狗。

程序代码

org 0000
Ljmp begin
Begin:
Mov 0A6H,#01EH ;先送1E
Mov 0A6H,#0E1H ;后送E1
;在程序初始化中激活看门狗。
……
……
For:
……
Mov 0A6H,#01EH ;先送1E
Mov 0A6H,#0E1H ;后送E1
;喂狗指令
……
Ljmp for

 

在C语言中要增加一个声明语句。
在AT89X51.h声明文件中增加一行 sfr WDTRST = 0xA6;

程序代码

Main()
{
WDTRST=0x1E;
WDTRST=0xE1;//初始化看门狗。
While (1)
{
WDTRST=0x1E;
WDTRST=0xE1;//喂狗指令

}
}

 

注意事项:

1. 89S51的看门狗必须由程序激活后才开始工作。所以必须保证CPU有可靠的上电复位。否则看门狗也无法工作。

2. 看门狗使用的是CPU的晶振。在晶振停振的时候看门狗也无效。

3. 89S51只有14位计数器。在16383个机器周期内必须至少喂狗一次。而且这个时间是固定的,无法更改。当晶振为12M时每16个毫秒需喂狗一次。

系统分类: 单片机   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(287)
发表于:2007-8-9 8:46:06
标签:感动  

3

一生最重要的人

一女生走上台来。
      教授说:"请在黑板上写下你难以割舍的二十组人名。"
      女生照做了。有她的邻居、朋友、亲人等等。
      教授说:"请你划掉一个这里面你认为最不重要的人。" 
      女生划掉了一个她邻居的名字。
      教授又说:"请你再划掉一个。"
      女生又划掉了一个她的同事。
      教授再说:"请你再划掉一个。"
      女生又划掉了一个……
      最后,黑板上只剩下了三组人名,她的父母、丈夫和孩子。
      教室非常安静,同学们静静地看着教授,感觉这似乎已不再是一个游戏了。
      教授平静地说:"请再划掉一个。"
      女生迟疑着,艰难地做着选择……
      她举起粉笔,划掉了父母的名字。
       "请再划掉一个。"身边又传来了教授的声音。
      她惊呆了,颤巍巍地举起粉笔缓慢而坚决地又划掉了儿子的名字。
      接着,她哇地一声哭了,样子非常痛苦。

教授等她平静了一下,问道"和你最亲的人应该是你的父母和你的孩子,因为父母是养育你的人,孩子是你亲生的,而丈夫是可以重新再寻找的,为什么丈夫反倒是你最难割舍的人呢?"
      同学们静静地看着她,等待着她的回答。
      女生平静而又缓慢地说道:"随着时间的推移,父母会先我而去,孩子长大成人后肯定也会离我而去,真正陪伴我度过一生的只有我的丈夫。"
  其实,生活就像洋葱,
  一片一片地剥开,
  总有一片会让我们流泪。

系统分类: 生活点滴   |    用户分类:    |    来源: 转贴

评论(1) | 阅读(364)
发表于:2007-7-29 17:43:15
标签:大学  

1

大学生应该学习哪些电子知识

有不少的在校的大学生写信给我,问在学校里应该学习什么电子知识.就业形势越来越严峻,不光是在中国,全球都一样,全球经济的发展速度放慢,至少会持续几年的时间.半导体产业目前进入低潮,很多公司裁员和亏损.但是技术还是在不断进步,半导体产品的集成度,速度等都在发展.在大学里只是混混日子的大学生不少,但也有一些比较努力的学生,想掌握更多的知识,希望能够在毕业之后找到好的工作,或者想创造一番事业,对于这些学生,我是赞赏的.我相信一分辛劳一分收获,你的努力是不会白费的.这个世界是适者生存,不适者淘汰的社会.像华为公司,进进出出的人不计其数,能适应的,留,不适应的,走.

有网友问我,你在大学里是怎么度过的?我是一个对电子有浓厚兴趣的人,在高中的时候就开始抓电烙铁,把家里的电器搞的乱七八糟(拆了,就不知道怎么装回去,当然现在不会这样了). 在大学里,我对电子很感兴趣,自己也买一些器件(我在广州中山大学读书,广州是一个很好的市场,元器件容易买,不管是旧的,还是新的,开始的时候,自己兜里没有多少钱,就买一些旧的元器件),然后自己组装音响,一开始问题真是多,搞了一个学期才搞定,由于问题多,所以经常到图书馆去查资料,去书店看(没有钱买书的时候就抄一段回来),学到很多模拟电路方面的知识.后来就组装逆变器(学校里晚上要关灯,没有电),逆变器可以在关灯了的时候提供电,别的宿舍都停电了,我宿舍就不会停(有逆变器供电),一到关了灯,同学们都跑到我们宿舍来聊天(别的宿舍都一片黑),也是其乐熔融,还有半夜三更看球赛.还组装了CD,VCD,录像机,我们宿舍成为了娱乐中心,可以卡拉OK,可以看电视,看录像,整个物理系,就我们宿舍是最齐全的娱乐设施.也不知道看过多少张VCD,很多同学是广州,从家里拿来好多VCD(还有一些同学的老爸是抓走私的,收缴了好多VCD,也拿过来看),每到下午6点,就开始放VCD,很多人看. 通过这些组装,学习了很多关于模拟电路和数字电路方面的知识,虽然我别的课程学的不好,但是电路的课程是一流的.

单片机和FPGA方面的知识,在大学学的不多,因为学校的东西太落后,都是到公司才学的.我认为对于搞电子来说,兴趣是最好的老师,如果你没有兴趣,那么最好不要选择电子的专业,因为毕竟有些时候比较累(一个小问题也可能折腾半天),很多时候理论上可以,实践上就不通.

闲话少说,还是讲讲应该掌握哪些东西吧.电子方面的知识很多,比电脑的知识要多不知道多少倍,学习电脑的,只要掌握几门语言就可以了,而搞电子的,需要的知识要全面很多,比如模拟电路,数字电路,单片机,电路制版等......由于电子知识太多,所以一般搞硬件的公司都比较多的员工,分工合作也比较细.因为一个人的能力有限,不可能掌握所有的知识.比如一些人专门设计外壳,一些人专门设计电路板,一些人专门搞出厂测试,一些人专门编写程序,一些人专门从事逻辑设计,一些人专门搞高频无线......

有人问我,你现在想转行吗?我的回答是不会,因为不管你做什么,你学而不精,还是无用武之地.电子行业需要干一行专一行,而不是学一行丢一行. 我在单片机,CPLD方面有了比较好的基础, 从事这方面的设计会得心应手,如果你改而从事别的设计,比如设计外壳,将一切从头开始.

所以在大学里,必须掌握一些基础知识(这是必要的,毕竟你还不知道毕业后将干什么工作),基础知识主要有模拟电路和数字电路以及高等数学知识(必修课).然后重点学习一些别的知识,比如单片机,FPGA,PCB设计,DSP(这些都是选修课),不要什么都学,自己感兴趣的,有条件的学一学. 有些人的求职简历写着学了什么什么,罗列一大堆,我认为这种人是吹牛,或者是学而不精.每个领域,要想精通,不要说一年两年,可能10年8年,都有的学.如果我去招聘,我反而看重简历里学的知识不是很杂,但有所精通的人.这些人一般有比较多的实践经验.实践比理论要重要的多,对于搞电子的来说.特别是高频,理论通,实践往往不通,但是实践通的,理论上又难于解析.

对于单片机来说,主要学习一下51单片机,尽管有了一些别的单片机,比如AVR,PIC,MSP430,ST,等,但是51用的企业还是最多的,搞电子的厂家,不用51的,是少数.对于求职,你懂51的话,很多公司都可以去.但是别的单片机,如果对方根本不用,那么他就不会考虑招你进去. 当然对别的单片机进行一些了解,当然是可以的,但重点还是在51上.主要51的开发工具比较成熟,而且供货商相当多,根本不用考虑货源问题.51是开放的内核,多厂家生产,而别的内核都不是开放的,独家生产. 学习51,主要以Keil C51为主,来学习,因为Keil C51是世界上最好的(个人认为)的编译器,懂keil的人也很多,技术支持完备.要以Keil C51 V6.xx版本为基础学习,不要用DOS版或Keil C51 V5.xx,这些版本几乎已经淘汰,只有一些仿真机厂家才当作宝贝,嵌入低版本的编译器,这种做法始终是落后的.目前专门描述Keil C51 V7.x的书还没有,为了帮助大家学习,与时代同步,我写了一些教程,给大家参考.有时间再看一些别的单片机的资料.

PCB制版,可以学习Protel99,介绍Protel99的书很多,也很容易买到,电路制版需要学习的时间不需要很多,可以掌握一下,有条件的最好自己实际去制作一下电路板.

CPLD,FPGA是可编程逻辑电路,这个很有必要花功夫学习,目前一些企业的技术还是比较落后,还经常使用8155,8237,138等一些老掉牙的芯片.没有办法,学校里学习的都是这些.用gal,CPLD已经可以完全代替这些电路.而且成本还便宜.一些网友发给我的电路我一看就头晕,一堆的74hc00,74hc04,4069,373,138等,板子很大,为何不用一块GAL,或CPLD搞定? 用这些芯片,不但电路布线复杂,容易出问题,而且影响成品率,容易被人复制.要制造更为复杂的逻辑,那就非CPLD,FPGA莫属了.CPLD的设计主要有Xilinx和Altera两个公司的.可以学习其中的一种.这些开发板,一般都可以买到,不少人制作和销售.我的网站将主要以Altera的为主,因为软件是免费的,我的网站有下载,芯片也容易买. 学习的时候主要以图形设计为主,用语言设计毕竟还比较抽象,有时间就可以加深一下,学习一下VHDL语言.

DSP知识,需要学习的人有比较好的数学基础,如果你的数学很好,可以选修一下.DSP设计的门槛比较高,开发工具也比较贵,高校设立dsp课程的也比较少,一般的学校都没有条件去学,有条件学习的,学一下,没有条件的,就不学也罢.

其他知识,比如高频电路,外壳设计(AutoCAD),属于专业性比较强的知识,学习该专业的可以学一下,不是该专业的,可以不学.

总结:

1.学习模拟电路和数字电路,高等数学等基础知识

2.必修单片机,PCB电路板设计

3.选修CPLD,DSP,高频电路,外壳设计等.

4.能力强的学多一些,能力小的,学少一些.

5.注重实践,多动手,理论要联系实际.

这就是我的看法,希望批评指正.

系统分类: 自由话题   |    用户分类:    |    来源: 转贴

评论(3) | 阅读(511)
发表于:2007-7-29 17:13:25
标签:keil  

1

在KEILC51程序中嵌入汇编代码

有时在C51程序中需要嵌入一些汇编代码,这时当然可以用通常的作法:
      按照 C51 与汇编的接口写一个汇编函数,然后在 C51 程序中调用该函数。(此种方法可在论坛里搜索,以前有很多帖子讲到,不再重复)

下面介绍直接嵌入汇编代码的方法:

1、在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码:
#pragma ASM
; Assembler Code Here
#pragma ENDASM

2、在 Project 窗口中包含汇编代码的 C 文件上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”
和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态;

3、根据选择的编译模式,把相应的库文件(如 Small 模式时,是 Keil\C51\Lib\C51S.Lib)加入工程中, 该文件必须作为工程的最后文件;

4、编译,即可生成目标代码。
 

系统分类: 单片机   |    用户分类:    |    来源: 整理

评论(0) | 阅读(603)
发表于:2007-7-17 8:39:02
标签:无标签

5

感动——Duty!

 

由于Flash文件比较大,不能直接播放,点击右键下载解压缩后观看。请欣赏完Duty动画后再返回阅读以下文字:

zip Duty.zip

(如果你喜欢这个Flash的话,就赶快告诉我吧,让我知道:我们曾一起为此而感动过:)

能吗
     看到他重新站立
     泪水
     从他疲惫的眼角涌出
     在满粘风尘与疲惫的脸颊滑落
     我感到眼眶的潮热与湿润

你能吗

无论春夏秋冬
     无论烈日凄风冷雨雪霜

你能吗

能让你的路标永不偏离
     永远耸立
     永远一如既往的指向那方

无论身边人来人往
      还是寂寞冷清
      无论问候赞扬冷眼嘲语
      掌声鲜花还是
      无人喝彩

你能吗

能让你的心涌不漂移
     永远坚定
     永远守候你也许无法在今生看到的
     理想

你能吗

Jesus: Could you keep this sign by the day I come back...? 

你能守住这个十字架到我回来的那一天吗?

Jesus: So people would know where I've gone through this. 

这样人们就知道我已经从这里经过了.

Jesus: Please do so...

请这样做吧.

The boy: No worry. I'll keep it till you're coming back... 

不用担心, 我会持守着它直到你回来的那一天.

pass the windy day, rainny, snowing, fall down, and stand up from where he fallon down. being alone waiting for Jesus come back.

Jesus back said: It must have been so tough for you enh? 

这一切对你是不是太严厉了?

Jesus: Now stay with me forever more.

现在就和我永远的呆在一起吧.


     I've watched this flash many times, and every time I watch it, can't help my tears, my heart've been touched deeply.

I know Jesus loves me, and he'd died for me, in order to save me. So God, we thank you for your great love. Please help us and strengthen us to keep the promise we made to you before.

I love LORD, and I want to love you till the day!

我们时常软弱,求主刚强我们,帮助扶持我们在软弱跌倒时,能够重新站立起来!并保守我们不要失掉起初的爱心,直到见主面的那一天。

耶稣说:“若有人要跟从我,就当舍己,背起他的十字架来跟从我.”(马可福音8章34节)

上帝交给了我们每人一个十字架,
     我们的责任就是用他来给迷失的人指引方向.
     也许前方的路无比艰辛,
     但爱是不分场合、时间、环境的...
     只要你遵循神的旨意,
     泪水就会变成甘露,
     苦难也就变成我们成长的磐石.

感谢神,是你无私的爱教会了我们.
     我们兄弟姐妹们会永远的为你守住这十字架.
     直到永远.
     阿门!
 

系统分类: 生活点滴   |    用户分类:    |    来源: 整理

评论(0) | 阅读(468)
发表于:2007-7-17 8:13:41
标签:无标签

2

只为遇见你

只为遇见你!
      我的主 ——
      也许根本
      不需用世上最华丽的词语,
      也许根本
      不需用人间最美妙的歌声,
      因为这一切,
      都不足以描述你的信实与慈爱。

我的主 ——
      没有你的日子,
      我属于黑暗,
      因为根本就不知道光为何物。

没有你的日子 ——
      眼泪是苦涩的,
      因为双眼看不见彩色的明天。

没有你的日子 ——
      每天都是雨天,
      每天都是尽头,
      哪里都找不到我灵魂的居所。

我不会写诗,
      但是我好想像大卫王那样
      写一首诗来赞美你。

何等尊贵的主,
      如果没有遇见你,
      现在的我将会是在哪里?
  
      如果没有遇见你,
      如果没有你生命的种子,
      一切最美的阳光和雨露,
      也只能加速我的腐败与死亡。


      我的主,
      你是我心所爱的。
      我的心喜乐,
      我的灵歌唱,
 
      我的出生,
      只为遇见你!

系统分类: 生活点滴   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(432)
发表于:2007-6-11 14:35:12
标签:无标签

4

TRUST IN GOD (信靠神)

 
 
       在一场船难中,唯一的生存者随着潮水,漂流到一座无人岛上。他天天激动地祈祷神救他能够早日离开此处,回到家乡。他还每天注视着海上有否可搭救他的人,但却是除了汪洋一片,什么也没有。后来,他决定用那片带他到小岛的木头造一个简陋的小木屋,以保护他在这险恶的环境中生存,并且保存他所有剩下的东西。但有一天,在他捕完食物后,准备回小屋时,突然发现他的小屋竟然陷在熊熊烈火之中,大火引起的浓烟不断向天上窜。最悲惨的是:他所有的一切东西,在这一瞬间通通化为乌有了。悲痛的他,气愤的对天吶喊着:神啊!你怎么可以这样对待我!顿时,眼泪从他的眼角流出。
    第二天一早,他被一艘正靠近小岛的船只的鸣笛声所吵醒。是的,有人来救他了。到了船上时,他问那些船员说:「你怎么知道我在这里?」「因为我们看到了信号般的浓烟。」他们回答说。
 
    人在碰到困难时,很容易会沮丧。不过无论受到折磨或者痛苦,都不用因此失去信心,因为上帝一直在我们心里面做着奇妙的工作。
 
    记住:当下一次你的小木屋着火时,那可能只是上帝美妙恩典的表征而已。在所有我们所认为负面的事情,上帝都是有正面答案的:

 
    你说:「那是不可能的。」
 上帝说:「在人所不能的事,在神凡事都能。」 (路 18:27)
   
 你说:「我累了。」
 上帝说:「我让你休息。」 (Matthew 11:28-30)
 
 你说:「没有人爱我。」
 上帝说:「我爱你。」 (John 3:16 & John 3:34)
 
 你说:「我做不下去了。」
 上帝说:「我的恩典够你支持下去。」(II Corinthians 12:9 & Psalm 91:15)
 
 你说:「我想不通。」 
 上帝说:「我引领你前行。」 (Proverbs 3:5-6)
  
 你说:「我做不到。」 
 上帝说:「你什么都做得到。」 (腓 4:13)
 
 你说:「我不配。」
 上帝说:「我能。」 (II Corinthians 9:8)
 
 你说:「我无法原谅自己。」
 上帝说:「我原谅你。」 (I John 1:9 & Romans 8:1)

 你说:「我是穷苦的。」 
 上帝说:「我供应你一切所需。」 (腓 4:19)

 你说:「我害怕。」 
 上帝说:「我并没有给你一个恐惧的灵。」(II Timothy 1:7)
 
 你说:「我常常在担忧受挫。」 
 上帝说:「放下你的重担,我为你承担。」 (I Peter 5:7)

 你说:「我信心不足。」 
 上帝说:「我给了每个人相同的信心。」 (罗 12:3)
 
 你说:「我不够聪明。」 
 上帝说:「我给你智慧。」 (I Corinthians :30)

 你说:「我是孤单的。」 
 上帝说:「我永远不会舍弃你的。」 (来 13:5)

系统分类: 自由话题   |    用户分类:    |    来源: 整理

评论(0) | 阅读(286)
发表于:2007-6-11 14:30:20
标签:无标签

1

考古学与圣经

 

世界著名的考古学家WILLIAN FOX ALBRIGHT 这样写道:“圣经中历史性资料相当精确,经得起任何现代学者的批评,使得任何站立在对立面的批评都趋向于错误。”

赫人

圣经提到“赫人”有40余次。在十九世纪,批评学者认为“赫人”根本没有存在过。然而,当考古学家考查土耳其的城市废墟时。他们发现了有关“赫人”的记载。考古学家和语言学家花费了长时间的艰苦工作之后,才翻译了赫人的文字记录。这就证明了圣经的正确,批评的错误。英国的东方学者ARCHIBALD HENRY SAYCE 这样写道:“在叙利亚人进攻撒玛利亚的叙述中提到的”赫人的诸王“,过去被宣称为一个错误或虚撰,然而实际上却证明了批评者本身的无知和错误。

摩西的文字记录

批评批评学者认为圣经的头五卷不可能是摩西写的。他们认为希伯来人在公元前800年之后,才有了记录的文字。一位法国探险家在叙利亚的RAS SHAM 发现一座殿宇图书馆,收藏有数百种语言的文字记录。其中就有一种摩西时代字母型中东语言写成的资料。FLINDERS PETRIE 先生在西奈山的SERABIT EL -KHADEM区发现了可追索到摩西时代的字母手稿。由此你可知道SPINOZA 和其他的圣经批评家是相当错误的,而圣经是正确的。

撒耳根王

根据圣经记载,撒耳根王是亚述国王。(赛 20:1)在古代的文字记录中没有发现撒耳根的名字。这使得那些批评学者们宣称撒耳根王根本不存在。他们相信圣经是错误的。考古学家BOTTA 在1842-1845年间的亚述古都尼尼微城附近挖掘考古。他发现了KHORSABAD 古城。在这一城市他发现了撒耳根的王宫。批评家被证明是错误的。确实有一位亚述王叫撒耳根,圣经是正确的。以赛亚在圣经中记录了亚述国王派出军队攻下亚实突城这一事件(赛20:1)。在撒耳根王宫的墙壁上发现有同一事件的记录。圣经确实是正确的。

伯沙撒

在圣经但以理书中记载,当玛代和波斯人攻起巴比伦时伯沙撒是国王。HITZIG 这位现代的自由主义者在评论《但以理书》时讲伯沙撒这人根本不存在。这是因为古代历史学家写过拿波尼度王是巴比伦的最后一个国王。然而,考古学家在古巴比伦的废墟中挖出的粘土片上记述了拿波尼度王前往阿拉伯的TEMA时,信任他儿子伯沙撒的领导。当古巴比伦灭亡时,伯沙撒正是国王。与但以理书 五章的记载相稳合。这也解释了为什么 伯沙撒宣称但以理是他王国中位居第三的领导者,(但5:29)而不是居第二。但以理是位居拿波尼度和伯沙撒之后的第三。有证据表明伯沙撒是尼布甲尼撒女儿拿波氏之子。作为继承人讲法上,伯沙撒至少是尼布甲尼撒"之子".。批评家在谈论伯沙撒根本不存在的说法上是完全错误的。你可以看到这是基于对圣经的无知和不信的错误。其中更糟的是,有些人还在教导这一错误学说。但不管怎样,圣经都是正确无误的。

官名-POLITARCHS

在新约使徒行传中,路加把帖撒罗尼迦城的统治者,用希腊语的官名称为“POLITARCHS ”(徒17:8)。批评的学者认为这是一个错误,认为当时没有任何官有这一头衔。然而在帖撒罗尼迦发现至少有17件文稿中使用过“POLITARCHS”这一官衔。考古学再一次证明了批评者的错误和无知,证明了圣经是正确无误的。

使徒行传的准确

WILLI AM RAMWEY(1851-1939)先生曾接受过TUBINGEN圣经批评学校F。C。BAUR 先生的观点,反对使徒行传。但是作为一位小亚细亚的考古学家,他的工作使他知道这一批判是错误的,使徒行传的记载是准确的:“……但是最近作为一个测绘学,古建筑和小亚细亚协会的权威人士,我发现自己常常要参照使徒行传的有关信息。”

约翰福音

批评家F.C.BAUR和VAN MANEN 推测《约翰福音》是公元150年之后才写成的。然而发现的《约翰福音》的古文稿可以查索到公元150年以前,死海古卷显示《约翰福音》无论在语言,地理,还是文化,历史等各方面都适合于公元70年之前。耶路撒冷的覆灭摧毁了所有的一切,以致在公元150年之后的人是不可能获得所有这些详情的。考古学家L.H.VINCENT 挖掘了一个名叫“铺华石处”的地方,该地方希腊语叫“LITHOSTROTOS”,希伯来语叫“GABBATHA” ,这在约翰福音19:13有记载。公元70年的耶路撒冷城覆灭,埋藏了这一地方。这一考古发现显示公元70年之前约翰就在那里,如他自己所见证的完全相符。(约21:24 )

考古学家W.F.ALBRIGHT 这样写道:“同样,比死海古卷先一代,由M.DIBELIUS和R.BULTMANN建立起来的圣经批评学校,至今还无视于死海古卷的发现而持续兴旺。然而所有过去的或现有的,对新约持批评态度的圣经学校都是无考古学基础的。它们好象空中建起的楼阁,因此是毫无前途的。”

结论

圣经记录的各种事件发生的时候,现代学者还不存在。批评的学者常常是基于预想,假定猜测,哲学和妄自尊大的不信。相反,考古学已经显示了历史资料的准确性。一位权威性考古学家NELSON GLUECK 博士这样写道:“然而事实上应该毫无凝问地说,没有任何考古学发现与圣经的标准记录有过冲突。现在已有好几十次的考古发现,它们都或粗略地,或详细准确地证明了圣经记载的历史事件。”

法国怀疑主义者VOLAIRE说:“不到一百年圣经将被遗弃,基督教将在地球上消失。” 他本人死于1778年,现在几百年过去了,圣经依然被人们视为真理,而且他本人在巴黎的房屋也被圣经协会使用了许多年。

THOMAS PAINE 写过一本反对圣经的书,他就他的书将会毁灭圣经。他本人死于1809年。现在圣经的发行量却比以往任何时候都多。

以赛亚先知写道:有人声说,“你喊叫吧!”有一个说:“我喊叫什么呢?”说:“凡有血气的尽都如草;他的美容,都像野地的花。草必枯干,花必凋残,因为耶和华的气吹在其上。百姓诚然是草。草必枯干,花必凋残,唯有我们神的话,必永远立定。”(赛40:6-8)

系统分类: 自由话题   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(275)
23下一页总共 , 当前 /