课后答案
余年寄山水
871次浏览
2021年01月28日 18:45
最佳经验
本文由作者推荐
师徒结对小结-被动语态讲解
2.1
1
.
MSC
-
51
单片机内部由哪些功能 部件组成,各有什么功能?
答:以
80C51
单片机为例,其内部功能部件有:
控制器:是对 取自程序存储器中的指令进行译码,在规定的时刻发出各种操作所需的控
制信号,完成指令所规定的功能 ;
运算器:根据控制器发来的信号,执行算术逻辑运算操作;
存储器:包括程序存储和数据存储器;
定时器计数器:
2
个
16
位定时器
/
计数器,可对机器周期计数,也可对外部输入脉冲计
数;< br>
中断系统:可响应三个内部中断源和两个外部中断源的中断请求;
输入输出接口:
4
个
8
位并行口和一个全双工串行口;
2.5
5
.通常的微机系统存储器结构有哪几种?
MCS-51
单 片机存储器属于哪一类?
CS-51
可寻址多大空间?
答:通常的微机系统存储器结构有两种结构,
即哈佛结构和冯诺依曼结构
(
也叫普林斯 顿
结构
)
,
MCS-51
单片机存储器属于哈佛结构,
MC S-51
可寻址空间是两个
64KB
,即
64KB
的程序存储空间和
64KB
的数据存储空间。
2.6
6
.
片内< br>RAM
中低
128
个单元划分为哪三个主要部分?各部分的主要功能是什么?< br>
答:
片内
RAM
中低
128
个单元划分为三个部分 :
①工作寄存器区(
00H-1FH
),四组,每组
8
个 ,可作用工作寄存器切换使用;
②可位
寻址与位地址区(
20H-2FH< br>),
16B
,位地址为
00H-7FH
,用作为按位寻址的空间;
③用
户
RAM
区(
30H-7FH
),
80 B
,用作普通
RAM
单元或堆栈。
3.3
3
.编程将内部
RAM
的
20H-- 30H
单元内容清零。
解:设一个片内
RAM
指针
R0< br>,先指向首地址
20H
,通过累加器
A
清零,然后采用间接
寻 址方式依次将
A
中的零值传送到指针所指的片内
RAM
单元,
每传送 一个字节,
地址指针
加
1
,直到达到地址为
30H
或达到计 数器规定的
17
个字节为止。
程序
1
:
MOV R0,#20H
设地址指针初值
CLR A ;
累加器清
0
CONT: MOV @R0,A ;
置
0
指针所指单元
INC R0 ;
地址指针加
1
CJNE R0,#31H,CONT ;
指针未超过终点则继续
SJMP $$
暂停
程序
2
:
MOV R0,#20H ;
设地址指针初值
CLR A
累加器清
0
MOV R7,#17
计数器赋初值,从
20H
到
30H
共
17
个字节
CONT: MOV @R0,A ;
置
0
指
针所指单元
INC R0 ;
地址指针加
1
DJNZ R7, CONT ;
计数器减
1
,非
0
,则继续
SJMP $$ ;
暂停
1
4
.
编程查找内部
RAM
的
32H
~
41H
单元中是否有
0AAH
这个数据 ,
若有这一数据,
则
将
50H
单元置为
0FFH
, 否则将
50H
单元清零。
解:设一个片内
RAM
指针R0
,先指向首地址
32H
,比较
@R0
与
#0AAH
,若相等,则
退出循环,给
50H
单元赋
0FFH
,若不相 等,则
R0
加
1
为继续比较下一个字节做准备,直
到达到地址为41H
或达到计数器规定的
16
个字节为止还没找到,则给
50H
单元赋
00H
程序
1
:
MOV R0,#32H ;
设地址指针初值
CONT: CJNE @R0,#0AAH,NEXT;
比较查找值与指针所指单元的值,不相等转移
MOV A,#0FFH
相等,则准备好要赋的标志值
0FFH SJMP DOWN
转存到保存结果处
NEXT: INC R0 ;
修改地址指针
CJNE R0,#42H,CONT ;
若指针未越过终点,则继续
MOV A,#00H ;
查找失败,
则将
00H
存入结果标志单元
DOWN: MOV 50H,A
将比较结果
标志存入
50H
单元
SJMP $$
暂停
END
程序
2
:
MOV R7,#16
计数器赋初值,从
20H
到
30H
共
16
个字节
MOV R0,#32H
设地址指针初
值
CONT: CJNE @R0,#0AAH,NEXT
比较查找值与指针所指单元的值,不相等转移
MOV A,#0FFH
相等,则准备好要赋的标志值
0FFH SJMP DOWN
转存到保存结果处
NEXT: INC R0 ;
修改地址指针
DJNZ R7,CONT ;
计数器减
1
,非
0
,则继续
MOV A,#00H
查找失败,
则将
00H
存入结果标志单元
DOWN: MOV 50H,A ;
将比较结果
标志存入
50H
单元
SJMP $$ ;
暂停
END
6
.
已知
A=83H
,
R0=17H
,
(17H)=34H
,
写出下列程序段执行之后的< br>A
中的内容。
ANL
A,#17H
ORL 17H,A
XRL A,@R0
CPL A
END
答:
ANL A,#17H A=03H
ORL 17H,A (17H)=0011 0100
∨
0000 0011=0011 0111 XRL A,@R0 A= 0000 0011
∨
0011 0111 =0011 0100 CPL A ;A=1100 1011
第四章
4
.指出下面程序的语法错误:
#include
main(){
a=C
;
2
int a=7,C
delay(10)
void delay();{
cgar i
;
for(i=O; i<=255; ”++”);
}
答:
#include
main(){
a=C
;
//a
和
C
必须先定义才可使用
int a=7,C //
缺分号,应该提在使用前说明
delay(10) //
延时子程序必须先定义,或先有函数原型说明
void delay();{
//
作为函数定义,有函数定义不能嵌套的问题,
//
即不能在一个函数内定义另一个函数,而且
“{”
前不应有分号
//
作为函数原型说明,应该放在函数调用之前
,
且其后不应该接函数体
cgar i
;
//
字符型
应该是
unsigned char
for(i=O; i<=255; ”++”);// ”++”
应改成
i++
}
//
主函数没有结束,缺
”}”
5
.定义变量
a
,
b
,
c
,其中
a
为内部
RAM
的可位寻址区的字符变量,
b
为外部数据存
储区浮点型变量,
c
为指 向
int
型
xdata
区的指针。
答:
char bdata a;
float xdata b;
int xdata *c;
6
.
编程将
8051
的内部 数据存储器
20H
单元和
35H
单元的数据相乘,
结果存到外部数据
存储器中
(
任意位置
)
。
解:方法一:用嵌入式汇编语言实现
#include
void main()
{ #pragma asm
MOV A,20H
MOV B,35H
MUL AB
MOV DPTR,#1234H
MOVX @DPTR,A
INC DPTR
MOV A,B
MOVX @DPTR,A
#pragma endasm
}
方法二:单用
C
语言编程实现
#include
3