题目
编写 C51 程序,将单片机片外 2000H 为首地址的连续 10 个单元的内容,读入到片内 RAM 的 40H~49H 单元中。
编写 C51 程序,将单片机片外 2000H 为首地址的连续 10 个单元的内容,读入到片内 RAM 的 40H~49H 单元中。
题目解答
答案
答:将片外 2000H 为首地址的连续 10 个单元的内容,读入到片内 RAM 的 40H~49H 单元中。程序如下:
xdata unsigned char buffer1[10] _at_ 0x2000; data unsigned char buffer2[10] _at_ 0x40 void main(void)
{
unsigned char i; for(i=0; i<10; i++)
{
buffer2[i]= buffer1[i]
}
}
解析
考查要点:本题主要考查C51语言中对片外数据存储器(xdata)和片内RAM(data)的访问方式,以及数组的存储分配与数据复制操作。
解题核心思路:
- 存储类型选择:片外数据存储器使用
xdata类型,片内RAM使用data类型。 - 存储分配:通过
_at_关键字指定数组的首地址,确保数据存储在指定位置。 - 循环复制:通过循环将片外数据逐个读取到片内RAM中。
破题关键点:
- 明确存储空间类型:片外地址2000H~2009H属于外部数据存储器,需用
xdata声明;片内地址40H~49H属于直接寻址区,用data声明。 - 数组长度与地址对应:数组长度为10,需确保索引0~9覆盖所有目标单元。
步骤1:定义存储空间
- 片外数据数组:
xdata unsigned char buffer1[10] _at_ 0x2000;
作用:声明一个长度为10的外部数组,首地址为2000H。 - 片内数据数组:
data unsigned char buffer2[10] _at_ 0x40;
作用:声明一个长度为10的内部数组,首地址为40H。
步骤2:主函数实现数据复制
- 循环变量定义:
unsigned char i;
作用:循环计数器,范围0~9。 - 循环体:
for(i=0; i<10; i++) { buffer2[i] = buffer1[i]; }
作用:依次将buffer1的每个元素赋值给buffer2的对应位置。