单片机模拟试题以及测验答案教学教材Word下载.docx

上传人:b****5 文档编号:20852550 上传时间:2023-01-26 格式:DOCX 页数:24 大小:94.54KB
下载 相关 举报
单片机模拟试题以及测验答案教学教材Word下载.docx_第1页
第1页 / 共24页
单片机模拟试题以及测验答案教学教材Word下载.docx_第2页
第2页 / 共24页
单片机模拟试题以及测验答案教学教材Word下载.docx_第3页
第3页 / 共24页
单片机模拟试题以及测验答案教学教材Word下载.docx_第4页
第4页 / 共24页
单片机模拟试题以及测验答案教学教材Word下载.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

单片机模拟试题以及测验答案教学教材Word下载.docx

《单片机模拟试题以及测验答案教学教材Word下载.docx》由会员分享,可在线阅读,更多相关《单片机模拟试题以及测验答案教学教材Word下载.docx(24页珍藏版)》请在冰豆网上搜索。

单片机模拟试题以及测验答案教学教材Word下载.docx

另一种是外部时钟方式,用现成的外部振荡器产生脉冲信号

复位电路:

复位电路采用上电自动复位和按钮复位两种方式

8、时钟周期,机器周期和指令周期的关系

一个机器周期包括12个时钟周期。

指令周期是执行一条指令所需的时间。

单字节指令需要一个机器周期,双字节位2个机器周期,复杂指令则需要多个机器周期。

第三章测试

1、把片外RAM6000H单元数据送到片内RAM50H单元中

MOVDPTR,#6000H

MOVXA,@DPTR

MOV50H,A

2、若有一表:

ORG3000H

DB00H,01H,04H,09H,10H,19H,24H,31H,40H,51H

请通过查找表指令将表中的第7个元素的值送值累加器R1

ORG0000H

MAIN:

MOVDPTR,#DB

MOVA,#6

MOVCA,@A+DPTR

MOVR4,A

RET

3、请使用两种方法将累加器A和寄存器R3中的内容互换

(1)XCHA,@R3

(2)MOVR0,A

MOVA,@R3

MOV@R3,R0

(3)PUSHAcc

PUSH@R3

POPAcc

POP@R3

4、请使用指令完成以下要求,未涉及位的内容不能改变:

(1)将ACC.2,ACC.6,ACC.7清0

ANLA,#10011101

(2)将ACC.4,ACC.5置1

ORLA,#18H

第5章-中断测试

1、AT89S51中断源有几个?

入口地址分别是多少?

定时器/计数器T0000BH

定时器/计数器T1001BH

2、与AT89S51中断相关的寄存器有哪些?

分别是什么作用?

定时器控制寄存器----TCON

用于选择外部中断0或1,并且选择外部中断的请求触发方式(跳沿触发或者电平触发)

中断允许寄存器------IE用于开中断或关中断

中断优先寄存器------IP可控制和改变中断源的优先级

串行通信控制寄存器—SCON低2位所存串行口的发送中断和接收中断请求标志TI和RI

3、各个中断的触发方式是什么?

对应的撤销方式是什么?

IT1=0,电平触发方式,引脚上低电平有效,并把IE1置“1”。

转向中断服务程序时,由硬件自动把IE1清“0”。

IT1=1,跳沿触发方式,加到引脚上的外部中断请求输入信号电平从高到低的负跳变有效,并把IE1置“1”。

转向中断服务程序时,由硬件自动把IE1清“0”

1.定时器/计数器中断请求的撤销

硬件会自动把中断请求标志位(TF0或TF1)清0,自动撤销。

2.外部中断请求的撤销

(1)跳沿方式外部中断请求的撤销

包括两项:

中断标志位清0和外中断信号的撤销。

中断标志位清0是在中断响应后由硬件自动完成的。

外中断请求信号的撤销,由于跳沿信号过后也就消失了,自动撤销。

(2)电平方式外部中断请求的撤销

电平方式外中断请求的撤销,其中中断请求标志自动撤销,但中断请求信号的低电平可能继续存在,为此,除了标志位清“0”之外,还需在中断响应后把中断请求信号输入引脚从低电平强制改变为高电平

(3)串行口中断请求的撤销

响应串行口的中断后,CPU无法知道是接收中断还是发送中断,还需测试这两个中断标志位,以判定是接收操作还是发送操作,然后才清除。

所以串行口中断请求的撤销只能使用软件的方法,在中断服务程序中进行,即用如下指令在中断服务程序中对串行口中断标志位进行清除:

CLRTI;

清TI标志位

CLRRI;

清RI标志位

4、设计中断程序时由主程序和中断服务子程序两部分构成,主程序的作用?

中断服务子程序作用?

请写出含有外部中断0和外部中断1主程序结构和中断服务子程序的结构。

主程序:

设置中断源的入口地址、进行中断的初始化

子程序:

完成中断需要执行的内容

INT:

CLREA

执行内容

SETBEA

RETI

5、请写出由外部中断1控制的单个发光二极管闪烁5次(连在P1.5上)的程序

#include<

reg51.h>

sbitd1=P1^5;

voiddelay(x)

{

uchart;

while(x--)for(t=0;

t<

120;

t++);

}

voidint1()interrupt2

{EA=0;

for(i=0;

i<

=10;

i++)

{

d1=~d1;

delay(100);

EA=1;

}

main()

{

d1=1;

IT1=1;

EX1=1;

EA=1;

while

(1);

第六章测试

1、定时器的启动方式有几种?

分别由哪个引脚决定?

两种:

1.只受定时器控制寄存器TCON中的运行控制位TRx的控制(即由单片机内部决定)

2.由内部和引脚INT0(P3.4)、INT1(P3.5)决定

是执行1还是2取决于GATE(门空位),当GATE=0执行1,GATE=1执行2

2、定时器的4种工作方式分别有什么特点?

若系统时钟为12MHz,请问,4种工作方式最长定时分别是多少?

(写出计算表达式)

方式0:

为13位定时器/计数器

方式1:

为16位定时器/计数器

方式2:

8位的常数自动重新装载的定时器/计数器

方式3:

仅适用于T0,此时T0分成两个8位计数器,T1停止计数

4种方式最长定时位:

初值=2^13-(t*12*10^6)/12

最长时间位(2^n-0)*10^(-6)

3、当T0(P3.4)引脚发生负跳变时,作为P1.0引脚产生方波的启动信号。

开始从P1.0脚上输出一个周期为1ms的方波。

#include<

intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

uchart=0;

sbitp1=P1^0;

voidmain()

TMOD=0x26;

TH0=0xFF;

TL0=0xFF;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;

TR0=1;

ET0=1;

P1=0;

F0=0;

while

(1)

if(F0==1)

{TR1=1;

ET1=1;

voidtimer1()interrupt3

p1=~p1;

voidtimer()interrupt1

TR0=0;

F0=1;

4、时钟频率是12MHz,写出采用方式1,在P1.5引脚输出周期为2s的方波程序。

ucharTimer=0;

sbitp1=P1^5;

ucharcodetable[]={0xC0,0xF9,0xA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};

uchari=9;

TMOD=0x10;

TH1=(65536-10000)/256;

TL1=(65536-10000)%256;

ET1=1;

TR1=1;

p1=1;

if(Timer==100)

Timer=0;

P2=~P2;

Timer;

第七章测试

1、单片机AT89S51串行口传数据的帧格式是一个起始位(0),8个数据位,1位停止位组成,请画出发送字符B的帧格式。

当串行口每分钟发送1800个字符时,波特率是多少?

起始位

D0

D1

D2

D3

D4

D5

D6

D7

停止位

1800*60=108000bit/s

2、若晶体振荡器为11.0952Hz,串口工作在方式1,波特率为4800bit/s,写出用T1作为波特率发生器的方式控制字和计数初值。

选用T1的工作方式2,SMOD=0.

X=256-((fosc*(SMOD+1))/(384*波特率))=

3、使用串行口发送中断服务子程序完成以下功能:

(1)发送字符‘x’;

(2)点亮发光二极管

SbitLED=P1^6;

VoidINT()interrupt4

if(TI)

TI=0;

SBUF=’X’;

LED=0;

4、使用串行口接收中断服务子程序完成以下功能:

(1)接收字符;

(2)发光二极管(P1.6)闪烁一次

VoidINT()interrupt4

If(RI)

RI=0;

P0=SUBF;

LED=1;

DELAY();

LED=0;

第十一章测试

1、D/A芯片的衡量指标?

n位的转换芯片,其分辨率是多少?

指标:

分辨率、建立时间、转换精度。

分辨率:

输出电压满刻度/2^n

2、DAC0832的Vref=5V,输入数字量为0x80时,输出Vn是多少?

V0=|-B*(Vref/256)|=2.5VB=0x80

3、A/D转换芯片的衡量指标是什么?

ADC0809是几位的转换芯片,其分辨率是多少?

(1)转换时间和转换速率

(2)分辨率:

输出电压满刻度/2^8ADC0809是8位转换芯片

(3)转换精度

4、DAC0832的连接方式有几种?

请写出单缓冲方式下的三角波、阶梯波、方波程序,设地址为0xFFFE。

有三种:

单缓冲、双缓冲、直通方式。

三角波:

#include<

absacc.h>

#defineDAC0832XBYTE[0XFFFE]

voiddelay_ms(uints)

uchart;

while(s--)

for(t=0;

{ucharflag=0;

uchari;

while

(1){

if(flag==0)

{

i++;

DAC0832=i;

delay_ms

(1);

if(i==0xff)

flag=1;

}

else

i--;

DAC0832=i;

delay_ms

(1);

if(i==0)flag=0;

方波:

while

(1){

DAC0832=0xff;

delay_ms(100);

DAC0832=2;

delay_ms(110);

}

阶梯波:

Voidmain()

Ucharf=0;

i=0;

While

(1)

DAC0832=f;

delayms();

i++;

if(i<

10)

f=f+10;

else

f=0;

5、若DAC0809芯片对其IN3通道数据转换后送至内部RAM的30H单元。

IN3通道地址为0X7FFB.

(1)采用查询的方式,EOC与单片机P1.5连接

(2)采用中断的方式。

双向来回的流水灯:

1、在keil中编写程序实现以下功能,将P2口接8只LED,实现来回流水灯效果。

voiddelay(inta);

{inti;

P2=0x01;

while

(1)

//向左循环点亮LED

i<

7;

i++)

P2=_crol_(P2,1);

//左移一位,点亮下一位LED

//向右循环点亮LED

P2=_cror_(P2,1);

//右移一位,,点亮上一位LED

//延时函数,延时a毫秒

voiddelay(inta)

intx,y;

for(x=a;

x>

0;

x--)

for(y=110;

y>

y--);

题2:

ORG1000H

TAB1EQU1234H

TAB2EQU3000H

DB“MAIN”

DWTAB1,TAB2,70H

请画出从1000H开始的存储单元的内容?

(3)将内部RAM中的45H单元的高4位清0,低4为置1。

实验:

通过开关控制8个发光二极管的点亮,熄灭。

(预习题)

2、按下开关K1,8个发光二极管点亮与熄灭循环交替

3、按下开关K2,前4个发光二极管与后4个发光二极管交替点亮

K1、K2分别由外部中断T0、T1引入。

ucharflag=3;

voiddelay(ucharn)

uchari,j;

i=n;

while(i--)

for(j=0;

j<

j++);

uchara;

IT0=1;

EX0=1;

delay(1000);

//Ó

Ò

Æ

»

Î

£

¬

µ

ã

Á

É

Ï

LED

if(flag==1)

{

P2=0XF0;

P2=0x0f;

}

voidint0()interrupt0

flag=0;

voidint1()interrupt2

flag=1;

实验内容:

按键控制流水灯(8只LED)

1、初始状态:

D1~D8轮流点亮

2、当按下按键SKEY1时(使用INT0),停止轮换,LED0~LED4与LED5~LED7交换点亮一次;

3、当按下按键SKEY2时(使用INT1),8只灯全亮全灭一次,再轮流点亮D1~D8。

ucharj,i;

j=n;

while(j--)

i++);

voidint0()interrupt0

P2=0xf0;

P2=0X01;

voidint1()interrupt2

P2=0XFF;

P2=0X00;

按键声光报警实验

利用外部硬件中断(使用INT0),按键skey1,按下一次产生一次外部中断,使得发光二极管和蜂鸣器的鸣响次数和计数器的数值一致。

计数范围是1~10。

math.h>

#defineuintusignedint

sbitspeak=P1^1;

sbitdisplay=P2;

uchara=0;

speak=1;

P2=table[0];

P0=0;

voidint_0()interrupt0

a++;

if(a==9)

a=1;

P2=table[a];

P0=P0+pow(2,a-1);

a;

speak=~speak;

通过开关控制数码管的显示(使用汇编语言、C语言完成)

按下“计数”按键时,中断程序累加计数,通过数码管显示;

按下“清零”按键时,数码管清零;

sbitk1=P3^6;

sbitl1=P3^4;

uinti;

ucharcodeDSY_CODE[]={0xC0,0xF9,0xA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};

voidDeleayMS(uintx)

EX0=1;

IT0=1;

l1=1;

P0=P1=P2=0XFC0;

while

(1){

while(k1==0)//有键按下吗?

(k1=0?

while(k1==0)//确实是有键按下,则:

{l1=0;

i=0;

P0=P1=P2=0XC0;

while(!

k1);

}//等待按键放开

}

voidint0_0()interrupt0

P0=DSY_CODE[i%10];

P1=DSY_CODE[0],P2=DSY_CODE[0];

if(i>

=10&

&

100)

P0=DSY_CODE[i%10],P1=DSY_CODE[i%100/10],P2=DSY_CODE[0];

=100)

P0=DSY_CODE[i%10],P1=DSY_CODE[i%100/10],

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 企业管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1