单片机原理接口及应用李群芳版习题解答参考.docx

上传人:b****5 文档编号:5222349 上传时间:2022-12-14 格式:DOCX 页数:34 大小:103.12KB
下载 相关 举报
单片机原理接口及应用李群芳版习题解答参考.docx_第1页
第1页 / 共34页
单片机原理接口及应用李群芳版习题解答参考.docx_第2页
第2页 / 共34页
单片机原理接口及应用李群芳版习题解答参考.docx_第3页
第3页 / 共34页
单片机原理接口及应用李群芳版习题解答参考.docx_第4页
第4页 / 共34页
单片机原理接口及应用李群芳版习题解答参考.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

单片机原理接口及应用李群芳版习题解答参考.docx

《单片机原理接口及应用李群芳版习题解答参考.docx》由会员分享,可在线阅读,更多相关《单片机原理接口及应用李群芳版习题解答参考.docx(34页珍藏版)》请在冰豆网上搜索。

单片机原理接口及应用李群芳版习题解答参考.docx

单片机原理接口及应用李群芳版习题解答参考

标准化管理部编码-[99968T-6889628-J68568-1689N]

 

单片机原理接口及应用李群芳版习题解答参考

单片机原理、接口及应用——嵌入式系统技术基础

习题解答

预备篇

计算机的基础知识

40H,62H,50H,64H,7DH,FFH

812,104,213,256,2936,941

十进制数

原码

补码

十进制数

原码

补码

28

1CH

1CH

250

FAH

FAH

-28

9CH

E4H

-347

815BH

FEA5H

100

64H

64H

928

03A0H

03A0H

-130

8082H

FF7EH

-928

83A0H

FC60H

机器数真值分别为:

27,233,-128,-8,14717,31467,-27824,-12478

(1)33H+5AH=8DH,OV=1,CY=0。

(2)-29H-5DH=7AH,OV=0,CY=1。

(3)65H-3EH=27H,OV=0,CY=1。

(4)4CH-68H=E4H,OV=0,CY=0。

十进制数

压缩BCD数

非压缩BCD数

ASCII码

38

38H

0308H

3338H

255

255H

020505H

323535H

483

483H

040803H

343833H

764

764H

070604H

373634H

1000

1000H

01000000H

1025

1025H

01000205H

ASCII码表示的十六进制数分别为:

105H,7CAH,2000H,8A50H

基础篇

第1章、MCS-51单片机结构

单片微型计算机(即单片机)是包含CPU、存储器和I/O接口的大规模集成芯片,即它本身包含了除外部设备以外构成微机系统的各个部分,只需接外设即可构成独立的微机应用系统。

微机处理器仅为CPU,CPU是构不成独立的微机系统的。

参见教材节

参见教材第6页表格

参见教材表

参见教材表和表

当PSW=10H表明选中的为第二组通用寄器R0~R7的地址为10H~17H

程序存储器和数据存储器尽管地址相同,但在数据操作时,所使用的指令不同,选通信号也不同,因此不会发生错误。

内部数据程序外部数据程序

振荡周期=μs机器周期=2μs指令周期=2~8μs

A=0,PSW=0,SP=07,P0~P3=FFH

第2章、51系列单片机的指令系统

参见教材节

因为A累加器自带零标志,因此若判断某内部RAM单元的内容是否为零,必须将其内容送到A,JZ指令即可进行判断。

当A=0时,两条指令的地址虽然相同,但操作码不同,MOVC是寻址程序存储器,MOVX是寻址外部数据存储器,送入A的是两个不同存储空间的内容。

目的操作数源操作数

寄存器直接

SP间接寻址直接

直接直接

直接立即

寄存器间址直接

寄存器变址

寄存器间址寄存器

Cy=1,OV=0,A=94H

√×

√×

××

√√

×√

××

××

×√

××

××

××

A=25H(50H)=0(51H)=25H(52H)=70H

SP=(61H)(SP)=(24H)

SP=(62H)(SP)=(10H)

SP=(61H)DPL=(10H)

SP=(60H)DPH=(24H)

执行结果将0送外部数据存储器的2410单元

程序运行后内部RAM(20H)=B4H,A=90H

机器码源程序

7401LA:

MOVA,#01H

F590LB:

MOVP1,A

23RLA

B40AFACJNE,#10,LB

80F6SJMPLA

ANLA,#0FH

SWAPA

ANLP1,#0FH

ORLP1,A

SJMP$

MOVA,R0

XCHA,R1

MOVR0,A

SJMP$

(1)利用乘法指令

MOVB,#04H

MULAB

SJMP$

(2)利用位移指令

RLA

RLA

MOV20H,A

ANLA,#03H

MOVB,A

MOVA,20H

ANLA,#0FCH

SJMP$

(3)用加法指令完成

ADDA,ACC

MOVR0,A;R0=2A

MOVA,#0

ADDCA,#0

MOVB,A;B存2A的进位

MOVA,R0

ADDA,ACC

MOVR1,A;R1=4A

MOVA,B

ADDCA,B;进位×2

MOVB,A;存积高位

MOVA,R1;存积低位

SJMP$

XRL40H,#3CH

SJMP$

MOVA,20H

ADDA,21H

DAA

MOV22H,A;存和低字节

MOVA,#0

ADDCA,#0

MOV23H,A;存进位

SJMP$

MOVA,R0

JZZE

MOVR1,#0FFH

SJMP$

ZE:

MOVR1,#0

SJMP$

MOVA,50H

MOVB,51H

MULAB

MOV53H,B

MOV52H,A

SJMP$

MOVR7,#0AH

WOP:

XRLP1,#03H

DJNZR7,WOP

SJMP$

2.19单片机的移位指令只对A,且只有循环移位指令,为了使本单元的最高位移进下一单元的最低位,必须用大循环移位指令移位4次。

ORG0

CLRC

MOVA,20H

RLCA

MOV20H,A

MOVA,21H

RLCA

MOV21H,A

MOVA,22H

RLCA

MOV22H,A

MOVA,#0

RLCA

MOV23H,A

SJMP$

第3章、MSC-51单片机汇编语言程序设计

3.1因为是多个单元操作,为方便修改地址使用间址操作。

片外地址用DPTR指示,只能用MOVX指令取数到A,片内地址用R0或R1指示,只能用MOV指令操作,因此循环操作外部数据存贮器→A→内部部数据存贮器。

ORG0000H

MOVDPTR,#1000H

MOVR0,#20H

LOOP:

MOVXA,@DPTR

MOV@R0,A

INCDPTR

INCR0

CJNER0,#71H,LOOP

SJMP$

要注意两高字节相加应加低字节相加时产生的进位,同时要考虑最高位的进位。

ORG0

MOVA,R0

ADDA,R6

MOV50H,A

MOVA,R7

ADDCA,R1

MOV51H,A

MOVA,#0

ADDCA,ACC

MOV52H,A

SJMP$

A中放小于14H(20)的数,平方表的一个数据占2个字节,可用BCD码或二进制数存放.(如A中放的是BCD码,则要先化成二进制数再查表。

ORG0

MOVDPTR,#TAB

ADDA,ACC;A*2

PUSHACC

MOVCA,@A+DPTR

MOVR7,A

POPACC

INCA

MOVCA,@A+DPTR

MOVR6,A

SJMP$

TAB:

DB00,00,00,01,00,04,00,09,00,16H,……

DB………04H,00

先用异或指令判两数是否同号,在同号中判大小,异号中正数为大.

ORG0

MOVA,20H

XRLA,21H

ANLA,#80H

JZCMP

JB,BG

AG:

MOV22H,20H

SJMP$

BG:

MOV22H,21H

SJMP$

CMP:

MOVA,20H

CJNEA,21H,GR

GR:

JNCAG

MOV22H,21H

SJMP$

3.5fosc=6MHZ

机器周期数

DELAY:

MOVR1,#0F8H1

LOOP:

MOVR3,#0FAH1

DJNZR3,$2

DJNZR1,LOOP2

RET2

(1+(1+2*0xFA+2)*0xF8+2)*12/6MHz

=(1+(1+2*250+2)*248+2)*2us

=

将待转换的数分离出高半字节并移到低4位加30H;再将待转换的数分离出低半字节并30H,安排好源地址和转换后数的地址指针,置好循环次数。

ORG0000HMOVA,@R0

MOVR7,#05HANLA,#0FH

MOVR0,#20HADDA,#30H

MOVR1,#25HMOV@R1,A

NET:

MOVA,@R0INCR0

ANLA,#0F0HINCR1

SWAPADJNZR7,NE

ADDA,#30HSJMP$

MOV@R1,AEND

INCR1

片内RAM间址寄存器只能有R0和R1两个,而正数、负数和零共需3个寄存器指示地址,这时可用堆栈指针指示第三个地址,POP和PUSH在指令可自动修改地址。

R0指正数存放地址和R1指负数存放地址,SP指源数据存放的末地址,POP指令取源数据,每取一个数地址减1。

ORG0000H

MOVR7,#10H

MOVA,#0MOV@R0,A

MOVR4,AINCR0

MOVR5,AAJMPDJ

MOVR6,ANE:

INCR5

MOVR0,#40HMOV@R1,A

MOVR1,#50HINCR1

MOVSP,#3FHAJMPDJ

NEXT:

POPACCZER0:

INCR6

JZZER0DJ:

DJNZR7,NEXT

JB,NESJMP$

INCR4END

可直接用P标志判断(JBP,ret)

ORG0000H

MOVA,40H

JBP,EN;奇数个1转移

ORLA,#80H;偶数个1最高位加“1”

EN:

SJMP$

取补不同于求补码,求补码应区别正、负数分别处理,而取补不分正、负,因正、负数均有相对于模的补数。

用取反加1求补也可用模(00H)减该数的方法求补。

ORG0000H

MOVR7,#03HAB:

INCR0

MOVR0,#DATAMOVA,@R0

MOVA,@R0CPLA

CPLAADDCA,#0

ADDA,#01DJNZR7,AB

MOV@R0,ASJMP$

3.1016个单字节累加应用ADD指令而不能用ADDC指令,和的低位存A,当和超过一个字节,和的高字节存于B,并要加进低位相加时产生的进位,16个单字节加完后,采用右移4次进行除十六求平均值的运算,商在BUF2单元,余数在BUF2-1单元。

ORG0000H

MOVR7,#0FH

MOVR0,#BUF1

MOVB,#0

MOVA,@R0

MOVR2,A

NEXT:

MOVA,R2

INCR0

ADDA,@R0

MOVR2,A

MOVA,B

ADDCA,#0

MOVB,A

DJNZR7,NEXT

;以上完成求和

MOVR6,#04H

MOVBUF2,A

MOVBUF2-1,#0

NEX:

CLRC

MOVA,B

RRCA

MOVB,A

MOVA,BUF2

RRCA

MOVBUF2,A

MOVA,BUF2-1

RRCA

MOVBUF2-1,A

DJNZR6,NEX

SJMP$

;以上完成除十六运算

将20H单元的内容分解为高4位和低4位,根据是否大于9分别作加37H和30H处理。

ORG0000H

MOVA,20H

ANLA,#0F0H

SWAPA

ACALLASCII

MOV22H,A

MOVA,20H

ANLA,#0FH

ACALLASCII

MOV21H,A

SJMP$

ASCII:

CJNEA,#0AH,NE

NE:

JCA30

ADDA,#37H

RET

A30:

ADDA,30H

RET

要注意,位的逻辑运算其中一个操作数必须在C。

ORG0000H

MOVC,20H

ANLC,2FH

CPLC

ORLC,/2FH

CPLC

ANLC,53H

MOV,C

SJMP$

END

ORG0000H

MOVC,

ANLC,

ANLC,/

MOV20H,C

MOVC,

CPLC

ANLC,/

ORLC,20H

MOV,C

SJMP$

END

设一字节乘数存放在R1,三字节的被乘数存放在data开始的内部RAM单元,且低字节存放在低位地址单元,R0作为被乘数和积的地址指针,用MUL指令完成一字节乘一字节,每一次部分积的低位加上一次部分积的高位,其和的进位加在本次部分积的高位上,并暂存,三字节乘一字节共需这样三次乘、加、存操作,以R7作循环三次的计数寄存器。

ORG0000H

MOVR7,#03HMOVA,#0

MOVR0,#dataADDCA,B

MOVR2,#0MOVR2,A

NEXT:

MOVA,@R0INCR0

MOVB,R1DJNZR7,NEXT

MULABMOV@R0,B

ADDA,R2SJMP$

MOV@R0,AEND

第4章、并行接口P0-P3和单片机的中断系统

~参考教材节

用监测按键开关,引脚输出正脉冲,正脉冲的产生只需要将置零、置1、延时、再置零即可。

接一示波器可观察波形。

如果再接一发光二极管,可观察到发光二极管的闪烁。

电路设计可参考图

汇编语言程序

ORG0000H

ABC:

CLR

SETB

JB,$;未按键等待

JNB,$;键未弹起等待

SETB

MOVR2,#0

DAY:

NOP

NOP

DJNZR2,DAY图

SJMPABC

电路见图,初始值送0FH到P1,再和0FFH异或从P1口输出,或使用SWAPA指令,然后从P1口输出,循环运行,要注意输出后要延时。

汇编语言程序

ORG0000H

MOVA,#0FH

ABC:

MOVP1,A

ACALLD05

SWAPA

SJMPABC

D05:

MOVR6,250

DY:

MOVR7,250

DAY:

NOP图

NOP

DJNZR7,DAY

DJNZR6,DY

RET

END

如使用共阴极数码管,阴极接地,阳极a~g分别接P0~P3的某个口的7位,将0~F的段码列成表,表的内容顺次从该口输出。

如数码管接P3口。

汇编语言程序

ORG0000H

MOVDPTR,#TAB

AGAIN:

MOVR0,#0

NEXT:

MOVA,R0

MOVCA,@A+DPTR

MOVP3,A

MOVR7,#0

DAY:

NOP

NOP

DJNZR7,DAY

INCR0

CJNER0,#10H,NEXT

SJMPAGAIN

TAB:

DB3FH,06H…;段码表(略)

END

电路设计见图,编程如下:

ORG0000H

MOVA,#08H

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP1,A

MOVR2,#08H

AGAIN:

MOVA,#01

NEXT:

MOVP3,A

ACALLDAY

RLA

CJNEA,#10H,NEXT

DJNZR2,AGAIN

SJMP$

TAB:

DB3FH,06H···

END

4.8

P1口的八根线接行线,输出行扫描信号,

P3口的八根线接列线,输入回馈信号。

见图。

~参见节

电路设计见图

汇编语言程序

ORG0000H

AJMPMAIN

ORG0003H

RLA;中断服务

MOVP1,A

RETI图

MAIN:

MOVA,#0FEH

MOVP1,A;第一灯亮

SETBEA

SETBEX0

SETBIT0

SJMP$

汇编语言中只有一个中断源,不存在占用别的中断源向量地址问题,程序顺序排下,应注意程序的执行过程。

C语言无循环移位指令移位后,后面补零,因此和01相或。

ORG0000H

AJMPMAIN

ORG0003H;中断服务

XRLP1,#0FFH

DJNZR0,NE

CLREA

NE:

RETI

ORG0030H

MAIN:

SETBEA

SETBEX0

SETBIT0

MOVP1,#0FFH

MOVR0,#0AH

SJMP$;等待中断

因一亮一灭为一次,所以共十次。

两个数码管阳极经驱动器接P1口,阴极分别接、。

aaEQU08H;存储高四位的段码

bbEQU09H;存储第四位的段码

iEQU0AH;存储计数值

Tab:

DB3FH,06H……;段码表略

ORG0000H

AJMPMAIN

ORG0013H

AJMPINTR

MAIN:

MOVDPTR,#Tab

CLRA

MOVCA,@A+DPTR

MOVaa,A

MOVbb,A;a=b=Tab[0]

CLR

CLR

SETBEA

SETBEX0

SETBIT0;开中断

LOOP:

SETB

CLR

MOVP1,bb;显示低位

ACALLDelay;延时

CLR

SETB

MOVP1,aa;显示高位

ACALLDelay;延时

SJMPLOOP

INTR:

CLREX0

INCi;i加一

MOVA,i

ANLA,#0FH;取i的低位

MOVDPTR,#Tab

MOVCA,@A+DPTR

MOVbb,A;查表b=Tab[i的低位]

MOVA,i

ANLA,#0F0H

SWAPA;取i的高位

MOVCA,@A+DPTR

MOVaa,A;查表a=Tab[i的高位]

SETBEX0

RETI

Delay:

;略

END

提示:

将X1至X3分别接至一个三输入或非门的三个输入端,同时还分别接至单片机的三个IO口,或非门的输出端接至单片机的外部中断引脚。

中断服务程序中检查三个IO口的值,便可知道具体的故障源。

程序略。

第五章、单片机的定时/计数器与串行接口

~请参考教材

方式0:

方式1:

131ms方式2:

512μs

使用方式2计数初值C=100H-0AH=F6H

查询方式:

ORG0000H

MOVTMOD,#06H

MOVTH0,#0F6H

MOVTL0,#0F6H

SETBTR0

ABC:

JNBTF0,$

CLRTF0

CPL

SJMPABC

中断方式:

ORG0000H

AJMPMAIN

ORG0000BH

CPL

RETI

MAIN:

MOVTMOD,#06H

MOVTH0,#0F6H

SETBEA

SETBET0

SETBTR0

SJMP$;等待中断

1000HZ的周期为1ms,即要求每500μ变反一次,使用方式T1方式1,MC=12/fosc=1μs,C=216-500μs/1μs=FE0CH,除TMOD=10H,TH0=FEH,TL0=0CH外,程序与题相同,注意每次要重置TH0和TL0

f=6MHzMC=2μs方式2的最大定时为512μs合乎题目的要求。

50μs时,计数初值为C1=256-25=E7H,350μs时计数初值为C2=256-175=51H

汇编语言程序

ORG0000H

MOVTMOD,#02H

NEXT:

MOVTH0,#51H

MOVTL0,#51H

CLR

SETBTR0

AB1:

JBCTF0,EXT

SJMPAB1

EXT:

SETB

MOVTH0,#0E7H

MOVTL0,#0E7H

AB2:

JBCTF0,NEXT

SJMPAB2

上述的计数初值没有考虑指令的执行时间,因此误差较大,查每条指令的机器周期,扣除这些时间,算得C=E3H,这样误差较小。

输出2ms脉冲,输出50μs脉冲。

汇编语言程序

ORG0000H

MOVTMOD,#02H

MOVTH0,#06H

MOVTL0,#06H

SETBTR0

MOVR0,#04H

NE:

JNBTF0,$

CLRTF0

CPL

DJNZR0,NE

CPL

AJMPNE

ORG0000H

MAIN:

MOVTMOD

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

当前位置:首页 > 高等教育 > 艺术

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

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