11级单片机总复习
开卷考试,可以带书和手写的作业本,笔记本,不许带打印的和复印的资料。 题型
1、填空题(C语言任务1-12,在4-7题考不到的如串口) 2、简答题(C语言任务1-12,在4-7题考不到的如串口) 3、读程序(C语言任务1-12,在4-7题考不到的如串口) 4、写程序(C语言定时器、计数器、中断参考任务4-5) 5、综合(存储器扩展参考任务7)
6、综合(A/D D/A扩展参考任务11-12) 7、综合(键盘 显示器扩展参考任务9-10)
一、填空题
样题:40个引脚的功能、作用p17 如:
? 8031引脚T1的作用__________,/EA的作用________________________。
二、简答题
存储器
? MCS-51单片机片内RAM低128字节单元划分为哪几个区域?应用时应该如何合理有效地使用?(片内数据存储器分为哪几个性质和用途不同的区域?)(试说明8051单片机按照存储器功能和所在位置分类,并分别说明其容量。)(8051单片机存储器的组织结构是怎样的?)
? ? ? ?
8051片内数据存储器分为哪几个性质和用途不同的区域? 51单片机有几种地址译码方式,分别说明它们的优缺点。 C51变量有几种存储类型,分别说明它们的特点。
单片机访问外设有哪几种方式,分别说明它们的特点。
1
? 计算机的数据传输方式分为串行传输和并行传输,试说明它们各自的传输特点、优缺点
和使用场合。
三、读程序
样题:1.阅读下列C语言程序,并详细解释指定位置语句的功能。 # include
unsigned char data daData;
unsigned char xdata *add_dac0832 = 0x7fff; //语句功能定义add_dac0832 指向片外地址0x7fff void Delay(unsigned int Delay) { for( ;Delay>0;Delay--) ; }
void main( ) { daData=0; while(1)
{ *add_dac0832 = daData; //语句功能 把daData赋值给D/A进行转换 delay();
daData++; //语句功能_daData数值自加1_ } }
该段程序的功能__产生阶梯波
四、编程题(定时器、计数器、中断、查询)
样题:.
8051采用3MHz晶振,写一个完整的程序实现从P2.1输出周期为20ms的方波,要求使用定时/计数器T1和查询方式,寄存器中任意位用“1”代。(8分)(用C51语言实现)
1. 3Mhz的晶振:机器周期是4us,相当于是定时器自动加1的时间是4us
2. P2.1输出周期为20ms的方波:周期是20m则定时10ms,P2.1进行一次反转
3. 使用定时/计数器T1和查询方式:初值的计算 10000/4 = 2500; 利用定时器方式2
TH1 = (65535-2500)/256; TL1 = (65535-2500)%6
程序:
#Include
Sbit Square_Wave = P2^1;
Void main()
2
{
TMOD = 0X10;
TH1 = (65535-2500)/256; TL1 = (65535-2500)%6; TR1 = 1;
While(1) {
While(TF1) {
TF1 = 0;// 在中断中硬件自动清零,在查询方式下则要软件清零 Square_Wave = ~Square_Wave; } } }
五、综合(存储器扩展任务7)
样题:
如图,某8051单片机扩展2片存储器。(共14分) 1、U2是程序存储器还是数据存储器,并说明原因;(3分)
U2是数据存储器:程序存储器的读操作是由PSEN//控制,数据存储器的读写有RD/,WR/信号控制。
2、U2地址范围是多少?写出计算过程;(4分)
74138是数据选择器(低电平有效):当A15 A14 A13 = 0 1 0 时,选中了片选段U2_CS, 所以U2的地址范围是:0X4000---0X5FFF
3、若希望U1的地址范围是A000H~BFFFH,U1的片选信号如何连接;(3分)
A :1010 B: 1011
所以当A15 A14 A13 = 101 时,选中的是U1,则U1的片选端U1_CS 接在74138的 Y5输出端。
4、写一段程序将地址为66H和67H的内部数据存储器内容相减,存入U2尾单元。(4分)(用C51语言实现)
程序:
#include
3
unsigned char data *INRAM1 = 0X66; //直接寻址方式访问内部数据存储器 unsigned char data *INRAM2= 0X67; //直接寻址方式访问内部数据存储器 char xdata *EXTRAM = 0X5fff ; //访问外部数据存储器
Void main(void) {
char temp;
temp = *INRAM1-*INRAM2; *EXTRAM = temp;
While(1); }
D[0..7]A8A9A10A11A12A13A14A15U521222324252627281011121314151617P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INTOP3.3/INT1P3.4/TOP3.5/T1P3.6/WRP3.7/RDPSENALE/PROGP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7XTAL1XTAL2RSTEA/VPP8051A131A142A153VCC645G1G2AG2B74LS1383938373635343332123456781918931U4ABCY0Y1Y2Y3Y4Y5Y6Y7109876543252421232U2_CS20/WR/RD2722347813141718ALE111U3D0D1D2D3D4D5D6D7GOC74LS373/PSENQ0Q1Q2Q3Q4Q5Q6Q7A[0..12]2569121516191098765432524212322022271U1A0A1A2A3A4A5A6A7A8A9A10A11A12CEOEPGMVPPO0O1O2O3O4O5O6O711121315161718190/WR/RD/PSEN29ALE30U2A0A1A2A3A4A5A6A7A8A9A10A11A12CSWEOED0D1D2D3D4D5D6D715141312111097U2_CS11121315161718190?
六、综合(A/D D/A扩展任务11-12)
样题:如图:8051和ADC0809系统,(共10分) 1. 计算ADC0809各通道地址(IN0~IN7);(3分)
4
提示:未使用的地址线默认为“1”。
P2^5一定要为0的时候,才能选中AD芯片 INT0: DFF8 INT1: DFF9 INT2: DFFA INT3: DFFB INT4: DFFC INT5: DFFD
2. 写一段程序从IN5读取数据存入地址为4000H的外部数据存储器;(5分)(用C51语
言实现)
#include
#include//定义绝对地址访问头文件 #define uchar unsigned char #define IN5 XBYTE[0xdffd]
#define ExtRam XBYTE[0x4000] uchar xdata *ad_address; uchar xdata *ad_Ext; main() {
IT1 = 1; EX1 = 1; EA = 1;
ad_address = &IN5; ad_Ext = &ExtRam; while(1); }
void Int_ADC(void) interrupt 2 {
*ad_Ext = *ad_adress; }
3. 若8051的晶振12MHz,ADC0809的工作频率不超过典型频率,ADC0809的CLK从
ALE引入,分频器应该用多少分频,并说明原因。(2分)
ADC0809的转换时钟由单片机的ALE提供。ADC0809的典型转换频率是640Khz,ALE的信号频率与晶振频率有关,如果晶振频率是12Mhz,则ALE是2Mhz,所以ADC0809的时钟端与单片机的ALE端连接的时候,要进行4分频。
5