单片机作业4-参考答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机作业4

将下面的C51语句放入Keil软件,进行编译

#include

unsigned char data Temp;

void main(void)

{

Temp = 0x23; //等号右边写自己座号的BCD码,如23号,写0x23

while(1)

{

;

}

}

以下参考答案,编译器使用的是Keil uVision4

提示:查看C51编译生成汇编代码的方法有两种:①在调试时,查看反汇编窗口;②在工程属性的“列表(Listing)”选项卡中将复选框“包含汇编代码(Assembly Code)”勾中,重新编译后再打开跟C51文件同名的lst文件(*.lst)。

(1)查看编译结果,写出加注释的那条赋值语句所对应的汇编代码。

MOV Temp(0x08), #0x23

(2)将Temp变量定义中的char先后改为short int、long int,再回答第1问;并说明编译结果(Build Output)窗口中单片机资源使用情况处的data使用情况有何变化。

(a)char改为short int:

MOV Temp,#00H

MOV Temp+01H,#023H

data从10.0变为11.0

(b)char改为short int:

CLR A

MOV Temp+03H,#023H

MOV Temp+02H,A

MOV Temp+01H,A

MOV Temp,A

data从10.0变为13.0

(3)将Temp变量定义中的data先后改为idata、pdata和xdata,再回答第1问。

(a)data改为idata:

MOV R0,#LOW Temp

MOV @R0,#023H

(b)data改为pdata:

MOV R0,#LOW Temp

MOV A,#023H

MOVX @R0,A

(c)data改为xdata:

MOV DPTR,#Temp

MOV A,#023H

MOVX @DPTR,A

(4)将Temp变量定义中的data改为code,编译能否通过,为什么?

通不过,data改为code,表明变量Temp保存在ROM,但ROM是只读,不能写的,所以赋值语句Temp = 0x23;出错。

(5)采用3种方法(①对存储器使用绝对地址访问、②对存储器使用指针访问、③定义变量时使用关键字_at_),将自己座号所对应的BCD码写入片内RAM的15H单元。

(a)方法一:

#include

#include

unsigned char data Temp;

void main(void)

{

DBYTE[0x15]=0x23;

Temp = 0x23; //等号右边写自己座号的BCD码,如23号,写0x23

while(1)

{

;

}

}

(b)方法二:

#include

unsigned char data Temp;

void main(void)

{

unsigned char data *dp;

dp = 0x15;

*dp = 0x23;

Temp = 0x23; //等号右边写自己座号的BCD码,如23号,写0x23

while(1)

{

;

}

}

(c)方法三:

#include

unsigned char data Temp _at_ 0x15;

void main(void)

{

Temp = 0x23; //等号右边写自己座号的BCD码,如23号,写0x23

while(1)

{

;

}

}

2

相关文档
最新文档