资源描述
----------------------- Page 1-----------------------
单片机原理、接口及应用——嵌入式系统技术基础
习题解答
预备篇
计算机的基础知识
0.1 40H,62H,50H,64H,7DH,FFH
0.2 812,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 31303030H
1025 1025H 01000205H 31303235H
0.7 ASCII码表示的十六进制数分别为: 105H, 7CAH, 2000H,8A50H
基础篇
1 MCS-51
1 MCS-51
11 MMCCSS--5511
第 章、 单片机结构
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
----------------------- Page 2-----------------------
1.10 A=0,PSW=0,SP=07,P0~P3=FFH
2 51
2 51
第22章、5511系列单片机的指令系统
2.1 参见教材2.1节
2.2 因为A 累加器自带零标志,因此若判断某内部RAM 单元的内容是否为零,必须将其内容送到
A,JZ指令即可进行判断。
2.3 当A=0 时,两条指令的地址虽然相同,但操作码不同,MOVC 是寻址程序存储器,MOVX是寻址外
部数据存储器,送入A的是两个不同存储空间的内容。
2.4 目的操作数 源操作数
寄存器 直接
SP 间接寻址 直接
直接 直接
直接 立即
寄存器间址 直接
寄存器 变址
寄存器间址 寄存器
2.5 Cy=1,OV=0,A=94H
2.6 √ ×
√ ×
× ×
√ √
× √
× ×
× ×
× √
× ×
× ×
× ×
2.7 A=25H (50H)=0 (51H)=25H (52H)=70H
2.8 SP=(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 机器码 源程序
7401 LA: MOVA,#01H
F590 LB: MOVP1,A
23 RL A
B40AFA CJNE,#10,LB
80F6 SJMPLA
2.11 ANL A,#0FH
SWAP A
ANL P1,#0FH
ORL P1,A
SJMP$
2.12 MOV A,R0
XCH A,R1
MOV R0,A
SJMP $
2.13 (1)利用乘法指令
2
----------------------- Page 3-----------------------
MOV B,#04H
MULAB
SJMP$
(2) 利用位移指令
RL A MOV B,A
RL A MOV A,20H
MOV 20H,A ANL A,#0FCH
ANL A,#03H SJMP $
(3)用加法指令完成
ADD A,ACC MOV R1,A ;R1=4A
MOV R0,A ;R0=2A MOV A,B
MOV A,#0 ADDC A,B ;进位×2
ADDC A,#0 MOV B,A ;存积高位
MOV B,A ;B存2A的进位 MOV A,R1 ;存积低位
MOV A,R0 SJMP $
ADD A,ACC
2.14 XRL 40H,#3CH
SJMP $
2.15 MOV A,20H
ADD A,21H
DA A
MOV 22H,A ;存和低字节
MOV A,#0
ADDC A,#0
MOV 23H,A ;存进位
SJMP $
2.16 MOVA,R0
JZ ZE
MOV R1,#0FFH
SJMP $
ZE:MOV R1,#0
SJMP $
2.17 MOV A,50H
MOV B,51H
MUL AB
MOV 53H,B
MOV 52H,A
SJMP $
2.18 MOV R7,#0AH
WOP:XRL P1,#03H
DJNZ R7,WOP
SJMP $
2.19 单片机的移位指令只对A,且只有循环移位指令,为了使本单元的最高位移进下一单元的最低位,
必须用大循环移位指令移位4次。
ORG 0 MOVA,22H
CLR C RLC A
MOVA,20H MOV22H,A
RLCA MOVA,#0
MOV20H,A RLCA
MOVA,21H MOV23H,A
RLCA SJMP $
MOV21H,A
3
----------------------- Page 4-----------------------
3 MSC-51
3 MSC-51
第33章、MMSSCC--5511单片机汇编语言程序设计
3.1 因为是多个单元操作,为方便修改地址使用间址操作。片外地址用 DPTR 指示,只能用MOVX
指令取数到A,片内地址用R0或R1指示,只能用MOV指令操作,因此循环操作外部数据存贮器
→A→ 内部部数据存贮器。
ORG 0000H INC DPTR
MOV DPTR,#1000H INC R0
MOV R0,#20H CJNE R0,#71H,LOOP
LOOP: MOVXA,@DPTR SJMP $
MOV@R0,A
3.2 要注意两高字节相加应加低字节相加时产生的进位,同时要考虑最高位的进位。
ORG 0 MOV 51H,A
MOV A,R0 MOV A,#0
ADD A,R6 ADDC A,ACC
MOV 50H,A MOV 52H,A
MOV A,R7 SJMP$
ADDC A,R1
3.3 A中放小于14H(20)的数,平方表的一个数据占2个字节,可用BCD码或二进制数存放.(如A中放
的是BCD码,则要先化成二进制数再查表。)
ORG 0 INC A
MOV DPTR,#TAB MOVCA,@A+DPTR
ADD A,ACC ;A*2 MOV R6,A
PUSH ACC SJMP $
MOVCA,@A+DPTR TAB:DB 00,00,00,01,00,04,00,09,00,16H,……
MOV R7,A DB ……… 04H,00
POP ACC
3.4 先用异或指令判两数是否同号,在同号中判大小,异号中正数为大.
ORG 0 BG: MOV 22H,21H
MOV A,20H SJMP $
XRL A,21H CMP:MOV A,20H
ANL A,#80H CJNE A,21H,GR
JZ CMP GR: JNC AG
JB 20H.7,BG MOV 22H,21H
AG:MOV 22H,20H SJMP $
SJMP $
3.5 fosc=6MHZ
机器周期数
DELAY: MOV R1,#0F8H 1
LOOP: MOV R3,#0FAH 1
DJNZ R3,$ 2
DJNZ R1,LOOP 2
RET 2
(1+(1+2*0xFA+2)*0xF8+2)*12/6MHz
= (1+(1+2*250+2)*248+2)*2us
= 249.494ms
3.6 将待转换的数分离出高半字节并移到低 4位 加30H;再将待转换的数分离出低半字节并 30H,安
排好源地址和转换后数的地址指针,置好循环次数。
ORG 0000H MOV A,@R0
MOV R7,#05H ANL A, #0FH
MOV R0,#20H ADD A,#30H
MOV R1,#25H MOV @R1,A
NET: MOV A,@R0 INC R0
ANL A,#0F0H INC R1
SWAP A DJNZ R7,NE
ADD A,#30H SJMP $
4
----------------------- Page 5-----------------------
MOV @R1,A END
INC R1
3.7 片内RAM 间址寄存器只能有R0和R1两个,而正数、负数和零共需3个寄存器指示地址,这时可
用堆栈指针指示第三个地址,POP和PUSH在指令可自动修改地址。R0指正数存放地址和R1指负数
存放地址 ,SP指源数据存放的末地址,POP指令取源数据,每取一个数地址减1。
ORG 0000H
MOV R7,#10H
MOV A,#0 MOV @R0,A
MOV R4,A INC R0
MOV R5,A AJMP DJ
MOV R6,A NE: INC R5
MOV R0,#40H MOV @R1,A
MOV R1,#50H INC R1
MOV SP,#3FH AJMP DJ
NEXT: POP ACC ZER0:INC R6
JZ ZER0 DJ: DJNZ R7,NEXT
JB ACC.7,NE SJMP $
INC R4 END
3.8 可直接用P标志判断(JB P,ret)
ORG 0000H
MOV A,40H
JB P,EN ;奇数个1转移
ORLA,#80H ;偶数个1 最高位加“1”
EN: SJMP $
3.9 取补不同于求补码,求补码应区别正、负数分别处理,而取补不分正、负,因正、负数均有相对于
模的补数。用取反加1求补也可用模(00H)减该数的方法求补。
ORG 0000H
MOV R7,#03H AB: INC R0
MOV R0,#DATA MOV A,@R0
MOV A,@R0 CPL A
CPL A ADDC A,#0
ADD A,#01 DJNZ R7,AB
MOV @R0,A SJMP $
3.10 16个单字节累加应用ADD指令而不能用ADDC指令,和的低位存A,当和超过一个字节,和的高
字节存于B,并要加进低位相加时产生的进位,16个单字节加完后,采用右移4次进行除十六求平
均值的运算,商在BUF2单元,余数在BUF2-1单元。
ORG 0000H MOV R6,#04H
MOV R7,#0FH MOV BUF2,A
MOV R0,#BUF1 MOV BUF2-1,#0
MOV B,#0 NEX: CLR C
MOV A,@R0 MOV A,B
MOV R2,A RRC A
NEXT:MOV A,R2 MOV B,A
INC R0 MOV A,BUF2
ADD A,@R0 RRC A
MOV R2,A MOV BUF2,A
MOV A,B MOV A,BUF2-1
ADDC A,#0 RRC A
MOV B,A MOV BUF2-1,A
DJNZR7,NEXT DJNZ R6,NEX
;以上完成求和 SJMP $
;以上完成除十六运算
3.11 将20H单元的内容分解为高4位和低4位,根据是否大于9分别作加37H和30H处理。
ORG 0000H MOV A,20H
5
----------------------- Page 6-----------------------
ANL A,#0F0H SJMP $
SWAP A ASCII:CJNE A,#0AH,NE
ACALL ASCII NE: JC A30
MOV 22H,A ADD A,#37H
MOV A,20H RET
ANL A,#0FH A30: ADD A,30H
ACALL ASCII RET
MOV 21H,A
3.12 要注意,位的逻辑运算其中一个操作数必须在C。
ORG 0000H CPL C
MOV C,20H ANL C,53H
ANL C,2FH MOV P1.0,C
CPL C SJMP $
ORL C,/2FH END
3.13
ORG 0000H
MOV C,ACC.3
ANL C,P1.4
ANL C,/ACC.5
MOV 20H,C
MOV C,B.4
CPL C
ANL C,/P1.5
ORL C,20H
MOV P1.2,C
SJMP $
END
6
----------------------- Page 7-----------------------
3.14 设一字节乘数存放在R1,三字节的被乘数存放在data 开始的内部RAM 单元,且低字节存放
在低位地址单元,R0作为被乘数和积的地址指针,用MUL指令完成一字节乘一字节,每一次部
分积的低位加上一次部分积的高位,其和的进位加在本次部分积的高位上,并暂存,三字节乘
一字节共需这样三次乘、加、存操作,以R7作循环三次的计数寄存器。
ORG 0000H
MOV R7,#03H MOV A,#0
MOV R0,#data ADDC A,B
MOV R2,#0 MOV R2,A
NEXT: MOV A,@R0 INC R0
MOV B,R1 DJNZ R7,NEXT
MUL AB MOV @R0,B
ADD A,R2 SJMP $
MOV @R0,A END
第4章、并行接口P0-P3和单片机的中断系统
4.1~4.3 参考教材4.1节
4.4 用P1.7监测按键开关,P1.0引脚输出正脉冲,正脉冲的产生只需要将P1.0置零、置1、延时、
再置零即可。P1.0接一示波器可观察波形。如果再接一发光二极管,可观察到发光二极管的闪烁。
电路设计可参考图4.4
汇编语言程序
ORG 0000H
ABC:CLR P1.0
SETB P1.7
JB P1.7,$ ;未按键等待
JNB P1.7,$ ;键未弹起等待
SETB P1.0
MOV R2,#0
DAY: NOP
NOP
DJNZ R2,DAY 图4.4
SJMP ABC
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
7
----------------------- Page 8-----------------------
NOP
DJNZR7,DAY
DJNZR6,DY
RET
END
4.6 如使用共阴极数码管,阴极接地,阳极a~g分别接P0~P3的某个口的7位,将0~F的段码列
成表,表的内容顺次从该口输出。如数码管接P3口。
汇编语言程序
ORG 0000H NOP
MOVDPTR,#TAB DJNZR7,DAY
AGAIN: MOVR0,#0 INCR0
NEXT: MOVA,R0 CJNER0,#10H,NEXT
MOVCA,@A+DPTR SJMP AGAIN
MOVP3,A TAB: DB 3FH,06H… ;段码表(略)
MOVR7,#0 END
DAY: NOP
4.7电路设计见图4.7,
编程如下:
ORG 0000H
MOV A,#08H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
MOV R2,#08H
AGA
展开阅读全文