原创翻译,转载注明
作者:小楼听雨
来源:www.xl7y.tk/
Keil C 编程教程:引言
►引言
用c语言为微控制器编程正在变的越来越普通,通常用汇编建立一个应用比用c语言要难的多,因此掌握嵌入式c编程是非常重要的。由于我们使用Keil C51编译器,也常常称之为Keil C。
►关键字
Keil C 编译器添加的一些关键字:
_at_ far sbit
alien idata sfr
bdata interrupt sfr16
bit large small
code pdata _task_
compact _priority_ using
data reentrant xdata
data/idata:
描述: 变量将被存储在控制器内部ram中。
example:
CODE:
unsigned char data x;
//or
unsigned char idata y;
bdata:
描述:变量被存储在可位寻址的内部ram中。
CODE:
unsigned char bdata x;
//变量x的每一位可按以下的方式存取
x ^1=1;//设置x的第一位
x ^0=0;//清除x的第零位
xdata:
描述: 变量将被存储在控制器外部ram中。
example:
CODE:
unsigned char xdata x;
code:
描述:这个关键字是用来将常量存储在rom中。假设你有一个大的字符串,而且这个字符串在程序中不会再被改变,为这个字符串浪费ram是很愚蠢的事,因此我们要像下面的例子一样运用code关键字。
example:c51中字符串函数
CODE:
unsigned char code str="this is a constant string";
pdata:
描述:这个关键字将会使变量存储在分页寻址ram中,它运用不是很频繁。
example:
CODE:
unsigned char pdata x;
_at_:
描述:用来将变量存储在ram的指定位置。
example:
CODE:
unsigned char idata x _at_0x30;
//变量x将会存储在内部ram的0x30处
sbit:
描述:这个关键字用来定义SFR(特殊功能寄存器)的某一位。
example:
CODE:
sbit Port0_0 =0x80;
/
/地址0x80被定义为特殊位Port0_0
sfr:
描述:sfr被用来定义一个8位的特殊功能寄存器。
example:
CODE:
sfr Port1 =0x90;
//地址0x90被定义为特殊功能寄存器Port1
sfr16:
描述:用来定义两个连续的8位特殊功能寄存器。
example:
CODE:
sfr16 DPTR =0x82;
//开始于0x82的16位特殊功能寄存器
using:
描述:这个关键字位某个函数定义寄存器组,用户可以指定0-3的寄存器组。
example:
CODE:
void function()using2{
// code
}
//名为function的函数在执行代码的时候使用寄存器组2
interrupt:
描述:这个关键字将会告诉编译器被描述的函数是一个终端服务程序。C51编译器支持最多32个中断源(0-31),使用下面的中断向量地址来决定中断号。
example:
CODE:
void External_Int0()interrupt0{
//code
}
►存储器模式
用户有三种类型的存储器模式变量:
1.Small:所有变量都在内部ram中。
2.Compact:参数及局部变量放入分页外内部存贮区(最大256 bytes)。
3.large:所有变量都在外部ram中,使用DPTR存取。
根据我们硬件的配置我们能够向下面这样指定存储器模式:
CODE:
//For Small Memory model
#pragma small
//For Compact memory model
#pragma compact
//For large memory model
#pragma large
原文:keil C Programming Tutorial: Introduction
www.8051projects/keil-c-programming-tutorial/introduction.php
原创翻译,转载注明
作者:小楼听雨
来源:www.xl7y.tk/
Keil C 编程教程:指针
► Keil C中的指针
Keil C中的指针类似于标准C,可以完成标准C中指针的所有运算。另外,Keil C 扩展了它的运算去满足8051微控制器架构,Keil C 提供两种不同类型的指针:
1.一般指针
2.存储器指针
►一般指针
一般指针同标准C中的指针声明是一样的
CODE:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。