-
单片机原理、接口及应用——嵌入式系统技术基础
习题解答
预备篇
计算机的基础知识
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,
-
< br>128,
-
8,14717,31467,
-
27824,
-
1247
8
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
p>
单片机结构
1.1
单片微型计算机
(
< br>即单片机
)
是包含
CPU
、存储器和
I/O
接口的大规模集成芯片
p>
,
即它本身包含了除外部
设备以外构成微机
系统的各个部分
,
只需接外设即可构成独立的微机应用系统。微
机处理器仅为
CPU,CPU
是构不成独立的微机系统的。
p>
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
第<
/p>
2
章、
51
系列
单片机的指令系统
2.1
参见教材
2.1
节
2.2
因为
A
累加器自带零标志
,
因此若判断某
内部
RAM
单元的内容是否为零
,
p>
必须将其内容送到
A,JZ
指令
即可进行判断。
2.3
当
A=0
时
,
两条指令的地址虽然相同
,
但操作码不同
,MOVC
是寻址程序存储器
p>
,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,
且只有循环移位指令
,
为了使本单元的最高位移进下一单元的最低位
,
p>
必须用大循环移位指令移位
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
R
LC
A
M
OV
22H,A
M
OV
A,#0
RLC A
M
OV 23H,A
S
JMP
$$
第
3
章、
M
SC-51
单片机汇编语言程序设计
因为是多个单元操作
,
为方便修改地址使用间址操作。片外地址
用
DPTR
指示
,
只能用
MOVX
指令取数到
A,<
/p>
片内地址用
R0
或
R1
指示
,
只能用
< br>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
要注意两高字节相加应加低字节相
加时产生的进位
,
同时要考虑最高位的进位。
< br>
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
S
JMP $$
ADDC
A,R1
3.3
A
中放小于
14H(20)
的
数
,
平方表的一个数据占
2
个字节
,
可用
BCD
p>
码或二进制数存放
.(
如
< br>A
中
放的是
BCD
码
,
则要先化成二进制数再查表。
< br>)
ORG
0
INC
A
MOV
DPTR,#TAB
MOVC A,@A+DPTR
ADD
A,ACC
;A*2
MOV
R6,A
PUSH
ACC
S
JMP
$$
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 <
/p>
将待转换的数分离出高半字节并移到低
4
位
加
30H;
再将待转换的数分离出低半字节并
30H,
安
排好源地址和转换后数的地址指针
,
置好循环次数。<
/p>
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
$$
MOV
@R1,A
END
INC
R1
3.7
片内
RAM
< br>间址寄存器只能有
R0
和
R1<
/p>
两个
,
而正数、负数和零共需
3
个寄存器指示地址
,
这
时可
用堆栈指针指示第三个地址
,POP
和
PUSH
在指令可自动修改地址。
R0
指正数存放地址和
R1
指负数
p>
存放地址
,SP
指源数据存放的末地址
,POP
指令取源数据
< br>,
每取一个数地址减
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:
I
NC
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
;
p>
奇数个
1
转移
ORL A,#80H
;
偶数个
1
最高位加
“1”
EN:
SJMP
$$
3.9
取补不同于求补码
,
求补码应区别正、负数分别处理
,
而取补不分正、负
,
因正、负数均有相对
于模的补数。用取反加
1
< br>求补也可用模
(00H)
减该数的方法求补。
ORG
0000H
MOV
R7,#03H
AB:
INC
R0
MOV
R0,#DAT A
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
次进行除十六求平
均值的运算
,
商在
B
UF2
单元
,
余数在
< br>BUF2-1
单元。
ORG 0000H
A
DDC
A,#0
MOV
R7,#0FH
MOV
B,A
MOV
R0,#BUF1
DJNZ R7,NEXT
MOV
B,#0
;
以上完成求和
MOV
A,@R0
MOV
R6,#04H
MOV
R2,A
MOV
BUF2,A
NEXT:
M
OV
A,R2
MOV
BUF2-1,#0
I
NC
R0
NEX:
CLR
C
A
DD
A,@R0
MOV
A,B
M
OV
R2,A
RRC
A
M
OV
A,B
MOV
B,A
MOV
A,BUF2
MOV
BUF2-1,A
RRC
A
DJNZ
R6,NEX
MOV
BUF2,A
SJMP
$$
MOV
A,BUF2-1
;
以上完成除十六运算
RRC
A
3.11
将
20H
单元的内容分解为高
4<
/p>
位和低
4
位
,<
/p>
根据是否大于
9
分别作加
37H
和
30H
处理。
ORG
0000H
MOV
21H,A
MOV
A,20H
SJMP
$$
ANL
A,#0F0H
ASCII: CJNE
A,#0AH,NE
SWAP
A
NE:
JC
A30
ACALL
ASCII
MOV
22H,A
MOV
A,20H
A30:
ANL
A,#0FH
ACALL
ASCII
3.12
要注意
,
位的逻辑运算其中一个操作数必须在
C
。
ORG
0000H
MOV
C,20H
ANL
C,2FH
CPL
C
ORL
C,/2FH
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
ADD
A,#37H
RET
ADD
A,30H
RET
CPL
C
ANL
C,53H
MOV
P1.0,C
SJMP
$$
END
3.14
设一字节乘数存放在
p>
R1,
三字节的被乘数存放在
data
p>
开始的内部
RAM
单元
,
且低字节存放
在低位地址单元
,
R0
作为被乘数和积的地址指针
,
用<
/p>
MUL
指令完成一字节乘一字节
,
每一次部
分积的低位加上一次部分积的高位
,
其和的进位加在本次部分积的高位上
,
并暂存
,
三字节乘
一字节共需这样三次
乘、加、存操作
,
以
R7
作循环三次的计数寄存器。
ORG
0000H
MOV
R7,#03H
MOV
R0,#data
MOV
R2,#0
MOV
B,R1
MUL
AB
ADD
A,R2
MOV
@R0,A
MOV
A,#0
ADDC
A,B
MOV
R2,A
INC
R0
DJNZ
R7,NEXT
MOV
@R0,B
SJMP
$$
END
NEXT: MOV
A,@R0
第
4
章、并
行接口
P0-P3
和单片机的中断系统
4.1
~
4.3
参考教材
4
.1
节
4.4
用
P1.7
监测按键开关
,
P1.0
引脚输出正脉冲
,
< br>正脉冲的产生只需要将
P1.0
置零、置
1
、延
时、再置零即可。
P1
.0
接一示波器可观察波形。如果再接一发光二极管
,
可观察到发光二极管
的闪烁。电路设计可参考图
4.4
汇编语言程序
ORG
0000H
ABC
:
CLR
P1.0
SETB
P1.7
JB
P1.7,$$
;
未按键等待
SETB
P1.0
MOV
R2,#0
NOP
DJNZ
R2,DAY
SJMP
ABC
图
4.4
JNB
P1.7,$$
;
键未弹起等待
DAY: NOP
4.5
电路见图
4.5
,
< br>初始值送
0FH
到
P1,
p>
再和
0FFH
异或从
P1
口输出
,
或使用
SWAP
A
指令
,
然后
从
P1
口输出
p>
,
循环运行
,
要注
意输出后要延时。
汇编语言程序
ORG 0000H
MOV
A
,
#0FH
ABC
:
MOV P1
,
A
ACALL D05
SWAP A
SJMP ABC
D05
:
MOV R6
,
250
DY
:
MOV R7
,
250
DAY:
NOP
DJNZ R7,DAY
NOP
图
4.5
DJNZ R6,DY
RET
END
4.6
如使用共阴极数码管<
/p>
,
阴极接地
,
阳
极
a~g
分别接
P0
< br>~
P3
的某个口的
7
位
,
将
0
~
F
的段码列
成表
,
表的内容顺次从该口输出。如数码管接
P3
p>
口。
汇编语言程序
NEXT:
DAY:
ORG 0000H
MOV
DPTR
,
#TAB
MOV
A
,
R0
MOVC
A
,
@A+DPTR
MOV
P3,A
MOV R7,#0
NOP
TAB:
NOP
DJNZ R7,DAY
INC R0
CJNE R0,#10H,NEXT
SJMP
AGAIN
DB
3FH,06H…
;
段码表
(
略
)
END
AGAIN:
MOV
R0
,
#0
4.7
< br>电路设计见图
4.7
,
编程如下
:
ORG
0000H
MOV
A
,
#08H
MOV
DPTR
,
#TAB
MOV
P1,A
MOV
R2,#08H
MOVC
A
,
@A+DPTR
AGAIN: MOV
A,#01
NEXT:
MOV
P3,A
ACALL
DAY
RL
A
CJNE
A,#10H,NEXT
DJNZ
R2,AGAIN
SJMP
$$
图
4.7
END
TAB:
DB
3FH,06H·
·
·
4.8
P1
口的八根线接行线
,
输出行扫描信号
,
P3
口的八根线接列线
,
输入回馈信号。
见图
4.8
。
4.9
~
4.12
参见
4.2
节
4.13
电路设计见图
4.13
汇编语言程序
ORG 0000H
AJMP
MAIN
ORG
0003H
RL
A
;
中断服务
MOV
P1,A
RETI
图
4.8
MAIN: MOV
A,#0FEH
MOV
P1,A
;
第一灯亮
SETB
EA
SETB
EX0
SETB
IT0
SJMP
$$
汇编语言中只有一个中断源
,
不存在占用别的中断源
向量地址问题
,
程序顺序排下
< br>,
应注意程序的执行过
程。
C<
/p>
语言无循环移位指令移位后
,
后面补零<
/p>
,
因此
和
01<
/p>
相或。
4.14
略
4.15
图
4.13
ORG
0000H
AJMP
MAIN
ORG
0003H
;
中断服务
XRL
P1,#0FFH
DJNZ
R0,NE
CLR
EA
ORG
0030H
SETB
EX0
SETB
IT0
MOV
P1,#0FFH
MOV
R0,#0AH
SJMP
$$
;
等待中断
MAIN: SETB
EA
NE:
RETI
因一亮一灭为一次
,
所以共十次。
aa
EQU 08H
;
存储高四位的段码
bb EQU 09H
;
存储第四位的段码
i EQU 0AH
ORG
0000H
AJMP
MAIN
ORG
0013H
AJMP
INTR
MOV
DPTR,#Tab
CLR
A
MOVC
A,@A+DPTR
MOV
aa,A
MOV
bb,A
CLR
P3.0
CLR
P3.1
SETB
EA
SETB
EX0
SETB
IT0
SETB
P3.0
CLR
P3.1
MOV
P1,bb
ACALL
Delay
;
显示低位
;
延时
;
开中断
;a=b=Tab[0]
;
存储计数值
;
段码表略
DB
3FH,06H
……
4.16
两个数码管阳极经驱动
器接
P1
口
,
阴极分别接
P3.0
、
P3.1
。
CLR
P3.0
SETB
P3.1
MOV
P1,aa
ACALL
Delay
SJMP
LOOP
CLR
EX0
INC
i
MOV
A,i
ANL
A,#0FH
< br>;
取
i
的低位
< br>
MOV
DPTR,#Tab
MOVC
A,@A+DPTR
MOV
bb,A
;
查表
b=Tab[i
的低位
]
MOV
A,i
ANL
A,#0F0H
SWAP
A
;
取<
/p>
i
的高位
MOVC
A,@A+DPTR
MOV
aa,A
;
查表
a=Tab[i
的高位
]
SETB
EX0
RETI
;
略
END
;i
加一
;
显示高位
;
延时
Tab:
INTR:
MAIN:
LOOP:
Delay:
-
-
-
-
-
-
-
-
-
上一篇:2015工法关键技术鉴定资料范例
下一篇:专业英语资料(国际法)