单片机原理与应用及C51程序设计第4章习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章习题答案
4-2有哪里些数据类型是MCS-51系列单片机直接支持的?
答:见P89,基本类型:字符型,整型,长整型,浮点型,特殊功能寄存器;
构造类型:数组类型,结构体类型,共用体,枚举
指针类型
空类型
4-3 C51特有的数据结构类型有哪些?
答:特殊功能寄存器,位类型
4-4 C51的存储类型有几种?它们分别表示的存储器区域是什么?
答:见P94页:存储器类型有:data, bdata,idata,pdata,xdata
4-5 C51中bit位与sbit位有什么区别?
答:bit是定义一个一般的位变量;而使用sbit定义可位寻址字节或是特殊功能寄存器的的位,定义时必指定其位地址,其存储空间为内部RAM中的位寻址区20H-2FH(位地址为:00H~7FH),
4-6 在C51通过绝对地址来访问的存储器有几种方式?
答:使用C51运行库中预定义宏,通过指针访问,使用C51扩展关键字_at_
4-7 在C51中,中断函数与一般函数有什么不同?
答:见P112页:7点
4-8 按指定存储器类型和数据类型,写出下列变量的说明形式
答:(1)在data定义字符变量var11:char data var11
(2)在idata定义整型变量var12:char idata var12
(3)在xdata定义无符号字符数组var11[4]:unsigned char xdata var13[4]
(4) 在xdata定义一个指向无符号字符的指针px: unsigned char xdata* px
(5)定义可寻址位变量flag: bit flag;
(6)定义特殊功能寄存器变量p3: sfr p3=0xb0
(7) 定义特殊功能寄存器变量SCON:sfr SCON = 0x98
(8)定义16位特殊功能寄存器变量T0:sfr16 T0=0x8a (无法真正与实际相匹配)
4-9 设a=3,b=4,c=5,写出下列关系表达式或逻辑表达式的结果
答:(1) a+b>c && b==c (False)
(2) a||b+c&&b-c (True)
(3)!(a>b) && !c|| 1 (True)
(4)!(a+b)+c-1&&b+c/2 (True)
4-10 break与continue语句的区别是什么?
答:见P110; 使用break语句可以跳出switch和循环体,提前结束循环而接着执行循环结构下面的语句
continue语句使用在循环体结构中,用于结束本次循环,跳过该语句下面尚未执行的语句,直接进行下一否执行循环的判断。
4-11用分支结构编程实现,输入”1”时显示“A”,输入”2”时显示“B”,输入”3”时显示“C”,输入”4”时显示“D”,输入”5”时结束。
答:#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar I;
void main()
{
scanf(“%d”,&i);
swtch (i)
{
case 1: printf(“A”),break;
case 2: printf(“B”),break;
case 3: printf(“C”),break;
case 4: printf(“D”),break;
case 5: break;
default: printf(“Error!”);
}
While(1);
}
4-12 输入3无符号数据,要求按由大到小的顺序输出。解:#include
#include
#define uchar unsigned char
#define uint unsigned int
uint a,b,c;
void main()
{
uint max, min, med;
scanf("%d%d%d", &a , &b, &c);
if (a>b && b>c)
{ max=a; med=b; min=c;}
else if (a>b && b
{ max=a; med=c; min=b;}
else if (a>b && b { max=c; med=a; min=b;} else if (b>a && b { max=c; med=b; min=a;} else if (b>a && b>c && a>c) { max=b; med=a; min=c;} else { max=b; med=c; min=a;} printf("%d>%d>%d\n", max, med, min); } 4-13 用3种循环结构编写程序实现输出1-10的平方和解:#include #include #define uchar unsigned char #define uint unsigned int uint sum=0; void main { uchar i,Square; for (i=1;i<=10;i++) { sum = sum +i*i; } printf(”sum=%d,”sum); i=1; while (i<=10) { sum = sum +i*i; i++; } printf(”sum=%d,”sum); i=1; do { sum = sum +i*i; i++; printf(”i%d^2=%d,”i,Square); } while (i>10) printf(”sum=%d,”sum); } 4-14 对一个5个元素的无符号字符数组按由大到小的顺序输出解: #include #include #define uchar unsigned char #define uint unsigned int uint i, n=5, j, m; uint a[]={210,108,65,49,72}; void main() { for (i=1; i { for (j=0; j {