收藏 分享(赏)

keil c语言编程常见错误分析.doc

上传人:j35w19 文档编号:7541287 上传时间:2019-05-21 格式:DOC 页数:41 大小:355KB
下载 相关 举报
keil c语言编程常见错误分析.doc_第1页
第1页 / 共41页
keil c语言编程常见错误分析.doc_第2页
第2页 / 共41页
keil c语言编程常见错误分析.doc_第3页
第3页 / 共41页
keil c语言编程常见错误分析.doc_第4页
第4页 / 共41页
keil c语言编程常见错误分析.doc_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、1. Warning 280:i:unreferenced local variable 说明局部变量 i 在函数中未作任何的存取操作解决方法消除函数中 i 变量的宣告及即定义的参数在程序中并未调用2 Warning 206:Music3:missing function-prototype 说明 Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用 解决方法将叙述 void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成 extern void Music3(void),即作外部宣告 3Error:318:cant open file beep.h

2、说明在编译 C:8051MANN.C 程序过程中由于 main.c 用了指令i nclude “beep.h”,但却找不到所致解决方法编写一个 beep.h 的包含档并存入到 c:8051 的工作目录中 4 Error 237:LedOn:function already has a body 说明 LedOn( )函数名称重复定义即有两个以上一样的函数名称 解决方法修正其中的一个函数名称使得函数名称都是独立的 5 *WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELAYX1MS?DELAY 说明

3、DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间解决方法去掉 DelayX1ms( )函数或利用条件编译#if #endif,可保留该函数并不编译 6 *WARNING 6 :XDATA SPACE MEMORY OVERLAP FROM : 0025H TO: 0025H 说明外部资料 ROM 的 0025H 重复定义地址 解决方法外部资料 ROM 的定义如下 Pdata unsigned char XFR_ADC _at_0x25 其中 XFR_ADC 变量的名称为 0x25,请检查是否有其它的变量名称也是定义在 0x25 处并修正它 7 WARNING 206:Dela

4、yX1ms: missing function-prototype C:8051INPUT.C Error 267 :DelayX1ms :requires ANSI-style prototype C:8051INPUT.C 说明程序中有调用 DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告 解决方法编写 DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在 delay.h 的包含档宣告成外部以便其它函数调用 8 *WARNING 1:UNRESOLVED EXTERNAL SYMBOL SYMBOL:MUSIC3 解决办法:1.是文件没有添加到工程里。2

5、.可能是因为存在没有被调用的已经定义的函数。3.不知道你有没有把 Source group 组下面的 A51.C 删掉,如果没有删,在A51.c 上点右键,选择 remove file “ “.4.建一个新的 c 文件,里面写一个空的函数,把该文件添加到 project 中,注意该文件不能再选 generate assembler SRC file 和 assemble SRC file 选项。重新编译工程,如果警告该函数没被调用,在主文件中调一下。5.建一个新的 c 文件,把主文件中的几个函数移至该文件,把该文件添加到project 中,注意该文件不能再选 generate assemble

6、r SRC file 和 assemble SRC file 选项。重新编译工程9*WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL:MUSIC3 MODULE:C:8051MUSIC.OBJ(MUSIC) ADDRESS:0018H 在 MUSIC3 函数里面 MUSIC 这个参数有使用,没有申明。或者申明了没有实体。也就是说对于这个参数,编译器无法解析。10 *ERROR 107:ADDESS SPACE OVERFLOW SPACE: DATA SEGMENT: _DATA_GOUP_ LENGTH: 0018H 说明 data

7、 空间已经不够用,原因是你可能有好多函数,而函数内部的局部变量又没有定义其空间,这种情况下,系统会将变量分配到你在 Otions for Target 对话框里的设置的空间。如果你在下图所示中的 Memory Model 里设置成 Small:variables in DATA,则 DATA 空间很快便用完,导致 data 空间不够用。解决的办法有两种,一是通过更改 Memory Model设置,可以设置成 pdata 或 xdata,以便有足够大的空间,但这又带来新的问题,程序运行速度减慢,而且 code 代码也会加大,因为如果一个局部变量被存放在了 xdata 空间,汇编语言访问 xdat

8、a 空间的代码大小要比访问 data 空间的代码大,变量一旦很多,程序的代码也会逐渐增大;二是根据自己的要求设置变量的空间。所以这涉及到代码优化的问题,遇到具体问题时,在运行速度和代码大小之间取得适合自己的情况Project-Option for target-BL51 Locate 选项卡,如上图红圈部分所示,根据自己系统的存储器分布情况,可以设置代码区间和 XDATA 区间。通常默认情况下,代码区间很小,所以会造成 107 号错误,根据需求,调大该范围即可。11ERROR L105: PUBLIC REFERS TO IGNORED SEGMENTSYMBOL: USARTDATACOUN

9、TSEGMENT: ?DT?USART_READWRITERam 空间不足:外部变量:定义处不用加 External,声明处要加 External 将以 data 型别定义的公共变量修改为 idata 型别的定义 12*ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNAL SYMBOL: VOLUME MODULE: C:8051OSDM.OBJ (OSDM) ADDRESS: 4036H 定义了某某函数或全部变量在不同文件里面想调用它,却在包含头文件里面少了 extern 语句,或只有主程序和包含头文件没有(EXTERN定义语句 (函数). 如果调试

10、时有些 if 结构里的语句符合条件没有执行,或者某些语句不符合条件也被执行,那是因为 if 和 else 里有相同的语句,编译的时候作优化处理了。13 WARNING 15 (MULTIPLE CALL TO SEGMENT) 症状原因Warning 15 向我们表明了 linker 发现了一个函数,这个函数不仅在main code 里被调用了,而且在 ISR(或者被 ISR 调用的函数中)被调用了。或者是被同时被多个 ISR 同时调用了。这样会产生一个问题,就是在此函数不是一个可重入函数,而当此函数已经在执行时它可能被另一个 ISR 所调用。这样就会导致结果是可变的而且很可能会导致一些参数的

11、错误。另一个问题就是本地变量和参数所使用的内存可能被其他函数的内存覆盖。如果函数是由中断所调用的,则此函数的内存就会被使用。这会引起其它函数的内存错误。解决方法有几种方法去解决这个问题如果你 100%确认这个函数的两个副本都不会同时执行(如果此函数是被 main 调用并且中断是未被使能的)并且此函数没有使用内存(只使用的寄存器),那么你就可以忽略此警告如果此函数使用了内存,你就要使用 OVERLAY directive 来将此函数从覆盖分析(overlay anaysis)中移除。举例如下:OVERLAY (?PR?_WRITE_GMVLX1_REG?D_GMVLX1 ! *)如上语句能阻止被

12、此函数使用的内存遭到覆盖。如果这个函数调用了你程序中其他的在别处的函数,那么你可能需要将这些函数也排除在覆盖分析之外。如果当此函数在执行时可以被调用,那么事情就会变得比较的复杂。你可能需要:无论何时当从 main 中调用此函数时,需要关闭中断。你可能需要对被调用的函数使用#pragma disable。你也必须使用OVERLAY directive 将此函数从 overlay analysis 中移除。 为此函数创建两个副本。一个给 main,一个给 ISR。 使此函数可重入。14E:VCWORK2815.C(826): error C236: _wrbyte: different lengt

13、h of parameter lists子函数里的形参声明的方式不对,需要每个参数都定义一下类型E:VCWORK2815.C(743): error C183: unmodifiable lvalue出现 error C183: unmodifiable lvalue 的错误,最后发现时存在一个数组是uchar code xx5,后边把它用作接受串口的缓冲区,显示 uchar code 是不能改变的,是写在 rom 中的。应该改成 uchar xx5,这是写在 ram 中的原因:修改了不能改变的变量,E:VCWORK2815.C(799): error C242: array: too man

14、y initializers15 ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: _WRITE_DATA MODULE: .ds18b20start.obj (DS18B20c/c+语言中有很多地方要用到 extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下。对于比较小的程序,一般只有一个 c 文件和一个头文件,全局变量我们通常会直接定义在 c 文件中,在程序之前加 int i 定义。如果要在头文件中定义有以下两种方法:用 extern 来声明:extern int i;这一句只是对变量 i

15、进行声明,在c 文件的程序之前必须加上 int i 进行定义。extern int i=0;这一句声明和定义都做了。对于大一点的程序,有很多 c 文件和头文件,这个时候全局变量就必须在头文件中声明(不需要初始化),然后在一个 c 文件中定义(该初始化的要初始化)。如果在头文件中定义,则编译的时候会出现重复定义的错误。如果只有头文件中声明就会出现没有定义有警告。* ERROR L104: MULTIPLE PUBLIC DEFINITIONSSYMBOL: KMODULE: 222.obj (222)出现上述错误则是因为变量 k 重复定义,把你的头文件中的变量定义前加extern(只是变量声明不

16、用初始化),再在某一个你要调用该变量的 c 文件的程序之前再定义(注意第一个调用的 c 文件要负责附带初始化该变量,其他调用的c 文件就不需要初始化过程啦)14MAIN.C(85): warning C259: parameter: pointer: different mspace原因,函数调用时候的实参和声明时候的形参存储空间不同,修改成一致即可。16 E:VC28152815FTOC.C(32): warning C231: _memcpy: attempt to redefine intrinsic function17* ERROR L121: IMPROPER FIXUP访问内存指

17、令超出指令的寻址范围了,例如 MOVX Ri 指令超出了 PDATA 段的范围,或者是 ACALL 指令超出了 2k 的寻址范围. 检查你的调用子函数的命令.特别是那些 LCALL,ACALL 等18* WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNALSYMBOL: MAINMODULE: C:KEILC51LIBC51S.LIB (?C_INIT)ADDRESS: 080DH在 main 函数里面 C_INIT 这个参数有使用,没有申明。或者申明了没有实体。也就是说对于这个参数,编译器无法解析。19 keil4 warning C316:un

18、terminated conditionals 今天用 Keil4 写程序时遇到这个问题: warning C316:unterminated conditionals跑了几个论坛,在审视了一遍代码之后,知道了原因:像类似 XX.C(99):warning C316:unterminated conditionals 这种警告的话 XX.c 文件有一个凌乱的条件编译或预编译。因为 C 语言中有些头文件中的预编译或宏定义,那么条件编译就避免不了。写条件编译时,可能有忘写一个基本的语句。比如说,你用了条件编译#ifndef 而忘记写#endif。因为他们本来就是配套的。有前者必有后者。不能丢掉其中

19、任何一个。一个 include 文件最后的#endif 少了# 前缀或者没有 #endif,都会出现类似警告。就像你写 C 语句,你不会写了 int i 而不能忘记写 “ ; “ ,否者就不能把一个语句表达完整。总之,出现上述问题。先看看整个 C 文件中是否出现上述错误,或整个工程中自己写的那些头文件中里面的条件编译是否都写对了,即:前面写了#ifndef,后面是否有对应的#endif。20 DS1302.C(86): error C183: unmodifiable lvaluecode 的内容只能读,不能改 . 定义数组时把 code 去掉。21 keil 编译警告 Argument:co

20、nversion:pointer to non-pointer 是什么问题应该是参数传递错误,指针参数处传递了非指针参数。22 * ERROR L114: SEGMENT DOES NOT FIT块大小与目标设备不符。段溢出了,你的 DATA 区超过了 256 字节你的 idata 变量太大(CEH),与器件容量不匹配。可能你的单片机型号选成31 了,选个 256 字节内部 RAM 的应该就行,将定义为 data 的变量定义为 xdata类型,问题解决了。23 error C193 :bad operand type% 取模不能用浮点数,frequence 要转成整型来取模,小数位可以乘 10

21、 后转整型来得到。24 常见错误error 1: Out of memory 内存溢出error 2: Identifier expected 缺标识符error 3: Unknown identifier 未定义的标识符error 4: Duplicate identifier 重复定义的标识符error 5: Syntax error 语法错误error 6: Error in real constant 实型常量错误error 7: Error in integer constant 整型常量错误error 8: String constant exceeds line 字符串常量超过一

22、行error 10: Unexpected end of file 文件非正常结束error 11: Line too long 行太长error 12: Type identifier expected 未定义的类型标识符error 13: Too many open files 打开文件太多error 14: Invalid file name 无效的文件名error 15: File not found 文件未找到error 16: Disk full 磁盘满error 17: Invalid compiler directive 无效的编译命令error 18: Too many fi

23、les 文件太多error 19: Undefined type in pointer def 指针定义中未定义类型error 20: Variable identifier expected 缺变量标识符error 21: Error in type 类型错误error 22: Structure too large 结构类型太长error 23: Set base type out of range 集合基类型越界error 24: File components may not be files or objectsfile 分量不能是文件或对象error 25: Invalid str

24、ing length 无效的字符串长度error 26: Type mismatch 类型不匹配error 27:error 27:Invalid subrange base type 无效的子界基类型error 28:Lower bound greater than upper bound 下界超过上界error 29:Ordinal type expected 缺有序类型error 30:Integer constant expected 缺整型常量error 31:Constant expected 缺常量error 32:Integer or real constant expecte

25、d 缺整型或实型常量error 33:Pointer Type identifier expected 缺指针类型标识符error 34:Invalid function result type 无效的函数结果类型error 35:Label identifier expected 缺标号标识符error 36:BEGIN expected 缺 BEGIN error 37:END expected 缺 END error 38:Integer expression expected 缺整型表达式error 39:Ordinal expression expected 缺有序类型表达式erro

26、r 40:Boolean expression expected 缺布尔表达式error 41:Operand types do not match 操作数类型不匹配error 42:Error in expression 表达式错误error 43:Illegal assignment 非法赋值error 44:Field identifier expected 缺域标识符error 45:Object file too large 目标文件太大error 46:Undefined external 未定义的外部过程与函数error 47:Invalid object file record

27、 无效的 OBJ 文件格式error 48:Code segment too large 代码段太长error 49:Data segment too large 数据段太长error 50:DO expected 缺 DO error 51:Invalid PUBLIC definition 无效的 PUBLIC 定义error 52:Invalid EXTRN definition 无效的 EXTRN 定义error 53: Too many EXTRN definitions 太多的 EXTRN 定义error 54:OF expected 缺 OF error 55:INTERFACE

28、 expected 缺 INTERFACE error 56:Invalid relocatable reference 无效的可重定位引用error 57:THEN expected 缺 THEN error 58:TO or DOWNTO expected 缺 TO 或 DOWNTO error 59:Undefined forward 提前引用未经定义的说明error 61:Invalid typecast 无效的类型转换error 62:Division by zero 被零除error 63:Invalid file type 无效的文件类型error 64:Cannot read

29、or write variables of this type 不能读写此类型变量error 65:Pointer variable expected 缺指针类型变量error 66:String variable expected 缺字符串变量error 67:String expression expected 缺字符串表达式error 68:Circular unit reference 单元 UNIT 部件循环引用error 69:Unit name mismatch 单元名不匹配error 70:Unit version mismatch 单元版本不匹配error 71:Intern

30、al stack overflow 内部堆栈溢出error 72:Unit file format error 单元文件格式错误error 73:IMPLEMENTATION expected 缺 IMPLEMENTATION error 74:Constant and case types do not match 常量和 CASE 类型不匹配error 75:Record or object variable expected 缺记录或对象变量error 76:Constant out of range 常量越界error 77:File variable expected 缺文件变量er

31、ror 78:Pointer expression expected 缺指针表达式error 79:Integer or real expression expected 缺整型或实型表达式error 80:Label not within current block 标号不在当前块内error 81:Label already defined 标号已定义error 82:Undefined label in preceding statement part 在前面未定义标号error 83:Invalid argument 无效的 参数error 84:UNIT expected 缺 UNI

32、T error 85: “;“ expected 缺“;” error 86: “:“ expected 缺“ :” error 87: “,“ expected 缺“ , ” error 88: “(“ expected 缺“(” error 89: “)“ expected 缺“) ” error 90: “=“ expected 缺“=” error 91: “:=“ expected 缺“:=” error 92: “ or “(.“ Expected 缺“”或“(.” error 93: “ or “.)“ expected 缺“ ”或“.) ” error 94: “.“ expe

33、cted 缺“.” error 95: “ expected 缺“” error 96:Too many variables 变量太多error 97:Invalid FOR control variable 无效的 FOR 循环控制变量error 98:Integer variable expected 缺整型变量error 99:Files and procedure types are not allowed here 该处不允许文件和过程类型error 100:String length mismatch 字符串长度不匹配25 error C2085: Delete : not in

34、formal parameter list不在形参列表中,意思是在函数定义后丢掉了;25QXJTEST.C(371): error C100: unprintable character 0xA1 skipped在语句后面出现了不该出现的字符。二、C 语言浮点数的存储方式C 语言和 C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float 数据占用 32bit,double 数据占用 64bit,我们在声明一个变量 float f= 2.25f 的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是 float 还是 doub

35、le 在存储方式上都是遵从IEEE 的规范的,float 遵从的是 IEEE R32.24 ,而 double 遵从的是 R64.53。 无论是单精度还是双精度在存储中都分为三个部分:1. 符号位(Sign) : 0 代表正,1 代表为负 2. 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储 3. 尾数部分(Mantissa):尾数部分 其中 float 的存储方式如下图所示:而双精度的存储方式为:R32.24 和 R64.53 的存储方式都是用科学计数法来存储数据的,比如 8.25用十进制的科学计数法表示就为:8.25* ,而 120.5 可以表示为:1.205

36、* ,这些小学的知识就不用多说了吧。而我们傻蛋计算机根本不认识十进制的数据,他只认识 0,1,所以在计算机存储中,首先要将上面的数更改为二进制的科学计数法表示,8.25 用二进制表示可表示为 1000.01,我靠,不会连这都不会转换吧?那我估计要没辙了。120.5 用二进制表示为:1110110.1 用二进制的科学计数法表示 1000.01 可以表示为 1.0001* ,1110110.1 可以表示为 1.1101101* ,任何一个数都的科学计数法表示都为 1.xxx* ,尾数部分就可以表示为 xxxx,第一位都是 1 嘛,干嘛还要表示呀?可以将小数点前面的 1 省略,所以 23bit 的尾

37、数部分,可以表示的精度却变成了 24bit,道理就是在这里,那 24bit 能精确到小数点后几位呢,我们知道 9 的二进制表示为 1001,所以 4bit 能精确十进制中的 1 位小数点,24bit 就能使 float 能精确到小数点后 6 位,而对于指数部分,因为指数可正可负,8 位的指数位能表示的指数范围就应该为:-127-128 了,所以指数部分的存储采用移位存储,存储的数据为元数据+127,下面就看看 8.25 和 120.5 在内存中真正的存储方式。首先看下 8.25,用二进制的科学计数法表示为:1.0001*按照上面的存储方式,符号位为:0,表示为正,指数位为:3+127=130

38、,位数部分为,故 8.25 的存储方式如下图所示:而单精度浮点数 120.5 的存储方式如下图所示:那么如果给出内存中一段数据,并且告诉你是单精度存储的话,你如何知道该数据的十进制数值呢?其实就是对上面的反推过程,比如给出如下内存数据:0100001011101101000000000000,首先我们现将该数据分段,0 10000 0101 110 1101 0000 0000 0000 0000,在内存中的存储就为下图所示:根据我们的计算方式,可以计算出,这样一组数据表示为:1.1101101* =120.5而双精度浮点数的存储和单精度的存储大同小异,不同的是指数部分和尾数部分的位数。所以这

39、里不再详细的介绍双精度的存储方式了,只将 120.5 的最后存储方式图给出,大家可以仔细想想为何是这样子的下面我就这个基础知识点来解决一个我们的一个疑惑,请看下面一段程序,注意观察输出结果float f = 2.2f;double d = (double)f;Console.WriteLine(d.ToString(“0.0000000000000“);f = 2.25f;d = (double)f;Console.WriteLine(d.ToString(“0.0000000000000“);可能输出的结果让大家疑惑不解,单精度的 2.2 转换为双精度后,精确到小数点后 13 位后变为了 2

40、.2000000476837,而单精度的 2.25 转换为双精度后,变为了 2.2500000000000,为何 2.2 在转换后的数值更改了而 2.25 却没有更改呢?很奇怪吧?其实通过上面关于两种存储结果的介绍,我们已经大概能找到答案。首先我们看看 2.25 的单精度存储方式,很简单 0 1000 0001 001 0000 0000 0000 0000 0000,而 2.25 的双精度表示为:0 100 0000 0001 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000,这样 2.25 在进行强制转换的时候

41、,数值是不会变的,而我们再看看 2.2 呢,2.2 用科学计数法表示应该为:将十进制的小数转换为二进制的小数的方法为将小数*2,取整数部分,所以 0.282=0.4,所以二进制小数第一位为 0.4 的整数部分 0,0.42=0.8,第二位为 0,0.8*2=1.6,第三位为 1,0.62 = 1.2,第四位为 1,0.2*2=0.4,第五位为 0,这样永远也不可能乘到=1.0,得到的二进制是一个无限循环的排列 00110011001100110011. ,对于单精度数据来说,尾数只能表示 24bit 的精度,所以 2.2 的 float 存储为:但是这样存储方式,换算成十进制的值,却不会是 2

42、.2 的,应为十进制在转换为二进制的时候可能会不准确,如 2.2,而 double 类型的数据也存在同样的问题,所以在浮点数表示中会产生些许的误差,在单精度转换为双精度的时候,也会存在误差的问题,对于能够用二进制表示的十进制数据,如 2.25,这个误差就会不存在,所以会出现上面比较奇怪的输出结果三、xdata idata pdata dataDATA: 固定指前面 0x00-0x7f 的 128 个 RAM,可以用 acc 直接读写的,速度最快,生成的代码也最小。IDATA:固定指前面 0x00-0xff 的 256 个 RAM,其中前 128 和 dATa 的 128 完全相同,只是因为访问

43、的方式不同。IDATA 是用类似 C 中的指针方式访问的。汇编中的语句为:mox ACC,Rx.(不重要的补充:c 中IDATA 做指针式的访问效果很好)XDATA: 外部扩展 RAM,一般指外部 0x0000-0xffff 空间,用 DPTR 访问。PDATA: 外部扩展 RAM 的低 256 个字节,地址出现在 A0-A7 的上时读写,用 movx ACC,Rx 读写。这个比较特殊,而且 C51 好象有对此 BUG, 建议少用。但也有他的优点,具体用法属于中级问题,这里不提。STARTUP.A51 的作用,和汇编一样,在 C 中定义的那些变量和数组的初始化就在 STARTUP.A51 中进

44、行,如果你在定义全局变量时带有数值,如 unsigned char dATa xxx=“100“;,那 STARTUP.A51中就会有相关的赋值。如果没有=100, STARTUP.A51 就会把他清 0。 (STARTUP.A51=变量的初始化) 。 这些初始化完毕后,还会设置 SP 指针。对非变量区域, 如堆栈区,将不会有赋值或清零动作。有人喜欢改 STARTUP.A51 为了满足自己一些想当然的爱好,这是不必要的,有可能错误的。比如掉电保护的时候想保存一些变量, 但改 STARTUP.A51 来实现是很笨的方法,实际只要利用非变量区域的特性,定义一个指针变量指向堆栈低部:0xff 处就可

45、实现。, 为什么还要去改? 可以这么说:任何时候都可以不需要改 STARTUP.A51,如果你明白它的特性。bit 是在内部数据存储空间中 20H 2FH 区域中一个位的地址,这在 DATA 的 20H 以后以字节形式出现,可互相参照。另外加上 8051 可寻址 的 SFR,但刚刚试过,只是 00H-7FH 起作用,也就是说当数据有变化时颜色变红,以后的从 80H 到-FFH 就不是位寻址区了,是位寻址的特殊寄存 器,如涉及到了可位寻址的那 11 个当然会有反应。复位后,程序计数器 PC 的内容为0000H,内部 RAM 各单元的值不确定。各功能寄存器的复位值如下:堆栈指针 SP 的复位值为07H,累加器 ACC、寄存器 B 的复位值为 00H,数据指针 DPTR 的复位值为 0000H,而p0、p1、p2、p3 四个口的复位值为 0FFH。其他 SFR 如 PSW、TCON、TMOD、TL0、TH0、TL1、TH1的复位值也为 00H。wave 中是低 128 字节和高 128 字节(0-7FH) ,低 128 字节是片内

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报