完整版单片机答案汇编.docx

上传人:b****3 文档编号:5958727 上传时间:2023-05-09 格式:DOCX 页数:24 大小:21.75KB
下载 相关 举报
完整版单片机答案汇编.docx_第1页
第1页 / 共24页
完整版单片机答案汇编.docx_第2页
第2页 / 共24页
完整版单片机答案汇编.docx_第3页
第3页 / 共24页
完整版单片机答案汇编.docx_第4页
第4页 / 共24页
完整版单片机答案汇编.docx_第5页
第5页 / 共24页
完整版单片机答案汇编.docx_第6页
第6页 / 共24页
完整版单片机答案汇编.docx_第7页
第7页 / 共24页
完整版单片机答案汇编.docx_第8页
第8页 / 共24页
完整版单片机答案汇编.docx_第9页
第9页 / 共24页
完整版单片机答案汇编.docx_第10页
第10页 / 共24页
完整版单片机答案汇编.docx_第11页
第11页 / 共24页
完整版单片机答案汇编.docx_第12页
第12页 / 共24页
完整版单片机答案汇编.docx_第13页
第13页 / 共24页
完整版单片机答案汇编.docx_第14页
第14页 / 共24页
完整版单片机答案汇编.docx_第15页
第15页 / 共24页
完整版单片机答案汇编.docx_第16页
第16页 / 共24页
完整版单片机答案汇编.docx_第17页
第17页 / 共24页
完整版单片机答案汇编.docx_第18页
第18页 / 共24页
完整版单片机答案汇编.docx_第19页
第19页 / 共24页
完整版单片机答案汇编.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

完整版单片机答案汇编.docx

《完整版单片机答案汇编.docx》由会员分享,可在线阅读,更多相关《完整版单片机答案汇编.docx(24页珍藏版)》请在冰点文库上搜索。

完整版单片机答案汇编.docx

完整版单片机答案汇编

3-3访问外部数据存储器和程序存储器可以用哪些指令来实现?

举例说明。

储器可以用以下指令实现:

解:

MOVXa,@Ri

MOVX@Ri,A;

MOVXA,@DPTR

MOVX@DPTR,A

答:

访问外部数据存

;((Ri))f寄存器Ri指向的片外RAM地址中的内容送到累加器A中

At((Ri)),累加器中内容送到寄存器Ri指向的片外RAM地址中

;((DPTR))fA,数据指针指向的片外ram地址中的内容送到累加器a中;Af((DPTR)),累加器中内容送到数据指针指向的片外RAM地址中

访问程序存储器可以用以下指令实现:

Movea,@A+DPTR;((A+DPTR))fA,表格地址单元中的内容送到累加器A中

Movea,@A+pc;PC+1fPC,((A+PC))fA,表格地址单元中的内容送到累加器3-4试用下列3种寻址方式编程,将立即数0FH送入内部ram的30H单元中。

(2)寄存器寻址方式;(3)寄存器间接寻址方式

(1)立即寻址方式:

(2)

寄存器寻址方式:

A中

立即寻址方式;

(3)

3-7

MOV30H,#0FH

MOVR5,#0FH

MOV30H,R5

MOV@R1,#0FH

(1)

答:

寄存器间接寻址方式:

写出实现下列要求的指令或程序片段。

(2)

(3)

(4)

(5)

(6)

(1)MOVA,R0MOVR1,A

2)MOVR1,20H

3)MOVA,20H

ANLA,#77H

4)MOVDPTR,#1000H

MOVXA,@DPTR

MOV60H,A

5)MOVDPTR,#1000HMOVXA,@DPTRMOVR2,AANLA,#0FH

内部RAM内部RAM外部RAM外部RAM

的20H单元内容传送到寄存器

的20H单元的D7和D3位清零,

的1000H单元内容传送到内部的1000H单元内容传送到寄存器R2;

将R0的内容传送到R1;

R1;

其它位保持不变;

RAM的60H单元中;

清除累加器高4位。

6)

试编写一段程序,将内部数据存储器

答:

MOVA,30H

MOVDPTR,#1000H

MOV@DPTR,A

MOVA,31H

MOVDPTR,#1000H

MOV@DPTR,A

3-9试编写一段程序,将外部数据存储器答:

3-8

单元中。

30H、3lH单元内容传送到外部数据存储器

40H单元中的内容传送到OIOOH单元中。

1000H、1001H

3-1O

答:

MOVDPTR,#0040H

MOVA,@DPTR

MOV0100H,A试编写一段程序,将R3中的数乘4

MOVA,R3

MOV23H,#02H

用移位指令)。

L0:

DJNZ23H,L1

L1:

RLA

SJMPL0

 

3-11试编写一段程序,将R2中的各位倒序排列后送入R3中。

答:

MOVA,R2

MOV23H,#08H

L0:

DJNZ23H,L1

L1:

RLA

SJMPL0MOVR3,A

3-

MOVA,P1

ORLA,#F8H

MOVP1,A

编写程序,将片内30H~39H单元中的内容送到以2000H为首的外部存储器。

ORG0000H

12试编写一段程序,将P1口的高5位置位,低3位不变。

答:

4-4

答:

START:

MOVR0,#30H

MOVDPTR,#2000H

MOVR1,#10

CLRA

LOOP:

MOVA,@R0

MOVX@DPTR,A

DECR1

DJNZR1,LOOP

END

4-

8次采样值依次放在20H~27H的连续单元

5编写程序,采用算术平均值滤波法求采样平均值,设中,结果保留在A中。

答:

FILT:

CLRA

MOVR2,A

MOVR3,A

MOVR0,#20H

MOVR7,#08H

;初始化

FILT1:

MOVA,@R0ADDA,R3

MOVR3,A

CLRA

ADDCA,R2

MOVR2,A

INCR0DJNZR7,FILT1

;累加采样值到R3,累加进位到R2=00000xxxB

FILT2:

SWAPA

RLA;R2/8,节省一个指令周期

XCHA,R3

SWAPA

RLA;R3/8,节省一个指令周期ADDA,#80H;四舍五入ANLA,#1FH;屏蔽移位进入的前三位ADDCA,R3;结果相加END

;取平均值

4-6编写程序,将存放在内部RAM起始地址为20H和30H的两个3字节无符号相减,结果存放在内部RAM单元70H、71H、72H中(低位对应低字节)。

答:

ORG0000H

START:

MOVR0,#20H

MOVR1,#30H

MOVR2,#03H

CLRC

S0:

LCALLXU

MOV70H,A

LCALLXU

MOV70H,A

LCALLXU

MOV70H,A

S1:

MOVA,@R0

SUBBA,@R1

INCR0

INCR1

RET

END

4-7编写程序,实现两个双字节无符号数的乘法运算,乘数存放在R2和R3中(R2存放高字节,R3

存放低字节,以下类同),被乘数存放在R6和R7中,积存放在R4、R5、R6和R7中。

答:

ORG0000H

DMUL:

MOVA,R3

MOVB,R7

MULAB

MOVR0,A

MOVR1,B

;低8位*低8位

MOVA,R2

MOVB,R7

MULAB

ADDA,R1

MOVR1,A

MOVA,B

ADDCA,#00H

MOVR5,A

;高8位*低8位

MOVA,R3

MOVB,R6

MULAB

ADDA,R1

MOVR1,A

MOVA,R5

ADDCA,B

MOVR5,A

MOVA,#00H

ADDCA,#00H

MOVR4,A

;低8位*高8位

MOVA,R3

MOVB,R6

MULAB

ADDA,R5

MOVR5,A

MOVA,R4

ADDCA,B

MOVR4,A

;高8位*高8位

MOVA,R0

MOVR7,A

MOVA,R1

MOVR6,A;R0、R1给R7、R6

END

4-8假设在RO指向的片内RAM区,存有20个16进制数的ASCII字串。

将ASCII码转换为16进制数,然后两两合成一个字节,从低地址单元到高地址单元依次组合。

答:

ORG0000H

START:

MOVR7,#20

S0:

MOVA,R0

MOVR1,A;R1为中间量

MOVA,@R0

CLRC

SUBBA,#30H

MOV@R1,A

JCS01

MOVA,@R0

SUBBA,#07H

MOV@R1,A

S01:

INCR0

MOVA,@R0

CLRC

SUBBA,#30H

SWAPA

ORLA,@R1

MOV@R1,A

JCS02

MOVA,@R0

SUBBA,#07H

SWAPA

ORA,@R1

MOV@R1,A

S02:

INCR0

DJNZR7,S0

END

4-9结合例4-24和图4-5编写线性标度变换程序。

答:

将256近似255,256比255做浮点运算简单很多

PUSHACC

PUSHPSW

MOVA,#Am

MOV20H,#A0

CLRC

SUBBA,20H;将256近似255,则A为小数点后的位

MOV21H,#Nx

MOVB,21H

MULAB;B为整数位,A为小数点后的位

ADDA,#80H;四舍五入

MOVA,B

ADDCA,#A0

MOV38H,A

POPPSW

PUSHACC

RET

5-

1000H、1001H

4试编写一段程序,将内部数据存储器30H、3IH单元内容传送到外部数据存储器

单元中去。

答:

#include#includevoidmain(void){unsignedinttemp;temp=DWORD[0x0030];XWORD[0x1000]=temp;while

(1);

}

5-5试编写一段程序,将外部数据存储器40H单元中的内容传送到50H单元。

答:

方法一:

#include

#includevoidmain(void)

{

XBYTE[0x0050]=XBYTE[0x0040];while

(1);

}方法二:

#include

#include

voidmain(void)

{unsignedcharxdata*xp;

unsignedchardatatemp;

xp=0x0040;

temp=*xp;

xp=0x0050;

*xp=temp;while

(1);

}

5-6试编写一段程序,将R3中的数乘以4。

答:

#includevoidmain(void){unsignedintdata*a;#pragmaasm

MOV30H,R3

#pragmaendasma=0x30;

*a=*a*4;

while

(1);

}

5-7试编写一段程序,将R2中的各位倒序排列后送入R3中。

答:

考虑C中没有循环移位,对于这种很低级的运算,采用嵌入汇编的方式完成。

#includevoidmain(void)

{

#pragmaasm

MOVR7,#08H

MOVR3,#00H

DEL:

CLRCY

MOVA,R2

RLCA

MOVR2,A

MOVA,R3

RRCA

MOVR3,A

DJNZR7,DEL

#pragmaendasmwhile

(1);

}

5-8试编写一段程序,将P1口的高5位置位,低3位不变。

答:

#include

voidmain(void)

{

P1|=0xf8;while

(1);

}

5-9设8次采样值依次存放在20H~27H的连续单元中,采用算术平均值滤波法求采样平均值,结果保留在30H单元中。

试编写程序。

答:

#pragmasmall

#include

voidmain(void)

{

unsignedchar*dp=0x20,i;

floattemp=0;

for(i=0;i<8;i++)

{

temp+=*dp;

dp++;

}

temp/=8;

dp=0x30;

*dp=temp;

while

(1);

}

5-10从20H单元开始有一无符号数据块,其长度在20H单元中。

编写程序找出数据块中最小值,并

存入21H单元。

答:

#pragmasmall

#include

voidmain(void)

{

unsignedchar*dp,num,min,i;

dp=0x20;

num=*dp;

dp++;

for(i=1;i

{min=*dp;

dp++;

if(min>*dp)

min=*dp;

}

dp=0x21;

*dp=min;

while

(1);

}

6-

1、2、3,当某一中断源变低电平时便要求CPU处理,它们的优先处

处理程序的入口地址分别为2000H、2100H、2200H。

试编写主程序及

入口即可)。

可利用MCS-51的2个外中断源INTO和INTI,再将定时/计数器T1作为

10某系统有三个外部中断源

理次序由高到低为3、2、1,中断服务程序(转至相应的答:

对系统的三个外中断源,扩展的外部中断使用,INTO接外中断源3,INTI接外中断源2,定时/计数器T1接外中断源1,3个中

断源设置为同级中断,外中断源1、2、3依次接到P1.0、P1.1、P1.2上。

汇编语言程序代码如下:

ORGOOOOH;复位入口地址

AJMPMAIN;转主程序

ORGOOO3HAJMPINT1

ORGO1OOH

MAIN:

MOVTMOD,#6OH;T1方式2

MOVTH1,#OFFH

MOVTL1,#OFFH;置初值

SETBTR1;启动计数器T1SETBEA;CPU中断开放

SETBET1;允许T1中断

SETBIT0;允许外中断0产生中断

SETBIT1

SETBPX0;外中断0为高级中断

SETBPX1

SETBPT1

SETBIT0;外中断0为跳沿触发方式

SETBIT1

LOOP1:

SJMPLOOP1;等待中断;中断服务程序

ORG1000HINT1:

PUSHPSW;保护现场

PUSHACC

1有请求

2有请求

3有请求

JBP1.0,IR1;P1.0高,外中断

JBP1.1,IR2;P1.1高,外中断

JBP1.2,IR3;P1.2高,外中断INTIR:

POPACC;恢复现场

POPPSW

RETI;中断返回

ORG2000H

IR1:

……外;中断1的中断处理程序

AJMPINTIRORG2100HIR2:

……外;中断2的中断处理程序

AJMPINTIR

ORG2200H

IR3:

……外;中断3的中断处理程序

AJMPINTIREND

7-5采用定时/计数器TO对外部脉冲进行计数,每计数100个脉冲后,TO转为定时工作方式。

定时1ms

后,又转为计数方式,如此循环不止。

假定MCS-51单片机的晶体振荡器频率为6MHz,请使用方式

1实现,要求编写出程序。

答:

ORG0000HSTART:

CLRTR0

MOVTMOD,#05H

MOVTH0,#0FFH

MOVTL0,#9CH

;计数器初始化

S0:

JBCTF0,NEXT

SJMPS0

NEXT:

CLRTR0

MOVTMOD,#01H

MOVTH0,#0F8H

MOVTL0,#30H;定时器初始化SETBTR0

S1:

JBCTF0,START

SJMPS1

END

7-7编写程序,要求使用TO,采用方式2定时,在P1.0输出周期为40011,占空比为10:

1的矩形脉冲。

答:

本题采用晶体振荡器频率为12MHz,使用定时器配合计数器,设计成一个401定时将P1.0置0

和一个4001定时将P1.0置1。

ORG0000H;中断入口地址

AJMPSTART

ORG000BH;定时器0的中断向量地址

AJMPTIME0

ORG0030H

START:

MOVSP,#5FH

MOV30H,#00H;软件计数器清零

MOVTMOD,#02H;T0工作在方式1

MOVTH0,#216

MOVTL0,#216

SETBEA

SETBET0

SETBTR0

;任意程序段

TIME0:

PUSHACC;中断处理子程序

PUSHPSW

CLRP1.0

INC30H

MOVA,30H

CJNEA,#10,T0_4

SETBP1.0

MOV30H,#00H

T0_4:

POPPSW

POPACC

RETI

END

7-9利用定时/计数器T0产生定时时钟,由P1口控制8个指示灯。

编一个程序,使8个指示灯依次一个一个闪动,闪动频率为20次/秒(8个灯依次亮一遍为一个周期)。

答:

本题采用晶体振荡器频率为12MHz,每个灯的闪烁周期是:

50ms,采用工作方式1。

ORG0000H

AJMPSTART

ORG000BH

AJMPTIME0

ORG0030H

START:

MOVSP,#5FH

MOVR7,#0FEH

MOVTMOD,#01H;T0在工作方式1

MOVTH0,#3CH

MOVTL0,#0B0H

SETBEA

SETBET0

SETBTR0

S0:

AJMPS0;此处放任意程序段

TIME0:

PUSHACC

PUSHPSW

MOVP1,R7

MOVA,R7

RLA

MOVR7,A

MOVTH0,#3CH

MOVTL0,#0B0HPOPPSW

POPACC

RETI

END

7-11编写一段程序,功能要求为:

当P1.0引脚的电平正跳变时,对P1.1的输入脉冲进行计数;当P1.2

引脚的电平负跳变时,停止计数,并将计数值写入R0、R1(高位存R1,低位存R0)。

答:

将P1.1的输入脉冲接入TO,即使用TO计数器完成对P1.1口的脉冲计数。

R2中记TO计满数的次数。

程序代码如下:

ORGOOOOH

LJMPMAIN

ORGOOOBH

LJMPITO

MAIN:

JNBP1.O,MAIN

MOVTMOD,#05H;定时/计数器TO为计数方式1

SETBTR0;启动TO,开始计数

SETBETO;允许TO中断

SETBEA;CPU开中断

WAIT:

JBP1.2,WAIT

CLREA

CLRTRO

MOVR1,THO

MOVRO,TLOAJMP$ITO:

INCR2

RETI

7-18为什么定时/计数器T1用做串行口波特率发生器时,应采用方式2?

若已知时钟频率、通信波特

率,如何计算其初值?

答:

因为方式2是有自动重装载计数值的功能,从而可以产生精确的波特率。

串行工作方式0和方式2

波特率是固定的,所以不用设初值;串行工作方式1和方式3时:

SMOD

波特率:

BR=(2xrd)/32

溢出一次的时间:

1/Td=(256-TH1)*12/fosc

溢出率:

Td=fosc/[12(256-TH1)]

初值:

TH1=256-f/(12*T)

oscd

7-19若晶体振荡器为11.059MHz,串行口工作于方式1,波特率为4800b/s,写出用T1作为波特率发生器的方式控制字和计数初值。

答:

MOVTMOD,#2OH

MOVTH1,#OFAH

MOVTL1,#0FAH

SETBTR1

MOVSCON,#50H

7-20利用单片机串行口扩展24个发光二极管和8个按键,要求画出电路图并编写程序使24个发光二

1s)。

极管按照不同的顺序发光(发光的时间间隔为答:

ORG1000H

START:

MOVSCON,#00H;串行口工作方式0

MOVR0,#00H

MOVR7,#03H

MOVR6,#24H

CLRP1.0;关闭并行输出

LOOP:

MOVA,@R0

MOVDPTR,#TAB;查表取数,送出

MOVCA,@A+DPTR

MOVSBUF,A

OUT0:

JNBTI,OUT0

INCR0

CLRTI

DJNZR7,LOOP

SETBP1.0;开启并行输出

ACALLDELAY

DJNZR6,START

AJMPLOOP

DELAY:

MOVR2,#250

D1:

MOVR3,#100

D2:

MOVR4,#20

D3:

DJNZR4,D3

DJNZR3,D2

DJNZR2,D1

RET

TAB:

DB00000000B,00000000B,00000001B,00000000B

DB00000000B,00000010B,00000000B,00000000B

DB00000100B,00000000B,00000000B,00001000B

DB00000000B,00000000B,00010000B,00000000B

DB00000000B,00100000B,00000000B,00000000B

DB01000000B,00000000B,00000000B,10000000B

DB00000000B,00000001B,00000000B,00000000B

DB00000010B,00000000B,00000000B,00000100B

DB00000000B,00000000B,00001000B,00000000B

DB00000000B,00010000B,00000000B,00000000B

DB00100000B,00000000B,00000000B,01000000B

DB00000000B,00000000B,10000000B,00000000B

DB00000001B,00000000B,00000000B,00000010B

DB00000000B,00000000B,00000100B,00000000B

DB00000000B,00001000B,00000000B,00000000B

DB00010000B,00000000B,00000000B,00100000B

DB00000000B,00000000B,01000000B,00000000B

DB00000000B,10000000B,00000000B,00000000B

END

11-4试设计一个顺序开关灯控制器,要求当按钮K第一次按下时,灯A立刻亮,灯B在延时11秒钟后亮,在灯B亮后15秒,灯C亮;当按钮K第2次按下时,灯C立刻灭,延时17秒后灯B灭,灯B灭后12秒,灯A灭。

#include

#defineuintunsignedint

unsignedcharsum=0;

灯*/灯*/灯*/

voiddelay(char);

sbitasight=PIP;/*A

sbitbsight=PIX;/*B

sbitcsight=卩1人2;/*Cvoidkey

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2