单片机作业4-参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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