《单片机原理----C51编程及Proteus仿真习题答案 (金宁治) 习题4答案.docx》由会员分享,可在线阅读,更多相关《单片机原理----C51编程及Proteus仿真习题答案 (金宁治) 习题4答案.docx(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、思考题及习题4一、填空1 .某数用十六进制表示为0x5a,那么用二进制表示为90 。2 .设 int x=0, y=l;表达式(x&y)的值是 Q。3 . C51提供了两种不同的数据存储类型.xdata 和来pdata 访问片外数据存储 区。4 . C51基本的结构有顺序结构、.选择结构一和循环结构。5 .假设声明 inti,j,k;那么表达式 i=10, j=20, k=30, k*=i+i 的值为 900 。6 . x+=a 等价于 x=x+a , x*二a 等价于 x=x*a , x%=a 等价于 x=x%a 。7 . (int)(8.2/2)= 4 8 .以下程序的输出结果是一2 0m
2、ain() (int x-10, y=l, z=l;if(xy) x=0;if(y0) z=0; else z=z+l; printf(%dn”, z); 9 .执行语句for(j=0; j=3; j+) a=l;后变量j的值是 4。10 .假设一个函数的返回类型为void,那么表示其没有返回值。11 . C51编译器在头文件reg.51 中定义了全部sfr/sfr16和sbit变量。二、简答1 .简述C51语言与标准C语言的区别?答:相同之处:语法规那么、程序结构、编程方法。不同之处:(1)库函数不同:由于标 准C中的局部库函数不适用于嵌入式系统,因此排除在C51之外,如字符屏幕和图形函数。
3、 数据类型不同:51系列单片机包括丰富的位操作指令,因止匕C51相比于标准C增加了 4 种数据类型,以便灵活操作。(3)数据存储类型不同在通用计算机中只有一个程序和数据统 一寻址的内存空间,51系列单片机存储区可分为内部数据存储区、外部数据存储区以及程 序存储区。不同的存储区域数据的存储类型也不同。(4)标准C语言没有处理单片机中断的 定义。5、头文件不同:C5I语言头文件必须把8051单片机内部的外设硬件资源(如定时器、 中断、I/O等)相应的特殊功能寄存器写入到头文件内,而标准C不用。2 .简述C51语言的数据存储类型。答:C51定义的任何数据类型必须以一定的方式,定位在51单片机的某一存
4、储区中, 可分为片内数据存储区、片外数据存储区,还有程序存储区。如下表所示。表3-2C51语言存储类型与8051存储空间的对应关系存储区存储类型与存储空间的对应关系DATAdata片内RAM直接寻址区,位于片内RAM的低128字节BDATAbdata片内RAN1位寻址区,位于20H2FH空间IDATAidata片内RAM的256字节,必须间接寻址的存储区XDATAxdata片外64KB的RAM空间,使用DPTR间接寻址PDATApdata片外RAM的256字节,使用Ri间接寻址CODEcode程序存储区,使用DPTR寻址3 .无参函数和有参函数的定义是什么?答:无参数函数的函数名后面的括号里是
5、空的,没有参数列表,有时也在括号里面形式 地写上void,表示没有参数;有参函数在C语言中,参数相当自变量,返回值相当于应变 量,一个参数相当于一元函数,返回量只能有一个。三、编程或设计1 .编写一个从I力U至IJ 100的循环程序,将计算结果保存到整型变量“sum”中。main()(unsigned char counter;int sum;counter = 1;sum = 0;while(counter= 100) sum = sum+counter;counter+;)2 .将片外RAM 2000H开始的连续20字节清0。#include unsigned char xdata buf
6、fer20 _at_ 0x2000;void main(void)(unsigned char i;for(i=0; i20; i+)(bufferi = 0;)3 .编写程序将片外数据存储器中的0x5000-0x50FF的256个单元全部清0。#include unsigned char xdata databuf256| _at_ 0x5000;void main(void)(unsigned char i;for(i=0; i256; i+)(databufi = 0;)4 .编写C51程序,将单片机片外2000H为首地址的连续10个单元的内容,读入到片 内RAM的40H49H单元中。答
7、:将片外2000H为首地址的连续10个单元的内容,读入到片内RAM的40H49H单元中。程序如下:#include xdata unsigned char bufferl 10 _at_ 0x2000;data unsigned char buffer210 _at_ 0x40void main(void)(unsigned char i;for(i=0; i10; i+) (buffer2i = buffer li;)5 .向单片机片内RAM的0x30地址开始连续写入0x01-0x40o#include unsigned char data *ram_adr;void main()(ram_
8、adr = 0x30;for(int i=0; i64; i+) (*ram_adr = i+1;ram_adr +;)6 .将51单片机的Pl.l引脚输入电平取反后,在P0.4引脚输出。#include sbitPl_l=PlAl;sbit P0_4 =P0八4; void main(void) (Pl_l = 1;while(l)(if(Pl_l = 1)(P0_4=0;) else (P0_4 = 1;初始化,Pl.l作为输入,必须先输出高电平非零表示真,如果为真那么执行下面循环体的语句/读取PL1,如果PL1输入高电平VCC给P0.4赋值0,引脚P0.4就能输出低电平GND否那么P1.
9、1输入为低电平GND给P0_4赋值1,引脚P0.4就能输出高电平VCC)7 .单片机P1 口状态分别送入P0、P2和P3。#include /包含单片机寄存器的头文件void main(void)(Pl =Oxff; while(l) (PO = P1;将Pl口状态送入PO口P2 = P1;将P2口状态送入PO口P3 = P1;将P3口状态送入P0口)8 .采用字符循环移位指令_crol_,实现单片机P3 口流水灯功能。#include #include void main(void) (P3 = Oxfe;/初始化 P3 口为 1111 1110B;while(l) (P3 = crol_(P3,l); 将P3的二进制位循环左移1位 delay();)void delay(void)(unsigned char i, j;for(i=0; i250; i+)for(j=0; j200 ;j+);