单片机原理、接口及应用——嵌入式系统技术基础
习题解答
预备篇
计算机的基础知识
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 1025 1025H 01000205H 0.7 ASCII码表示的十六进制数分别为: 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.10 A=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.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: MOV A,#01H F590 LB: MOV P1,A 23 RL A B40AFA CJNE,#10,LB 80F6 SJMP LA
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)利用乘法指令 MOV B,#04H MUL AB 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 MOV A,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 CLR C
MOV A,20H
RLC A MOV 20H,A MOV A,21H RLC A MOV 21H,A MOV A,22H 3.1
RLC A MOV 22H,A MOV A,#0 RLC A
MOV 23H,A SJMP $
第3章、MSC-51单片机汇编语言程序设计
因为是多个单元操作,为方便修改地址使用间址操作。片外地址用DPTR指示,只能用MOVX指令取数到A,片内地址用R0或R1指示,只能用MOV指令操作,因此循环操作外部数据存贮器→A→ 内部部数据存贮器。
ORG 0000H INC DPTR
MOV DPTR,#1000H INC R0 MOV R0,#20H CJNE R0,#71H,LOOP LOOP: MOVX A,@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 MOVC A,@A+DPTR ADD A,ACC ;A*2 MOV R6,A PUSH ACC SJMP $ MOVC A,@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