单片机C语言试卷
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
因为个人使用旧版(第4版),页码统一也旧版页码为准,望见谅。
个人纯手打,若有错漏,望多多包含。
祝大家考试顺利!
07-08 A卷
一、问答题
1、用单片机C语言针对外部扩展接口芯片编程时,为什么需要absacc.h头文件?
答:(详见课本P342即附录B 6.头文件的内容)
该头文件中包含的宏定义允许用户直接访问8051单片机的不同存储区。
包括:(具体区别见P335-337)(可省略)
CBYTE:允许用户访问程序存储器中某一字节;
XBYTE:允许用户访问8051外部数据存储器中某一字节;
DBYTE:允许用户访问8051单片机内部数据存储器中某一字节;
PBYTE:允许用户访问按页访问8051外部数据存储器中某一字节;
CWORD:允许用户访问程序存储器中某一字节;
XWORD:允许用户访问8051外部数据存储器中某一字节;
DWORD:允许用户访问8051单片机内部数据存储器中某一字节;
PWORD:允许用户按页访问8051外部数据存储器中某一字节;
当51单片机通过8255(8155)和锁存器74LS273等来扩展IO时,需要用到外部数据存储器,常使用宏XBYTE。
2、单片机C语言Cx51对单片机内部资源和外部资源变量和地址的定义是否与普通C语言兼容,为什么?
答:详见章节3.4 P64-67
不兼容。
8051单片机片内有21个特殊功能寄存器(SFR),分散在片内RAM区的高128字节中,地址为80H~0FFH,对SFR的操作,只能用直接寻址方式。
为了直接访问这些特殊功能寄存器,KEIL Cx51提供了一种自主形式的定义方法。
这种定义方法与标准C语言不兼容,只适用于对8051系列单片机进行C编程。
这种定义的方法是引入关键字“sfr”,语法为:sfr sfr_name ˊ=ˊint constant ˊ;ˊ
3、单片机C语言编程定义变量时,为什么通常需要定义变量的存储类型?
答:详见章节3.3 P59-63
因为KEIL Cx51 是面向8051系列单片机及其硬件控制系统的开发工具,它定义的任何数据类型必须以一定的存储类型的方式定位在8051的某一存储区中,否则便没有任何的实际意义。
二、简述题
1、以走马灯的实验为例,简述用单片机C语言编程、上机、实验调试的过程。
解:详见附录A P308-322
2、简述单片机C语言取代单片机汇编语言的发展趋势。
解:详见章节2.1 P41-42
三、电路图绘制
略
四、编程题
1、对于P1口步进电机控制电路,P1.0:A 相;P1.1:B 相;P1.2:C 相。
当P3.3为低电平时,步进电机停转,当P3.3为高电平时,步进电机运转。
单向三拍正转顺序A →B →C →A ;单向三拍反转顺序A →C →B →A 。
应用定时器定时(定时17ms )中断方式编制单向三拍正、反转控制程序(用一个程序编制完成),单片机的f osc =12MHz 。
解:可以参考P235-238 章节10.3 例1、2
f 1212/f =1us osc osc MHz T =⇒=机器周期17ms/1us=17000,定时器初值65536-17000 单向三拍正转脉冲顺序为A →B →C →A ,数字控制字为01H →02H →04H →01H;
单向三拍反转脉冲顺序为A →C →B →A ,数字控制字为01H →04H →02H →01H 。
2、设80051单片机的f osc =12MHz ,编程实现在P1.7端口输出100Hz 的方波,在P1.6端口输出50Hz 的方波。
解:可以参考P188 例2
111222f 1212/f =1us
501/0.0220.1001/0.0110.osc osc MHz T f Hz t f s ms f Hz t f s ms =⇒==⇒====⇒===机器周期其中10ms 高低电平互换
其中5ms 高低电平互换
以5ms 为基准,5ms/1us=5000,定时器初值65536-5000 程序如下:
3、应用定时器定时20ms ,每20ms 从8255的A 口(地址参见绘制的电路图)读入8位新数据(new ),并和上一次输入值(old )相与,其结果存入rel 变量中,单片机的f osc =12MHz 解:可参考章节9.2 P210-214
f 1212/f =1us osc osc MHz T =⇒=机器周期20ms/1us=20000,定时器初值65536-20000
11-12 B 卷
一、简答题
1、单片机C 语言编程定义数组变量时,为什么通常需要定义数组变量的存储类型? 答:见A 卷。
2、单片机串行通信时,为什么通常选择11.059MHz 晶振?
答:详见章节8.3 P193-197
一般选用11.0592MHz 或其倍数。
因为对其整数分频后可以得到4800、9600、57600等常用波特率。
而12MHz 或6MHz 晶振数值看上去很美,分频后总是无法精确得到以上常用波特率。
3、头文件REG51.H 主要的功能是什么?单片机C 语言编程是否必须使用该头文件?
答:1)关于单片机的一些符号的定义,即规定符号名与地址的对应关系。
特别是4个并行口(P0、P1、P2、P3)、特殊功能寄存器(IE 、 IP 、TMOD 、 TR0、 EA 、 TH0 、TL0等)、第二功能等。
2)若编程并不需要头文件REG51.H 里所定义的,可不使用该头文件。
但编程所面对的硬件为8051系列单片机,一般还是需要的。
当然在自己非常熟悉8051的结构时,也可以自行定义需要使用的符号,就不必使用该头文件。
二、简述题
1、以A/D 数据采集的实验为例,简述用单片机C 语言编程、上机、实验调试的具体过程和步骤。
解:详见附录A P308-322
2、简述单片机C 语言程序结构。
解:详见章节2.5 P53-54
三、电路图绘制
1、2、3、略
4、设绘制电路图中P1.3~P1.7连接5个发光二极管,设单片机晶振为12MHz ,按照P1.7(亮200ms 之后灭)→P1.6(亮200ms 后灭)→P1.5(亮200ms 后灭)→P1.4(亮200ms 后灭)→P1.3(亮200ms 后灭)→P1.7(亮200ms 后灭)的顺序发光,编制程序实现上述功能。
要求:应用定时器中断方式编程;写出对题目的分析。
解:其实,这是一个走马灯,时间间隔200ms 。
如果间隔不同,可以参照P192 例5。
要产生200ms 的定时,可以20ms 循环10次得到。
(或者通过计数器计数10次) f 1212/f =1us osc osc MHz T =⇒=机器周期20ms/1us=20000,定时器初值65536-20000
四、编程与绘制程序流程图
编程用单片机和定时器来产生矩形波。
要求频率为50kHz ,占空比2:1(高电平的时间长)。
设单片机的f osc =6MHz
(1)绘制程序流程图
(2)编程
解:可以参考P190例4
(1)流程图我就不在word 里编辑了,很是麻烦。
(2)编程
5612/6=250,1/210202:1202/3=13.3us 201/3=6.7us
6.7us/2us=3,65536-3osc f MHz MHz us f kHz t f s us
us us -=⇒=⇒==⨯=⨯⨯机器周期占空比为,则高电平时间:低电平时间:以低电平时间为基准:需要计数次数则定时器初值为
个人认为,6MHz 的晶振并不能产生占空比2:1的50kHz 矩形波。
单片机一般执行单周期指令或双周期指令(可能会是4周期指令)。
一条语句就可以达到2或4us ,低电平时间也只是7us 不到。
误差会非常大,完全否决了题目。
看来只能用作考查,无实际意义。