单片机编程软件很简单(18),Keil单片机编程软件对ANSIC的扩展学习


原标题:单片机21ic编程软件很简单(18),Keil单片机编程软件对ANSIC的扩展学习
在单片机编程中,Keil单片机编程软件(特别是Keil C51)对标准ANSI C进行了一系列扩展,以适应8051系列单片机的硬件特性。以下是对Keil C51对ANSI C扩展的详细学习:
一、Keil C51扩展关键字
Keil C51在ANSI C的基础上增加了一些特定的关键字,以支持8051单片机的特殊功能。例如,C51 V4.0版本有以下扩展关键字:
_at_
:用于指定变量的绝对地址。idata
、bdata
、xdata
、pdata
:用于声明变量的存储类型,分别对应不同的内存区域。sfr
、sfr16
:用于声明特殊功能寄存器(SFR),分别用于字节寻址和字寻址。sbit
:用于声明可位寻址的特殊功能寄存器的位。interrupt
:用于声明中断服务函数。using
:用于指定中断服务函数使用的寄存器组。reentrant
:用于声明可重入函数。
二、内存区域与存储类型
Keil C51支持多种内存区域,每种内存区域都有特定的用途和访问方式。通过不同的存储类型关键字,可以指定变量存储在不同的内存区域中。
程序存储器(Code Area):用于存放程序代码,最大可达64KB。
内部数据存储器(Internal Data Memory):
data
:直接寻址区,为内部RAM的低128字节(00H~7FH)。idata
:间接寻址区,包括整个内部RAM区(00H~FFH)。bdata
:可位寻址区,位于20H~2FH。外部数据存储器(External Data Memory):
xdata
:可指定多达64KB的外部直接寻址区,地址范围0000H~0FFFFH。pdata
:能访问1页(256Bytes)的外部RAM,主要用于紧凑模式(Compact Model)。特殊功能寄存器(SFR Memory):提供128Bytes的SFR寻址区,可位寻址、字节寻址或字寻址。
三、变量类型与数据类型
Keil C51提供了一些扩展的数据类型,以更好地支持8051单片机的硬件操作。
bit型变量:用于表示位变量,值为0或1,通常存储在内部RAM的20H~2FH区域。
sbit型变量:从字节中定义的位变量,用于访问特殊功能寄存器的位。
sfr和sfr16型变量:用于声明特殊功能寄存器,分别用于字节寻址和字寻址。
此外,Keil C51还支持ANSI C中的所有标准数据类型,如char
、enum
、short
、int
、long
、float
等。
四、指针
Keil C51支持一般指针(Generic Pointer)和存储器指针(Memory-Specific Pointer)。
一般指针:声明和使用方式与标准C相同,但可以指定指针的存储类型。例如,
long *state;
为一个指向long
型整数的指针,而state
本身则依存储模式存放。存储器指针:在声明时即指定了存储类型,如
char data *str;
表示str
指向data
区中的char
型数据。这种指针存放时只需一个字节或两个字节(根据存储类型而定),因为只需存放偏移量。
五、函数属性
Keil C51对ANSI C的函数声明进行了扩展,以支持中断服务函数等特殊功能。
中断函数声明:使用
interrupt
关键字声明中断服务函数,并指定中断号。例如,void serial_ISR() interrupt 4;
表示声明一个中断号为4的中断服务函数。指定存储模式:使用
small
、compact
、large
等关键字指定函数的存储模式,以控制函数内部变量的存储区域。选通用存储工作区:使用
using
关键字指定中断服务函数使用的寄存器组。
六、其他扩展
除了上述扩展外,Keil C51还支持一些其他特性,如绝对地址访问、内联汇编等。这些特性为开发者提供了更多的灵活性和控制权,以便更好地适应不同的硬件需求和应用场景。
学习建议
阅读官方文档:Keil官方提供了详细的文档和手册,是学习Keil C51扩展特性的最佳途径。
实践操作:通过编写实际的单片机程序,应用所学的扩展特性,加深对Keil C51的理解。
参考示例代码:Keil软件通常包含大量的示例代码,这些代码展示了如何使用各种扩展特性。通过阅读和分析示例代码,可以更快地掌握Keil C51的使用方法。
通过深入学习和实践,您可以充分利用Keil C51对ANSI C的扩展特性,开发出更高效、更可靠的单片机程序。
责任编辑:David
【免责声明】
1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。
2、本文的引用仅供读者交流学习使用,不涉及商业目的。
3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。
4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。
拍明芯城拥有对此声明的最终解释权。