单片机原理及应用(C语言版)(主编周国运)习题答案(3)

2019-01-07 13:59

MOV 51H,#0FFH AJMP OVER NEXT2:

CJNE @R0,#55H,NEXT MOV 51H,#0 OVER:

18.编写程序,查找片内RAM的30H~50H单元中出现0的次数,并将查找的结果存入51H单元。 MOV R0,30H MOV 51H,#0 NEXT:

CJNE @R0,#00H,NEXT2 INC 51H NEXT2: INC R0

CJNE R0,#51H,NEXT

19.在片外RAM中有一个数据块,存有若干字符、数字,首地址为SOURCE要求将该数据块传送到片内RAM以DIST开始的区域,直到遇到字符“$”时结束($也要传送,它的ASCII码为24H)。 MOV DPTR,#SOURCE MOV R0,#DIST NEXT:

MOVX A,@DPTR MOV @R0,A INC DPTR INC R0

CINE A,#24H,NEXT

20.片内RAM的30H和31H单元中存放着一个16位的二进制数,高位在前,低位在后。编写程序对其求补,并存回原处。 CLR C MOV A,#0 SUBB A,31H MOV 31H,A MOV A,#0 SUBB A,30H MOV 30H,A

21.片内RAM中有两个4字节压缩的BCD码形式存放的十进制数,一个存放在30H~33H单元中,另一个存放在40H~43H单元中。编写程序将它们相加,结果的BCD码存放在30H~33H中。 CLR C

MOV R0,#30H MOV R1,#40H MOV R2,#4 NEXT:

MOV A,@R0 ADDC A,@R1 MOV @R0,A INC R0 INC R1

DJNZ R2,NEXT

22.编写程序,把片外RAM从2000H开始存放的16字节数据,传送到片内从30H开始的单元中。 MOV DPTR,#2000H MOV R0,#30H MOV R1,#0 NEXT:

MOVX A,@DPTR MOV @R0,A INC DPTR INC R0 INC R1

CINE R1,#16H,NEXT

第4章 单片机C语言及程序设计

1.用C51编程较汇编语言有哪些优势? 答:(1)编程容易

(2)容易实现复杂的数值计算 (3)容易阅读、调试、维护程序 (4)容易实现模块化开发 (5)程序可移植性好

2.C51字节数据、整型数据以及长整型数据在存储器中的存储方式各是怎样的?

答:字符变量(char)无论是unsigned char数据还是signed char数据,均为1个字节,即8位,因此被直接存储在RAM中,可能存储在0~0x7f区域(包括位寻址区域),也可能存储在0x80~0xff区域,与变量的定义有关。

整型变量(int)不管是unsigned int数据还是signed int数据,均为2个字节,即16位,其存储方法是高位字节保存在低地址(在前面),低位字节保存在高地址(在后面)。

长整型变量(long)为4个字节,即32位,其存储方法与整型数据一样,是最高位字节保存的地址最低(在最前面),最低位字节保存的地址最高(在最后面)。

3.C51定义变量的一般格式是什么?变量的4种属性是什么?特别要注意存储区属性。

答:[存储类型] 数据类型 [存储区] 变量名1[=初值] [,变量名2[=初值]] [,…] 变量的4种属性是存储类型,数据类型,存储区,变量名

4.C51的数据存储区域类型有哪些?各种存储区域类型是哪种存储空间,存储范围是什么?如何将变量定义存储到确定的位置?

答:bit 片内数据区的位寻找区,位地址0x00~0x7f,128位(字节地址0x20~0x2f)

data 直接寻址片内数据区的低128字节

bdata 片内数据区的位寻址区0x20~0x2f,也可字节访问,16字节 idata 间接寻址片内数据区的256字节,与MOV @Ri 对应

pdata 分页寻址片外数据区的256字节,与MOVX @Ri 对应,P2不变 xdata 片外数据区的全空间,64KB code 全部程序存储空间,64KB

绝对定位关键字_at_ ,指针,库函数的绝对定位宏。

5.C51位变量的定义格式是什么?如何定义bdata型字节变量的位变量? 答:[存储类型] bit 位变量名1[=初值] [,位变量名2[=初值]] [,…] sbit 位变量名 = bdata型变量名^位号常数

6.如何定义8位字节型特殊功能寄存器?如何定义16位特殊功能寄存器?如何定义特殊功能寄存器的位变量?

答:sfr 特殊功能寄存器名 = 地址常数 sfr16 特殊功能寄存器名 = 地址常数 sbit 位变量名 = 特殊功能寄存器名^位号常数

7.C51专用指针定义的一般格式是什么?如何确定专用指针定义的指向空间和指针变量本身存储的空间?

答:[存储类型] 数据类型 指向存储区 *[指针存储区] 指针名1 [,*[指针存储区] 指针名2,…]

*的左面是指向存储区,*的右面是指针存储区

8.C51函数定义的一般形式是什么?如何定义中断处理程序?如何选择工作寄存器组?

答:返回类型 函数名(形参表) [函数模式] [reentrant] [interrupt m] [using n] { 局部变量定义 执行语句 }

[interrupt m]字段中的m定义中断处理程序的中断号 [using n]字段中的n选择工作寄存器组

9.在C51中,对汇编语言函数的命名规则是怎样的,具体地说:不传递参数的函数名格式是什么?通过寄存器传递参数的函数名格式是什么?传递参数重入函数的函数名格式是什么?

答:?PR?函数名?模块名 //不传递参数 ?PR?_函数名?模块名 //通过寄存器传递参数 ?PR?_?函数名?模块名 //对重入函数通过堆栈传递参数

10.在C51中,函数返回值传递的规则是什么? 答:(1)调用时参数的传递

分三种情况:少于等于3个参数时通过寄存器传递(寄存器不够用时通过存储区传递),多于3个时有一部分通过存储区传递,对于重入函数参数通过堆栈传递。通过寄存器传递速度最快。 (2)函数返回值的传递

当函数有返回值时,其传递都是通过寄存器

11.在C51中,怎样嵌入汇编语言程序?怎样进行处理实现混合编程? 答:其方法是用编译控制指令“#pragma src”、“#pragma asm”和“#pragma endasm”实现。编译控制命令“#pragma src”是控制编译器将C源文件编译成汇编文件,“#pragma src”要放在文件的开始;“#pragma asm”和“#pragma endasm”指示汇编语言程序的开始和结束,分别放在汇编程序段的前面和后面。 对于函数的调用方法,与调用汇编语言中的函数一样,

在C语言文件中调用汇编语言中的函数,必须先声明再调用。声明格式如下: extern 返回值类型 函数名(参数表);

12.在C51中如何定义模块名?在C51文件中的模块名是什么? 答:模块定义格式如下: NAME 模块名

13.在汇编语言文件中:怎样声明函数段?怎样声明公共函数?怎样声明引用函数?怎样声明引用变量?定义函数的格式是什么?

答:对本模块定义的函数段作声明,其格式为: ?PR?函数名?模块名 SEGMENT CODE 公共函数声明。声明格式为: PUBLIC 函数名

引用声明。声明格式为: EXTRN CODE(函数名) 引用声明。声明格式为:

EXTRN 存储区域类型(变量名) 汇编语言函数的格式如下:

RSEG ?PR?函数名?模块名 函数名:

14.在C51中怎样把函数定义到确定的位置? 答:对函数的定位方法, CSEG AT 001BH

15.如何在C51文件和汇编语言文件中相互调用对方文件中的函数? 答:汇编语言文件中对于函数的调用方法,与调用汇编语言中的函数一样,如: LCALL DISPLAY

在C语言文件中调用汇编语言中的函数,必须先声明再调用。声明格式如下: extern 返回值类型 函数名(参数表);

例如: extern unsigned char right_shift ( char, char );

16.在C51中,如何访问DATA空间、PDATA空间、XDATA空间、CODE空间某个确定地址单元?

答:用指针定义的访问存储器的宏

使用时需要用预处理命令把该头文件包含到文件中,形式为:#include 。

(1)按字节访问存储器宏的形式 宏名[地址]

(2)按整型数访问存储器宏的形式 宏名[下标]

17.在某程序中需要定义如下变量:

(1)定义数码管的显示0~9的共阴极显示代码(0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07, 0x7f, 0x6f)数组dis_code,将其定义在CODE区。

(2)定义定时器/计数器0的赋计数值的高、低字节变量TL0_L和TH0_H,将


单片机原理及应用(C语言版)(主编周国运)习题答案(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:西南科技大学雷达原理试卷及答案汇总

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: