- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.何为寻址方式?80C51 单片机有哪些寻址方式? 答: 80C51 单片机共有 7 种寻址方式:
寄存器寻址
寄存器间接寻址
直接寻址
立即寻址
基址寄存器+变址寄存器的间接寻址
相对寻址
位寻址
4.什么是源操作数?什么是目的操作数?通常在指令中如何加以区分?
答:
在双操作数的指令中,指令执行后的结果放在其中的一个操作数中,这个操作数是目的操作数,另外一个是源操作数。80C51 指令系统中,不靠近指令操作码的是源操作数,源操作数可以是立即数。80C51 指令系统中,紧跟在指令操作码之后是目的操作数,算术运算和大多数逻辑运算其目的操作数必须是累加器 A,目的操作数不允许使用立即数寻址方式。
5.查表指令是在什么空间上的寻址操作?
答: 由于对程序存储器只能读而不能写,因此其数据传送是单向的,即从程序存储器读取数据,且只能向累加器 A 传送。这类指令共有两条,其功能是对存放于程序存储器中的数据表格进行查找传送,所以又称查表指令。
MOVC A,@A+DPTR
MOVC A,@A+PC
这两条指令都为变址寻址方式。前一条指令以 DPTR 作为基址寄存器进行查表,使用前可先给 DPTR 赋予任何地址,因此查表范围可达整个程序存储器的 64KB 空间。后一条指令以 PC 作为基址寄存器,虽然也提供 16 位基址,但其值是固定的。由于 A 的内容为 8 位无符号数,所以这种查表指令只能查找所在地址以后 256B 范围内的常数或代码。
6.对 80C51 片内 RAM 的 128~255 字节区的地址空间寻址时,应注意些什么?对特殊功能寄存器,应采用何种寻址方式进行访问?
答: 此空间有 2 类不同的物理存储空间,一个是特殊功能寄存器区,一个是 RAM 区。 直接寻址访问特殊功能寄存器,间接寻址访问 RAM 区。
7.写出完成下列要求的 C 语言程序。
(1)将地址为 4000H 的片外数据存储单元内容,送入地址为 30H 的片内数据存储单元中。 答: 可使用绝对地址访问函数实现 DBYTE[0x30] = XBYTE[0x4000];
(2)将地址为 4000H 的片外数据存储单元内容,送入地址为 3000H 的片外数据存储单元中。
答: 可使用绝对地址访问函数实现 XBYTE [0x3000] = XBYTE[0x4000];
(3)将地址为 0800H 的程序存储单元内容,送入地址为 30H 的片内数据存储单元中。
答: 可使用绝对地址访问函数实现 DBYTE [0x30] = CBYTE[0x0800];
4)将片内数据存储器中地址为 30H 与 40H 的单元内容交换。
答:
unsigned char temp;
temp= DBYTE [0x40];
DBYTE [0x40]= DBYTE [0x30];
DBYTE [0x30]= temp;
(5)将片内数据存储器中地址为 30H 单元的低 4 位与高 4 位交换。
答: 使用 C51 提供的本征函数_cror_实现;
#inclucle intrins.h
_cror_(DBYTE [0x30],4);
10.编写程序,用 30H 单元内容除以 40H 单元内容,商送入 50H 单元,余数送入 51H单元。 涉及直接地址,用汇编实现:
ORG 0000H
MOV SP,#49H
MOV A,30H ;被除数
MOV B,40H;除数
DIV AB;A/B
MOV 50H,A ;商存 50H 单元
MOV 51H,B ;余存 51H 单元
SJMP $ ;程序在此死循环
END
如 fosc=12MHz,这段程序的执行时间=11μs
23.在 C51 中为何要尽量采用无符号的字节变量或位变量?
答:
采用无符号的字节变量或位变量可提高代码效率的方法就是减小变量的长度, 使用ANSI C 编程时,一般习惯于对变量使用 int 类型,而对于像 80C51 这类 8 位的单片机来说这是一种极大的浪费。
80C51 单片机机器指令只支持字节和位变量,所以应该仔细考虑所声明的变量值的可能的取值范围,然后选择合适的变量类型。 尽可能地选择变量类型为 char、unsigned char 或 bit,它们只占用 1B 或 1 位。
24.为了加快程序的运行速度,C51 中频繁操作的变量应定义在哪个存储区?
答:
局部变量和全局变量可以被定义在任何一个存储区中, 根据前面的讨论, 把经常使用的变量放在内部RAM 中时,可使程序的速度得到提高。
除此之外,还缩短了程序代码,因为外部存储区寻址的指令,相对要麻烦一些。考虑到存取速度,推荐读
文档评论(0)