单片机原理接口及应用李群芳版习题解答参考.docx
- 文档编号:28683882
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:41
- 大小:101.71KB
单片机原理接口及应用李群芳版习题解答参考.docx
《单片机原理接口及应用李群芳版习题解答参考.docx》由会员分享,可在线阅读,更多相关《单片机原理接口及应用李群芳版习题解答参考.docx(41页珍藏版)》请在冰豆网上搜索。
单片机原理接口及应用李群芳版习题解答参考
单片机原理、接口及应用——嵌入式系统技术基础
习题解答
预备篇
计算机的基础知识
0.140H,62H,50H,64H,7DH,FFH
0.2812,104,213,256,2936,941
0.3
十进制数
原码
补码
十进制数
原码
补码
28
1CH
1CH
250
FAH
FAH
-28
9CH
E4H
-347
815BH
FEA5H
100
64H
64H
928
03A0H
03A0H
-130
8082H
FF7EH
-928
83A0H
FC60H
0.4机器数真值分别为:
27,233,-128,-8,14717,31467,-27824,-12478
0.5
(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。
0.6
十进制数
压缩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
0.7ASCII码表示的十六进制数分别为:
105H,7CAH,2000H,8A50H
基础篇
第1章、MCS-51单片机结构
1.1单片微型计算机(即单片机)是包含CPU、存储器和I/O接口的大规模集成芯片,即它本身包含了除外部设备以外构成微机系统的各个部分,只需接外设即可构成独立的微机应用系统。
微机处理器仅为CPU,CPU是构不成独立的微机系统的。
1.2参见教材1.1.1节
1.3参见教材第6页表格
1.4参见教材表1.4
1.5参见教材表1.1和表1.2
1.6当PSW=10H表明选中的为第二组通用寄器R0~R7的地址为10H~17H
1.7程序存储器和数据存储器尽管地址相同,但在数据操作时,所使用的指令不同,选通信号也不同,因此不会发生错误。
1.8内部数据程序外部数据程序
1.9振荡周期=0.1667μs机器周期=2μs指令周期=2~8μs
1.10A=0,PSW=0,SP=07,P0~P3=FFH
第2章、51系列单片机的指令系统
2.1参见教材2.1节
2.2因为A累加器自带零标志,因此若判断某内部RAM单元的内容是否为零,必须将其内容送到A,JZ指令即可进行判断。
2.3当A=0时,两条指令的地址虽然相同,但操作码不同,MOVC是寻址程序存储器,MOVX是寻址外部数据存储器,送入A的是两个不同存储空间的内容。
2.4目的操作数源操作数
寄存器直接
SP间接寻址直接
直接直接
直接立即
寄存器间址直接
寄存器变址
寄存器间址寄存器
2.5Cy=1,OV=0,A=94H
2.6√×
√×
××
√√
×√
××
××
×√
××
××
××
2.7A=25H(50H)=0(51H)=25H(52H)=70H
2.8SP=(61H)(SP)=(24H)
SP=(62H)(SP)=(10H)
SP=(61H)DPL=(10H)
SP=(60H)DPH=(24H)
执行结果将0送外部数据存储器的2410单元
2.9程序运行后内部RAM(20H)=B4H,A=90H
2.10机器码源程序
7401LA:
MOVA,#01H
F590LB:
MOVP1,A
23RLA
B40AFACJNE,#10,LB
80F6SJMPLA
2.11ANLA,#0FH
SWAPA
ANLP1,#0FH
ORLP1,A
SJMP$
2.12MOVA,R0
XCHA,R1
MOVR0,A
SJMP$
2.13
(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$
2.14XRL40H,#3CH
SJMP$
2.15MOVA,20H
ADDA,21H
DAA
MOV22H,A;存和低字节
MOVA,#0
ADDCA,#0
MOV23H,A;存进位
SJMP$
2.16MOVA,R0
JZZE
MOVR1,#0FFH
SJMP$
ZE:
MOVR1,#0
SJMP$
2.17MOVA,50H
MOVB,51H
MULAB
MOV53H,B
MOV52H,A
SJMP$
2.18MOVR7,#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$
3.2要注意两高字节相加应加低字节相加时产生的进位,同时要考虑最高位的进位。
ORG0
MOVA,R0
ADDA,R6
MOV50H,A
MOVA,R7
ADDCA,R1
MOV51H,A
MOVA,#0
ADDCA,ACC
MOV52H,A
SJMP$
3.3A中放小于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
3.4先用异或指令判两数是否同号,在同号中判大小,异号中正数为大.
ORG0
MOVA,20H
XRLA,21H
ANLA,#80H
JZCMP
JB20H.7,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
=249.494ms
3.6将待转换的数分离出高半字节并移到低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
3.7片内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
JBACC.7,NESJMP$
INCR4END
3.8可直接用P标志判断(JBP,ret)
ORG0000H
MOVA,40H
JBP,EN;奇数个1转移
ORLA,#80H;偶数个1最高位加“1”
EN:
SJMP$
3.9取补不同于求补码,求补码应区别正、负数分别处理,而取补不分正、负,因正、负数均有相对于模的补数。
用取反加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$
;以上完成除十六运算
3.11将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
3.12要注意,位的逻辑运算其中一个操作数必须在C。
ORG0000H
MOVC,20H
ANLC,2FH
CPLC
ORLC,/2FH
CPLC
ANLC,53H
MOVP1.0,C
SJMP$
END
3.13
ORG0000H
MOVC,ACC.3
ANLC,P1.4
ANLC,/ACC.5
MOV20H,C
MOVC,B.4
CPLC
ANLC,/P1.5
ORLC,20H
MOVP1.2,C
SJMP$
END
3.14设一字节乘数存放在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和单片机的中断系统
4.1~4.3参考教材4.1节
4.4用P1.7监测按键开关,P1.0引脚输出正脉冲,正脉冲的产生只需要将P1.0置零、置1、延时、再置零即可。
P1.0接一示波器可观察波形。
如果再接一发光二极管,可观察到发光二极管的闪烁。
电路设计可参考图4.4
汇编语言程序
ORG0000H
ABC:
CLRP1.0
SETBP1.7
JBP1.7,$;未按键等待
JNBP1.7,$;键未弹起等待
SETBP1.0
MOVR2,#0
DAY:
NOP
NOP
DJNZR2,DAY图4.4
SJMPABC
4.5电路见图4.5,初始值送0FH到P1,再和0FFH异或从P1口输出,或使用SWAPA指令,然后从P1口输出,循环运行,要注意输出后要延时。
汇编语言程序
ORG0000H
MOVA,#0FH
ABC:
MOVP1,A
ACALLD05
SWAPA
SJMPABC
D05:
MOVR6,250
DY:
MOVR7,250
DAY:
NOP图4.5
NOP
DJNZR7,DAY
DJNZR6,DY
RET
END
4.6如使用共阴极数码管,阴极接地,阳极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
4.7电路设计见图4.7,编程如下:
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···
图4.7
END
4.8
P1口的八根线接行线,输出行扫描信号,
P3口的八根线接列线,输入回馈信号。
见图4.8。
4.9~4.12参见4.2节
4.13电路设计见图4.13
汇编语言程序
ORG0000H
AJMPMAIN
ORG0003H
RLA;中断服务
MOVP1,A
RETI图4.8
MAIN:
MOVA,#0FEH
MOVP1,A;第一灯亮
SETBEA
SETBEX0
SETBIT0
SJMP$
汇编语言中只有一个中断源,不存在占用别的中断源向量地址问题,程序顺序排下,应注意程序的执行过程。
C语言无循环移位指令移位后,后面补零,因此和01相或。
4.14略
4.15图4.13
ORG0000H
AJMPMAIN
ORG0003H;中断服务
XRLP1,#0FFH
DJNZR0,NE
CLREA
NE:
RETI
ORG0030H
MAIN:
SETBEA
SETBEX0
SETBIT0
MOVP1,#0FFH
MOVR0,#0AH
SJMP$;等待中断
因一亮一灭为一次,所以共十次。
4.16两个数码管阳极经驱动器接P1口,阴极分别接P3.0、P3.1。
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]
CLRP3.0
CLRP3.1
SETBEA
SETBEX0
SETBIT0;开中断
LOOP:
SETBP3.0
CLRP3.1
MOVP1,bb;显示低位
ACALLDelay;延时
CLRP3.0
SETBP3.1
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
4.17提示:
将X1至X3分别接至一个三输入或非门的三个输入端,同时还分别接至单片机的三个IO口,或非门的输出端接至单片机的外部中断引脚。
中断服务程序中检查三个IO口的值,便可知道具体的故障源。
程序略。
第五章、单片机的定时/计数器与串行接口
5.1~5.3请参考教材
5.4方式0:
16.38ms方式1:
131ms方式2:
512μs
5.5使用方式2计数初值C=100H-0AH=F6H
查询方式:
ORG0000H
MOVTMOD,#06H
MOVTH0,#0F6H
MOVTL0,#0F6H
SETBTR0
ABC:
JNBTF0,$
CLRTF0
CPLP1.0
SJMPABC
中断方式:
ORG0000H
AJMPMAIN
ORG0000BH
CPLP1.0
RETI
MAIN:
MOVTMOD,#06H
MOVTH0,#0F6H
SETBEA
SETBET0
SETBTR0
SJMP$;等待中断
5.61000HZ的周期为1ms,即要求每500μsP1.0变反一次,使用方式T1方式1,MC=12/fosc=1μs,C=216-500μs/1μs=FE0CH,除TMOD=10H,TH0=FEH,TL0=0CH外,程序与5.5题相同,注意每次要重置TH0和TL0
5.7f=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
CLRP1.2
SETBTR0
AB1:
JBCTF0,EXT
SJMPAB1
EXT:
SETBP1.2
MOVTH0,#0E7H
MOVTL0,#0E7H
AB2:
JBCTF0,NEXT
SJMPAB2
上述的计数初值没有考虑指令的执行时间,因此误差较大,查每条指令的机器周期,扣除这些时间,算得C=E3H,这样误差较小。
5.8P1.0输出2ms脉冲,P1.0输出50μs脉冲。
汇编语言程序
ORG0000H
MOVTMOD,#02H
MOVTH0,#06H
MOVTL0,#06H
SETBTR0
MOVR0,#04H
NE:
JNBTF0,$
CLRTF0
CPLP1.1
DJNZR0,NE
CPLP1.0
AJMPNE
5.9
ORG0000H
MAIN:
MOVTMOD,#15H
LOOP:
LCALLCounter
LCALLTimer
SJMPLOOP
Counter:
MOVTH0,#0FDH
MOVTL0,#18H
SETBTR0
CLRTR1
JNBTF0,$
CLRTF0
RET
Timer:
MOVTH1,#0F9H
MOVTL1,#30H
SETBTR1
CLRTR0
JBTF1,$
CLRTF1
RET
END
5.10略
5.11
5.12方式3为每桢11位数据格式
3600*11/60=660(波特)
5.13T1的方式2模式不需要重装时间常数(计数初值),不影响CPU执行通信程序.
设波特率为fbaut计数初值为x,
依据公式fbaut=2somd/32*(fosc/12(256-x))求得x=256-((2SMOD/32)*(fosc/fbaut))
5.14最低波特率为T1定时最大值时,此时计数初值为256,并且SOMD=0,fbaut=(1/32)*(fosc/(12(256-0))=61
最高波特率为T1定时最小值
(1)且SOMD=1时
fbaut=(2/32)*fosc/(12(256-1))=31250
5.15取SMOD=1计算TH1=TL1=B2
发送
ORG0000H
MOVTMOD,#20H
MOVTH1,#0B2H
MOVTL1,#0B2H
SETBTR1
MOVSCON,#40H
MOVA,#0
NEXT:
MOVSBUF,A
TES:
JBCT1,ADD1
SJMPTES
ADD1:
INCA
CJNEA,#20H,NEXT
SJMP$
END
接收
ORG0000H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 接口 应用 李群 习题 解答 参考