单片机原理接口及应用李群芳版习题解答参考Word文档格式.docx
- 文档编号:21196313
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:38
- 大小:171.22KB
单片机原理接口及应用李群芳版习题解答参考Word文档格式.docx
《单片机原理接口及应用李群芳版习题解答参考Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机原理接口及应用李群芳版习题解答参考Word文档格式.docx(38页珍藏版)》请在冰豆网上搜索。
373634H
1000
1000H
01000000H
31303030H
1025
1025H
01000205H
31303235H
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
2.13
(1)利用乘法指令
MOVB,#04H
MULAB
(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
存积高位
MOVA,R1;
存积低位
2.14XRL40H,#3CH
SJMP$
2.15MOVA,20H
ADDA,21H
DAA
MOV22H,A;
存和低字节
ADDCA,#0
MOV23H,A;
存进位
2.16MOVA,R0
JZZE
MOVR1,#0FFH
ZE:
MOVR1,#0
2.17MOVA,50H
MOVB,51H
MULAB
MOV53H,B
MOV52H,A
2.18MOVR7,#0AH
WOP:
XRLP1,#03H
DJNZR7,WOP
2.19单片机的移位指令只对A,且只有循环移位指令,为了使本单元的最高位移进下一单元的最低位,必须用大循环移位指令移位4次。
ORG0
CLRC
MOVA,20H
RLCA
MOVA,21H
RLCA
MOV21H,A
MOVA,22H
MOV22H,A
MOV23H,A
第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
3.2要注意两高字节相加应加低字节相加时产生的进位,同时要考虑最高位的进位。
ADDA,R6
MOV50H,A
MOVA,R7
ADDCA,R1
MOV51H,A
ADDCA,ACC
3.3A中放小于14H(20)的数,平方表的一个数据占2个字节,可用BCD码或二进制数存放.(如A中放的是BCD码,则要先化成二进制数再查表。
)
MOVDPTR,#TAB
ADDA,ACC;
A*2
PUSHACC
MOVCA,@A+DPTR
MOVR7,A
POPACC
INCA
MOVCA,@A+DPTR
MOVR6,A
TAB:
DB00,00,00,01,00,04,00,09,00,16H,……
DB………04H,00
3.4先用异或指令判两数是否同号,在同号中判大小,异号中正数为大.
ORG0
XRLA,21H
ANLA,#80H
JZCMP
JB20H.7,BG
AG:
MOV22H,20H
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:
3.9取补不同于求补码,求补码应区别正、负数分别处理,而取补不分正、负,因正、负数均有相对于模的补数。
用取反加1求补也可用模(00H)减该数的方法求补。
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单元。
MOVR7,#0FH
MOVR0,#BUF1
MOVB,#0
MOVA,@R0
MOVR2,A
NEXT:
MOVA,R2
ADDA,@R0
MOVR2,A
MOVA,B
ADDCA,#0
MOVB,A
DJNZR7,NEXT
;
以上完成求和
MOVR6,#04H
MOVBUF2,A
MOVBUF2-1,#0
NEX:
MOVA,B
RRCA
MOVA,BUF2
RRCA
MOVA,BUF2-1
MOVBUF2-1,A
DJNZR6,NEX
SJMP$
以上完成除十六运算
3.11将20H单元的内容分解为高4位和低4位,根据是否大于9分别作加37H和30H处理。
MOVA,20H
ANLA,#0F0H
SWAPA
ACALLASCII
MOV22H,A
MOVA,20H
ANLA,#0FH
MOV21H,A
SJMP$
ASCII:
CJNEA,#0AH,NE
NE:
JCA30
ADDA,#37H
RET
A30:
ADDA,30H
3.12要注意,位的逻辑运算其中一个操作数必须在C。
MOVC,20H
ANLC,2FH
CPLC
ORLC,/2FH
ANLC,53H
MOVP1.0,C
END
3.13
MOVC,ACC.3
ANLC,P1.4
ANLC,/ACC.5
MOV20H,C
MOVC,B.4
ANLC,/P1.5
ORLC,20H
MOVP1.2,C
3.14设一字节乘数存放在R1,三字节的被乘数存放在data开始的内部RAM单元,且低字节存放在低位地址单元,R0作为被乘数和积的地址指针,用MUL指令完成一字节乘一字节,每一次部分积的低位加上一次部分积的高位,其和的进位加在本次部分积的高位上,并暂存,三字节乘一字节共需这样三次乘、加、存操作,以R7作循环三次的计数寄存器。
MOVR7,#03HMOVA,#0
MOVR0,#dataADDCA,B
MOVR2,#0MOVR2,A
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
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口。
汇编语言程序
AGAIN:
MOVR0,#0
MOVA,R0
MOVCA,@A+DPTR
MOVP3,A
MOVR7,#0
CJNER0,#10H,NEXT
SJMPAGAIN
TAB:
DB3FH,06H…;
段码表(略)
END
4.7电路设计见图4.7,编程如下:
MOVA,#08H
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP1,A
MOVR2,#08H
AGAIN:
MOVA,#01
MOVP3,A
ACALLDAY
RLA
CJNEA,#10H,NEXT
DJNZR2,AGAIN
DB3FH,06H·
·
图4.7
4.8
P1口的八根线接行线,输出行扫描信号,
P3口的八根线接列线,输入回馈信号。
见图4.8。
4.9~4.12参见4.2节
4.13电路设计见图4.13
AJMPMAIN
ORG0003H
RLA;
中断服务
RETI图4.8
MAIN:
MOVA,#0FEH
MOVP1,A;
第一灯亮
SETBEA
SETBEX0
SETBIT0
汇编语言中只有一个中断源,不存在占用别的中断源向量地址问题,程序顺序排下,应注意程序的执行过程。
C语言无循环移位指令移位后,后面补零,因此和01相或。
4.14略
4.15图4.13
AJMPMAIN
ORG0003H;
XRLP1,#0FFH
DJNZR0,NE
CLREA
NE:
RETI
ORG0030H
SETBEA
SETBIT0
MOVP1,#0FFH
MOVR0,#0AH
SJMP$;
等待中断
因一亮一灭为一次,所以共十次。
4.16两个数码管阳极经驱动器接P1口,阴极分别接P3.0、P3.1。
aaEQU08H;
存储高四位的段码
bbEQU09H;
存储第四位的段码
iEQU0AH;
存储计数值
Tab:
DB3FH,06H……;
段码表略
AJMPMAIN
ORG0013H
AJMPINTR
MAIN:
MOVDPTR,#Tab
CLRA
MOVaa,A
MOVbb,A;
a=b=Tab[0]
CLRP3.0
CLRP3.1
SETBEA
SETBIT0;
开中断
SETBP3.0
MOVP1,bb;
显示低位
ACALLDelay;
延时
SETBP3.1
MOVP1,aa;
显示高位
SJMPLOOP
INTR:
CLREX0
INCi;
i加一
MOVA,i
ANLA,#0FH;
取i的低位
MOVDPTR,#Tab
MOVbb,A;
查表b=Tab[i的低位]
ANLA,#0F0H
SWAPA;
取i的高位
MOVaa,A;
查表a=Tab[i的高位]
RETI
Delay:
;
略
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
JNBTF0,$
CLRTF0
CPLP1.0
中断方式:
ORG0000BH
MOVTMOD,#06H
MOVTH0,#0F6H
SETBEA
SETBET0
等待中断
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
汇编语言程序
MOVTMOD,#02H
MOVTH0,#51H
MOVTL0,#51H
CLRP1.2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 接口 应用 李群 习题 解答 参考
![提示](https://static.bdocx.com/images/bang_tan.gif)