- 打卡等级:以坛为家I
- 打卡总天数:317
- 最近打卡:2025-05-02 07:15:49
高级会员
- 积分
- 825
|
发表于 2023-8-15 12:18:02
|
显示全部楼层
本帖最后由 chen6502 于 2023-8-15 12:20 编辑
8月14日 陈教授直播课 STC单片机基础和实践 观后感:
-------记录自己学习的经历
1.C51扩展的关键字:
C51有以下19个扩展关键字: _at_、sbit、sfr、bit、sfr16、idata、bdata、xdata、pdata、data、code、alien、small、compact、large、using、reentrant、interrupt、_task_ 。
(1)变量或数据类型 (图3132)
选择数据类型 要根据数据长短。
带*部分为C51所特别支持的变量类型(扩展的数据类型),它们不属于ANSI C,不能用指针对它们存取。包括:
bit: 位变量,值为0或1.
sbit: 从字节中定义的位变量(0或1).
sfr: sfr字节地址(0x80~0xff).
sfr16: sfr字节地址(0x80~0xff,其实是占用两个连续的地址)。
其余的数据类型 如 char、ennm、short、int、long、float等与ANSI C相同。
①bit型变量
bit型变量可用于变量类型和函数声明、函数返回值等,存储于内部RAM的20H~2FH的地址中。
需要注意:
1)位不能声明为一个指针。如: bit *bit_poiter; 是错误的。
2)不能有 bit数组,如:bit arr[5]; 是错误的。
②可位寻址区说明
使用sbit声明可独立访问可位寻址对象的位。sbit声明要求基址对象的存储器类型为“bdata”,否则只有绝对的位声明是合法的。位的位置('^’ 操作符号后的数字)的最大值依赖于指定的基类型,对于char/unsigned char而言是0~7,对于int/unsigned int/short/unsigned short而言是0~15,对于long/unsigned long而言是0~31。
可位寻址对象的位的声明只能放到main函数的外部作为全局变量使用,否则编译出错。
(2)内存区域的指定
①程序存储器
code关键字表示将变量保存到程序存储区。可以使用code定义表格常数,这样可以节省内部RAM的使用。例如,可以使用下面的代码保存共阴极数码LED的显示字模:
unsigned char code
led_buf[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
②内部RAM
内部数据存储器用以下关键字说明:
data: 直接寻址区,内部RAM的低128字节,地址范围为00H~0FFH。在用户程序中声明变量时,默认都保存在该区域。
idata:间接寻址区域,包括整个内部RAM区256字节,地址范围为00H~0FFH。
bdata:可位寻址区,地址范围为20H~2FH。
③外部数据存储器
外部RAM视使用情况可由以下关键字标识:
xdata:可指定多达64KB的外部直接寻址区,地址范围0000H~0FFFFH。在用户程序中,需要声明较大的数组时,可以使用xdata关键字将变量数组保存到扩展RAM中。例如:
unsigned char xdata arr[300][2];
pdata:能访问1页(256B)的外部RAM(很少用)。
---未完
|
|