📄 第三章 keil c51 vs 标准c.htm
字号:
lang=EN-US>(8031为缺省CPU)。</SPAN></P>
<H2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103155><SPAN lang=EN-US
style="FONT-SIZE: 16pt">第一节 </SPAN><SPAN lang=EN-US>Keil
C51扩展关键字</SPAN></A></H2>
<P class=MsoBodyTextFirstIndent><SPAN lang=EN-US>C51
V4.0版本有以下扩展关键字(共19个):</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>_at_ <SPAN
style="mso-tab-count: 1">
</SPAN>idata<SPAN
style="mso-tab-count: 1">
</SPAN>sfr16<SPAN
style="mso-tab-count: 1">
</SPAN>alien<SPAN style="mso-tab-count: 1">
</SPAN>interrupt<SPAN
style="mso-tab-count: 1">
</SPAN>small</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>bdata<SPAN
style="mso-tab-count: 1">
</SPAN>large<SPAN
style="mso-tab-count: 1">
</SPAN>_task_<SPAN
style="mso-tab-count: 1">
</SPAN>Code<SPAN
style="mso-tab-count: 1">
</SPAN>bit<SPAN
style="mso-tab-count: 1">
</SPAN>pdata</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>using<SPAN
style="mso-tab-count: 1">
</SPAN>reentrant xdata<SPAN
style="mso-tab-count: 1">
</SPAN>compact<SPAN style="mso-tab-count: 1">
</SPAN>sbit<SPAN
style="mso-tab-count: 1">
</SPAN>data<SPAN style="mso-tab-count: 1">
</SPAN>sfr</SPAN></P>
<H2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103156><SPAN lang=EN-US
style="FONT-SIZE: 16pt">第二节 </SPAN>内存区域<SPAN
lang=EN-US>(Memory Areas):</SPAN></A></H2>
<H3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103157><SPAN lang=EN-US style="FONT-SIZE: 15pt">1.
</SPAN><SPAN lang=EN-US>Pragram Area:</SPAN></A><SPAN
style="mso-bookmark: _Toc475103157"></SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></H3>
<P class=MsoBodyTextFirstIndent>由<SPAN
lang=EN-US>Code说明可有多达64kBytes的程序存储器</SPAN></P>
<H3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103158><SPAN lang=EN-US style="FONT-SIZE: 15pt">2.
</SPAN><SPAN lang=EN-US>Internal Data Memory:</SPAN></A><SPAN
style="mso-bookmark: _Toc475103158"></SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></H3>
<P class=MsoBodyTextFirstIndent>内部数据存储器可用以下关键字说明:</P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>data:直接寻址区,为内部RAM的低128字节<SPAN
style="mso-spacerun: yes">
</SPAN>00H~7FH</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>idata:间接寻址区,包括整个内部RAM区<SPAN
style="mso-spacerun: yes">
</SPAN>00H~FFH</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>bdata:可位寻址区,<SPAN
style="mso-tab-count: 2">
</SPAN><SPAN
style="mso-spacerun: yes">
</SPAN>20H~2FH</SPAN></P>
<H3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103159><SPAN lang=EN-US style="FONT-SIZE: 15pt">3.
</SPAN><SPAN lang=EN-US>External Data Memory</SPAN></A><SPAN
style="mso-bookmark: _Toc475103159"></SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></H3>
<P class=MsoBodyTextFirstIndent>外部<SPAN
lang=EN-US>RAM视使用情况可由以下关键字标识:</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>xdata:可指定多达64KB的外部直接寻址区,地址范围0000H~0FFFFH</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>pdata:能访问1页(25bBytes)的外部RAM,主要用于紧凑模式(Compact
Model)。</SPAN></P>
<H3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103160><SPAN lang=EN-US style="FONT-SIZE: 15pt">4.
</SPAN><SPAN lang=EN-US>Speciac Function Register
Memory</SPAN></A><SPAN
style="mso-bookmark: _Toc475103160"></SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></H3>
<P class=MsoBodyTextFirstIndent><SPAN
lang=EN-US>8051提供128Bytes的SFR寻址区,这区域可位寻址、字节寻址或字寻址,用以控制定时器、计数器、串口、I/O及其它部件,可由以下几种关键字说明:</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>sfr:字节寻址<SPAN style="mso-spacerun: yes">
</SPAN>比如 sfr P0=0x80;为PO口地址为80H,“=”后H~FFH之间的常数。</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>sfr16:字寻址,如sfr16<SPAN
style="mso-spacerun: yes">
</SPAN>T2=0xcc;指定Timer2口地址T2L=0xcc T2H=0xCD</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>sbit:位寻址,如sbit EA=0xAF;指定第0xAF位为EA,即中断允许</SPAN></P>
<P class=MsoBodyTextIndent
style="MARGIN-LEFT: 36.75pt">还可以有如下定义方法:</P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>sbit<SPAN style="mso-spacerun: yes">
</SPAN>0V=PSW^2;(定义0V为PSW的第2位)</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>sbit<SPAN style="mso-spacerun: yes">
</SPAN>0V=0XDO^2;(同上)</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt">或<SPAN
lang=EN-US>bit<SPAN style="mso-spacerun: yes">
</SPAN>0V-=0xD2(同上)。</SPAN></P>
<H2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103161><SPAN lang=EN-US
style="FONT-SIZE: 16pt">第三节 </SPAN>存储模式</A></H2>
<P
class=MsoBodyTextFirstIndent>存储模式决定了没有明确指定存储类型的变量,函数参数等的缺省存储区域,共三种:</P>
<H3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103162><SPAN lang=EN-US style="FONT-SIZE: 15pt">1.
</SPAN><SPAN lang=EN-US>Small模式</SPAN></A><SPAN
style="mso-bookmark: _Toc475103162"></SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></H3>
<P class=MsoBodyTextFirstIndent>所有缺省变量参数均装入内部<SPAN
lang=EN-US>RAM,优点是访问速度快,缺点是空间有限,只适用于小程序。</SPAN></P>
<H3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103163><SPAN lang=EN-US style="FONT-SIZE: 15pt">2.
</SPAN><SPAN lang=EN-US>Compact模式</SPAN></A><SPAN
style="mso-bookmark: _Toc475103163"></SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></H3>
<P class=MsoBodyTextFirstIndent>所有缺省变量均位于外部<SPAN
lang=EN-US>RAM区的一页(256Bytes),具体哪一页可由P2口指定,在STARTUP.A51文件中说明,也可用pdata指定,优点是空间较Small为宽裕速度较Small慢,较large要快,是一种中间状态。</SPAN></P>
<H3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103164><SPAN lang=EN-US style="FONT-SIZE: 15pt">3.
</SPAN><SPAN lang=EN-US>large模式</SPAN></A><SPAN
style="mso-bookmark: _Toc475103164"></SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></H3>
<P class=MsoBodyTextFirstIndent>所有缺省变量可放在多达<SPAN
lang=EN-US>64KB的外部RAM区,优点是空间大,可存变量多,缺点是速度较慢。</SPAN></P>
<P class=MsoBodyTextFirstIndent>提示:存储模式在<SPAN
lang=EN-US>C51编译器选项中选择。</SPAN></P>
<H2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103165><SPAN lang=EN-US
style="FONT-SIZE: 16pt">第四节 </SPAN>存储类型声明</A></H2>
<P
class=MsoBodyTextFirstIndent>变量或参数的存储类型可由存储模式指定缺省类型,也可由关键字直接声明指定。各类型分别用:<SPAN
lang=EN-US>code,data,idata,xdata,pdata说明,例:</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>data uar1</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>char code array[ ]=“hello!”;</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>unsigned char xdata arr[10][4][4];</SPAN></P>
<H2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103166><SPAN lang=EN-US
style="FONT-SIZE: 16pt">第五节 </SPAN>变量或数据类型</A></H2>
<P class=MsoBodyTextFirstIndent><SPAN
lang=EN-US>C51提供以下几种扩展数据类型:</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>bit 位变量值为0或1</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>sbit 从字节中定义的位变量<SPAN
style="mso-spacerun: yes"> </SPAN>0或1</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>sfr<SPAN style="mso-spacerun: yes">
</SPAN>sfr字节地址<SPAN style="mso-spacerun: yes">
</SPAN>0~255</SPAN></P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
lang=EN-US>sfr16<SPAN style="mso-spacerun: yes">
</SPAN>sfr字地址<SPAN style="mso-spacerun: yes">
</SPAN>0~65535</SPAN></P>
<P class=MsoBodyTextFirstIndent>其余数据类型如:<SPAN
lang=EN-US>char,enum,short,int,long,float等与ANSI
C相同。</SPAN></P>
<H2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103167><SPAN lang=EN-US
style="FONT-SIZE: 16pt">第六节 </SPAN>位变量与声明</A></H2>
<H3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A
name=_Toc475103168><SPAN lang=EN-US style="FONT-SIZE: 15pt">1.
</SPAN><SPAN lang=EN-US>bit型变量</SPAN></A><SPAN
style="mso-bookmark: _Toc475103168"></SPAN><SPAN lang=EN-US
style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></H3>
<P class=MsoBodyTextFirstIndent><SPAN
lang=EN-US>bit型变量可用变量类型,函数声明、函数返回值等,存贮于内部RAM20H~2FH。</SPAN></P>
<P class=MsoBodyTextFirstIndent>注意:</P>
<P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -