周国运版51单片机课后习题答案(3)

2019-03-16 20:35

[,?]

变量的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中,对汇编语言函数的命名规则是怎样的,具体地说:不传递参数的函数名格式是什么?通过寄存器传递参数的函数名格式是什么?传递参数重入

11

函数的函数名格式是什么?

答:?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

12

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,将其定义在DATA去区的0x30、0x31处。

(3)定义长度为20的无符号字符型数组data_buf于IDATA区中。 (4)定义长度为100的无符号字符型数组data_array于XDATA区中。 (5)先定义一个无符号字符型变量status于BDATA区中,再定义8个与status的8个位对应的位变量flag_lamp1、flag_lamp2、flag_machine1、flag_machine2、flag_port1、flag_port2、flag_calcu1和calcu2(从低位到高位)。

答:(1)unsigned char code dis_code[10]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f};

(2)unsigned char data TL0_L _at_ 0x30, TH0_H _at_ 0x31; (3)unsigned char idata data_buf[20]; (4)unsigned char xdata data_array[100]; (5)unsigned char bdata status; sbit flag_lamp1=status^0; sbit flag_lamp2=status^1; sbit flag_machine1=status^2; sbit flag_machine2=status^3; sbit flag_port1=status^4; sbit flag_port2=status^5; sbit flag_calcu1=status^6; sbit flag_calcu2=status^7;

18.在89C52单片机中增加了定时器/计数器2(T2),修改头文件“REG51.H”,

13

添加如下内容:

(1)特殊功能寄存器T2CON、T2MOD、RCAP2L、RCAP2H、TL2、TH2,地址分别为0xc8~ 0xcd。 (2)对T2CON的8个位分别定义位变量CP_RL2、C_T2、TR2、EXEN2、TCLK、RCLK、EXF2、和TF2(从低位到高位)。

(3)定义位变量T2、T2EX对应于P1口的第0位和第1位;定义位变量ET2对应于EI的第5位;定义位变量PT2对应于IP的第5位;

(4)对P1口的8个位分别定义位变量P0_0、P0_1、P0_2、P0_3、P0_4、P0_5、P0_6和P0_7(从低位到高位)。 答:(1) sfr T2CON=0xc8; sfr T2MOD=0xc9; sfr RCAP2L=0xca; sfr RCAP2H=0xcb; sfr TL2=0xcc; sfr TH2=0xcd; (2)

sbit CP_RL2=T2CON^0; sbit C_T2=T2CON^1; sbit TR2=T2CON^2; sbit EXEN2=T2CON^3; sbit TCLK=T2CON^4; sbit RCLK=T2CON^5; sbit EXF2=T2CON^6; sbit TF2=T2CON^7; (3)

sbit T2=P1^0; sbit T2EX=P1^1; sbit ET2=EI^5; sbit PT2=IP^5; (4)

sbit P0_0=P0^0; sbit P0_1=P0^1; sbit P0_2=P0^2; sbit P0_3=P0^3; sbit P0_4=P0^4; sbit P0_5=P0^5; sbit P0_6=P0^6; sbit P0_7=P0^7; 19.编写一C51函数,把从键盘输入的5位十进制数数转换成一个无符号整型数(假设未超出整型数范围)。设从键盘输入的数存放在一无符号数组中,低位数为低下标元素。

unsigned char data key_buffer[5];

14

unsigned int trans_int(void) {

unsigned char data i; unsigned int data temp=0; for(i=0;i<5;i++) {

temp=temp*10+key_buffer[i]-0x30; }

return temp; }

20.编写一C51函数,把一整型数按十进制数将其各位分离,分离后放在一无符号数组中,便于显示。要求把低位数作为低下标元素。 unsigned char data shu[5]; void main(unsigned int x) {

unsigned int temp; unsigned char i; for(i=0;i<4;i++) {

shu[i]=temp; temp=temp/10;

}

shu[4]=temp; }

21.编写一C51函数,使用专用指针,把片外数据存储器中从0x100开始的30个字节数据,传送到片内从0x40开始的区域中。 void main() {

unsigned char data i,*dpt; unsigned char xdata *xdpt; dpt=0x40; xdpt=0x100;

for(i=0;i<30;i++)

*(dpt+i)=*(xdpt+i); }

22.编写一C51程序,实现从P1口输出产生的流水灯,要求用汇编语言函数实现数据左移或右移。 #pragma src

#include void main() {

15


周国运版51单片机课后习题答案(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:米易县精英保安公司白马选矿厂分队

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

马上注册会员

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