北工大单片机期末复习题A4一纸开概要
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第10章串行接口技术
1. 8051有一个全双工的串行口,下列功能中该串行口不能完成的是(
D )。
(A )网络通信;(B )异步串行通信;(C )作为同步移位寄存器; (D )位地址寄存器。
2. 判断下列说法是否正确:
答:(A )串行口通讯的第 9数据位的功能可由用户定义。
(对)
(B ) 发送数据的第9数据位的内容在 SCON 寄存器的TB8位中预先准备好的。
(对) (C ) 串行通讯帧发送时,指令把 TB8位的状态送入发送 SBUF 中。
(错) (D ) 串行通讯接收到的第 9位数据送SCON 寄存器的RB8中保存。
(对)
(E ) 串行口方式1的波特率是可变的,通过定时器 /计数器T1的溢出率设定。
(对) 3•串行口有几种工作方式?有几种帧格式?各种工作方式的波特率如何确定?
答:串行口有3种工作方式:方式 0、方式1、方式2、方式3;有3种帧格式:方式0为8 位数据,方式1为8位数据、起始位、终止位,方式2和3具有相同的帧格式,为9位数据、 起始位、终止位;方式 0的发送和接收都以 fosc/12为固定波特率,方式 2的波特率
=2A SMOD/64 X fosc ,方式1和方式3的波特率=2A SMOD/32 X 定时器 T1的溢出率,T1的溢 出率=(256-X ) *12/fosc
4•为什么定时器/计数器T1用做串行口波特率发生器时,采用方式 2?若已知时钟频率、 通讯波特率,如何计算其初值?
答:因为定时器/计数器在方式2下,初值可以自动重装,这样在做串口波特率发生器设置 时,就避免了重装参数的操作。
5.为什么MCS-51串行口的方式0帧格式没有起始位(0)和停止位(1) ?
答:因为串行口的方式 0是同步移位寄存器方式, 不是用于异步串行通讯的, 所以收发双方 6•常用波特率及其参数选择 Fosc (MHZ ) SMOD TH1初值
19200 11.0592
1 FDH 9600 0 FDH 4800
0 FAH 2400
0 F4H 1200
E8H
例题7•单片机主频6MHz ,波特率4800bps 要把发送端的30H —3FH 发送到接收 端的40H —4FH 。
写出初始化程序,接发程序,并写出设计过程: 方式 1,3 X=256-Fosc*(SMOD+1)/(384* 波特率)
=256-6M*1/(384*4800)=251.6= FCH
已知时饕频率、通认披特駆 杈据么武’
定时器1在工作方式2时的初始值为
X=256-[ ( SMOD+1 ) / (384* 波特率) ]*fosc
不需要确定数据帧的起始和终止,所以没有起始位( 0)和停止位(1)。
发送端: ORG 0000H AJMP MAIN_A ORG 0023H AJMP SEND ORG 0100H
MAIN_A:MOV
TMOD,#20H
MOV TH1 , #0FCH MOV TL1 , #0FCH
SETB TR1
MOV SCON,#0C0H 设置串口工作方式3 MOV PCON,#00H 波特率不加倍 MOV R0, #30H MOV R2,#10H SETB EA SETB ES MOV A,@R0 MOV C,P MOV TB8, C 奇偶校验
MOV SBUF,A SJMP $
ORG 0200H SEND:CLR TI
DJNZ R2, SEND1 SJMP FH
SEND1: INC R0 MOV A,@R0 MOV C,P MOV TB8, C
llx(156-X)
计算出初值.
>1
1
>1
1
P0
ALE
8031
INT1 WR
P2.0 RD
74LS373
G
CLK D0~D7
EOC
A
B C
Vref( + ) Vref(—)
ADC0809
ST
ALE OE
A0~A7
-
A2
A0 A1 + 5 V
GND
0 1234 567 NNNNNNNN
例题2.若要求设计一数据采集系统,输入为 0-5V ,由IN1输入,使用AD0809芯 片每隔
20ms 采集一次,共采集16次,并将转换后的数据存入30H 开始的单元 中。
(1) 设计有关电路图,含A/D,译码及相关电路,接线清楚,写明信号名称; (2) 编制有关程序,设AD 起始口地址为学号最后2位X8,地址译码使用A9-A3 系统
时钟为12MHZ 提示:使用定时器定时中断,并写明定时器参数计算 过程;
MOV SBUF,A FH: RETI END
接受端: ORG 0000H AJMP MAIN_B MOV TH1,#0FCH MOV TL1,#0FCH
SETB TR1
MOV SCON,#0C0H MOV PCON,#00H MOV R0, #40H MOV R2,#10H SETB REN SETB EA SETB ES
JNB RB8,ERR
SJMP RIGHT PZ:JB RB8,ERR
RIGHT:MOV@R0,A INC R0
DJNZ R2,FH CLR F0
FH: RETI ORG 0023H AJMP RECV ORG 0100H MAIN_B:MOV TMOD,#20H
ORG 0200H
RECV:CLR RI MOV A,SBUF
JNB PSW.0,PZ
ERR:CLR REN CLR ES CLR EA SETB F0 RETI END
第9章D/A 转换和A/D 转换
例题1.用DAC0832作为波形发生器,请编制出连续梯形的程序, 设0832的口地址为C004H.
ORG O100H MAIN:
MOV DPTR , #0C004 CLR A
LOOP1:MOVX,@DPTR,A LCALL DELAY INC A
CJNE A, #OF FH, LOOP1;
MOV R2,#00H
LOOP2:MOVX,@DPTR,A LCALL DELAY
INC R2
CJNE R2, #OFFH,LOOP2; LOOP3:MOVX,@DPTR,A LCALL DELAY DEC A
CJNE A,#00 H, LOOP3; MOV R2,#00H
LOOP4:MOVX,@DPTR,A LCALL DELAY INC R2
CJNE R2, #OFFH, LOOP4
SJMP LOOP1
DELAY:MOV R3, #XX1 DEL1: MOV R4, #XX2 DEL2: MOV R5, #XX3 DEL3: DJNZ R5, DEL3 DJNZ R4, DEL2 DJNZ R3, DEL1 RET END
SJMP $
1
修改上图中的p2.0用A3到A9译码,产生地址:24x8, 24=0011000 A3-A5接ABC A9-A6产生0011逻辑选中译码器。
x=216- t X osc/12=2A16-20X12X1000/12=45536=B1E0H
ORG 0000H AJMP MAIN
ORG 001BH AJMP T_1 MAIN:
MOV R4, #10H MOV R1, #30H MOV SP, #60H MOV TOMD, #10H MOV TH1, #0B1H MOV TL1, #0E0H 20ms定时
SETB EA SETB ET1开中断允许
SETB TR1
MOV DPTR, #XX+1
MOV A, #00H
MOVX @DPTR, A启动
转换
SJMP $
T_1: DJNZ R4 LP1
SJMP EXIT
LP1: CLR TR1
MOV DPTR, #XX+1
MOVX A, @DPTR
MOV @R1, A
INC R1
MOV TH1, #0B1H
MOV TL1, #0E0H
SETBTR1;启动20ms定
时
SJMP OUT_1
EXIT:CLR EA^中断允许
OUT_1 :。
RETI
END
第8章LED显示器和键盘
键盘的按键按MX N行列矩阵排列,故亦N 个键的键盘只需要M+N条单片机的I/O端口线。
4 X 8行列式非编码键盘的接口如下页所
示:
监视键盘方法一一行扫描法和反转法
CPU通过程序监视非编码盘,在发现有按键按下时转入相应按键处理程序执行。
地址偏移量N =行首值+列值,查键值表就可得被按键的键值
1. 行扫描法
1)判断有无按键
令列输出(PA 口)全为零,读行值(PC 口),若行值低4位为全1,无按键。
否则有按键。
2)判断哪一个键按下
轮流扫描PA 口,依次使每条列线变为低电平后,读行值,若非全1,则按键在此列中,形成键值;否则扫描下一列。
由此,可确定按键的行首键号和列值,进而求得键值偏移量。
按键类型判别:
若被按键的键值<10H,被按键为数字键;2. 反转法
1)设定PA为输出方式,PC为输入方式。
2)使PA输出全0,读PG (PC=1101)
3)设定PA为输入方式,PC为输出方式
4)将刚才读入的PC内容从PC输出。
(PC=1101)
5 )读PA。
(PA=11111011)
6)由PA PC得到键值。
数码段与控制端口的対t应关系|控制端口位D7D6D5IM D302DI DO 数码段名dp g f e d c b a 共阴极(1亮0不亮);共阳极(0亮1不亮)
例题1.用8155对共阴LED显示块进行控制,假设要显示:2012,1字样,写出对应字型码,画流程图8155 口地址是9000H。
(图形:8155a 口输出数据c 口输出六个控制位)
共阳0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H [8-F] 80H,90H,88H,83H,0c6H,0a1H,86H,8eH
共阴3FH,06H,5BH,4FH,66H,6DH,7DH,07H [8-F]7FH,6FH ,77H,7CH,39H,5EH,79H,71H,00H ORG 1000H MOV A,@R0DB
ORG 0079H:显示的数ADD A,#0CH7FH,6FH,77H,7CH,39H,据段MOVC A,@A+PC5EH,79H,71H,00H,80H DB MOVX@DPTR,A(小数
点)
02H,00H,01H,02H,11H,0MOV A,R3
J
2H MOV DPTR,#9001H
ORG1000H MOVX@DPTR,A—
DIS: MOV A,#0000ACALL DELAY DELAY: MOV R7, 0011B MOV A,R3#02H
MOV DPTR,#9000H JNB ACC.5,LP1MOV R6, #0FFH MOVX@DPTR,A RL A DJNZ R6, $
LP1 : MOV R0,MOV R3,A DJNZ R7, $-4 #79H INC R0RET
MOV R3,#0FEH SJMP DIS0
J
DIS0:MOV DPTR,DIS_RET RET;END
#9003H
MOV A#0FFH TAB:DB
MOVX@DPTR,A3FH,06H,5BH,4FH,66H,
MOV DPTR, #9003H6DH,7DH,07H
例题2.用8155对键盘进行控制。
键盘的布局如图,请根据电路图,可写16个键盘的编码,若按键为A,则转打印程序PRINT,画出键盘扫描的程序流程图。
键值
键名0123456789A B C D E F 键值1284013951141062151173键盘位置图
0123
4567
89A B
C D E F
0155*-1
P&Oz
键盘扫描程序:
R4列号R2扫描码
MAIN:ACALL KEY
SUBB A,06H
JZ PRINT
SJMP MAIN
ORG 0100H
KEY: ACALL KS
JNZ KEY_1
ACALL DELAY
AJMP KEY
KEY_1: ACALL
DELAY
ACALL DELAY
ACALL KS
JNZ KEY_2
AJMP KEY
KEY_2: MOV R2,
#11111110B
MOV R4, #00H
KEY_3: MOV DPTR,
#0FF21H
MOV A, R2
MOVX @DPTR, A
INC DPTR
MOVX A,@DPTR
CPL A
JZ NEXT
JNB ACC.0 KEY_4
MOV A, #00H
AJMP KEY_7
KEY_4: JNB ACC.1,
KEY_5
MOV A, #4
AJMP KEY_7
KEY_5: JNB ACC.2,
KEY_6
MOV A, #8
AJMP KEY_7
KEY_6: MOV A, #12
KEY_7: ADD A, R4
PUSH ACC
KEY_8: ACALL
DELAY
ACALL KS
JNZ KEY_8
POP ACC
RET
NEXT: INC R4
MOV A, R2
JNB ACC.3, KEY
RL A
MOV A,R2
AJMP KEY_3
KS: MOV DPTR,
#0FF21H
MOV A, #00H
MOVX @DPTR, A
INC DPTR
MOVX A,@DPTR
CPL A
ANL A, #0FH
RET
ORG 2000H
PRINT:------ RET
3
「•me |
A■—行背就号阳口]
A —fl內遊◎ +刊Hi
c一薇玲解杵本列Y
被按撬任LI行------- —1
一「一_J ------------ 1歹粧计数聃观■ i
A i fl
—厂
込一金戋辱涝©
第7章程序存储器拓展和数据存储器拓展 8155命令字:
0: Si 碎入I:汕输岀
0C: ,4口目□基本输丸输出.C 口输人 01:
口碁本输入输出,£口著出
10:瓦口选通軸人愉出,B 口基本输入输出,
H :(i : -\|T .F. PCI : \\W. PC ;: AS-R.
PC3—PCS:輪出
IJ: AU n BLI 透通愉人蜀曲
PCD: AINH, PCI : ABF, PC2: ASTB
PC3: ma PC4; MF* PC5;-^TB
TM2,TM1=01;停止定时器/计数器
TM2,TM 仁10;若正在计数,计数长度减为 0时停止计数
TM2,TM 仁11;启动,置方式和长度后立即启动计数 若正在计数,溢岀后按新的方式和长度计数 。
8155状态字
8155的定时器(14位的减1计数器) M2M 仁00:输出单个方波 M2M 仁01 :输出连续方波 M2M 仁10 :输出单个脉冲 M2M1=11 :输出连续脉冲
W 允许申话、
o :禁止中断
基本输入方式,B 口定义为基本输出方式,对输入脉冲进行 START MOV DPTR , #7F05H ;定时器高8位地址
MOV A ,#40H MOVX @DPTR ,A DEC DPTR MOV A ,#1C H
MOVX @DPTR ,A ;
;定时器高字节送A
;装入高字节
装入定时器低字节MOV DPTR ,#7FCCH;指向命令状态口 MOV A ,#CC2H ;设置命令字[A 入B 出] MOVX @DPTR ,A ;装入命令字,启动定时器 读 8155RAM(7ECC~7EFF 的 F1H 单元内容: MOV DPTR ,#7EF1H MOVX A , @DPTR ;
将立即数41H 写入8155RAM 的2CH 单元中: MOV A ,#41H MOV DPTR ,#7E2CH MOVX @DPTR A ;
氣试以一片276+和一片626+与S031卑片机殂康存储器扩展杀统"雯求釆用 全薛码的方法,请囲拔逻辑逹接罔「并说咀各芯片的地址尬围.
2764的地址范围:CCCC~仆FFH ; 6264的地址范围:2CCCH~3FFFH
战态口 一7FOOII
——7FO1H ——ZFO2H ——7FO31I
唇低
8位——7KO4II
畧 高&位一
7FOSH
poo P0.
Al E P2厂 P2.il WR RL) RESET
ADO
PAO
/ ______ K
RV
N Y
ALE PBO 鼻 K
CT PE"
——I/
IO N1 PCO
TTR
PC5 c=>
RT*
TIN
RFSET
TOUT
16分频,则8155的I/O 初始化程序为:
7F05H
P2.7-P
2.5 P1O4>14
ALE
SAM
EA
A8-A12
CE
AOA7
KB
AS--AK
AOA7 A
~CE
6264
D0-D7 OE
乐王
CT
DD-D* OE
第6章定时器/计数器
1. 使用TO定时,使得由P0.7输出周期为2ms的方波。
设单片机时钟为
6MHz 。
使用方式0和方式1分别实现。
请编制程序。
1) 计算定时器初值X。
X= 2A13 —500 = 8192 —500 = 7692换算成16进制数为1E0CH用高八位和低五位表示(THO、TLO) : FOOCH
2) 编制初始化程序:
TO工作在方式0, 方式控制字为OOH, THO=FOH,
TLO=OCH
编程:ORG 1OOOH
WAIT: SJMP WAIT
3) 编制中断程序:
ORG 0000H ;上电复位入口地址LJMP 1000H ORG 000BH
LJMP TINT
ORG 300H
TINT: CPL P0.7
MOV THO,#OFOH
MOV TLO,#0CH
MOV IE, #82H
RETI
2. 设8031时钟频率为12MHz,请编出利
用定时器/计数器T0在P1.0引脚上输出周
期为2s的方波程序。
1) 计算定时器初值X。
X=216—50ms/1us = 15536
换算成16进制数为3CB0H
2) 编制初始化程序:
T0工作在方式1,方式控制字为
01H,TH0=3CH, TLO=BOH
编程:ORG 1000H
MOV TMOD,#01H
MOV THO,
#3CH
WAIT: SJMP WAIT
3) 编制中断程序:
ORG 0000H ;上电复位入口地
计数初值的计算:
计数器以增1的方式计数,溢岀时申请中断。
1、根据定时值计算岀所需要的计数时钟周期数
t=Tc*N N=t /Tc
Tc ――计数时钟周期=机器周期=振荡周期*12
2、根据选择的工作方式,计算计数器溢岀所需的
计数初值X
方式0: (13 位) X = 2 13—N
方式1: (16 位) X = 2 16- N
方式2: (8位) X = 2 8- N
定时时间=振荡周期*12*(2n X)
X= 2n—t/ (Tc*12 ) = 2 n—t *f /12
3、将X化为16进制数装入TH 和TL
中
方式0: (M1 M0=0 0) 13位定时/计数器方式
16位寄存器只用13位,当TLx的低5位溢出时向THx 进位,而THx溢出时向中断标志TFx进位——硬件置位TFx,申请中断
相关参数的计算:
(1) 最大计数量:n m ax=213=8192
(2) 已知要求的计数量n,则计数器初值为:
(3) 最大定时时间:t max=213X 12/f osc = 8192 X 12/f osc
(4) 已知要求的定时时间t,则定时器的初值为:
x=213 - t x f°sc/12=8192 - t x f osc/12
求得初值以后,应将x分配到TLx和THx:
(TLx) =OOO X4X3X2X1X O B ( THR
=X12xnX1o X9X8X7X6X5B 方式1 : ( M1 M0=0 1) 16位定时/计数器方式结构图同方式0, TL1和TH1都是8位
相关参数的计算:
(1) 最大计数量:n max=216=65536
(2) 已知要求的计数量n,则计数器的初值为:
x
=216 - n=65536 - n
(3) 最大定时时间:t max=216X 12/ f osc =65536X 12/f osc
(4) 已知要求的定时时间t,则定时器的初值为:
x=216 - t X f osc/12=65536 - t X f。
“/12
求得初值以后,应将x分配到TLx和THx:
No X =213 - n=8192 - n
方式2 (M1M0=10)自动恢复初值的8位计数器方式0和方只能若用255
于循环定时/计数时,每次计满溢出后,计数器全部为0,第二次计数器还需重新装入计数初值。
如此反复,不仅影响到定时精度,也给程序设计带来不便。
方法2则可以解决此问题,它具有自动重载功能。
方式2有利于提高定时精度,比较适合用作精确的脉冲信号发生器,或者串行口波特率发生器。
但该方式是8位计数结构,计数值有限,相关参数的计算如下:
(1)最大计数量:n max=28=256
(2)已知要求的计数量n,则计数器的初值为:
8
X=2 - n=256 - n
(3)最大定时时间:t ma)=2 X 12/f osc=256X 12/f osc
(4)已知要求的定时时间t,则定时器的初值为:
x=28-t X 仏』12=256- t X f osc/12
求得初值以后,应将x分配到TLO和THO (两者相同):
方式3( M1 M0=1 1 )仅限于T0 前3种工作方式,对两个定时器的设置和使用时完全相同。
方式3下,z则是不同的。
方式3下的定时器0
方式3只适用于定时器T0。
定时器0在方式3下被拆成两个独立的8位计数器TL0和TH0。
其中T0既可计数使用,又可定时使用。
TL0使用原T0的各控制位和引脚信号,其功能和操作方式与方式0和方式1基本相同。
TH0只可以用作简单的内部定时,占用原定时器T1的控制位TR1和TF1,还占用T1 的中断源,其关闭和启动只受TR1的控制。
方式3下的定时器1
定时器T1只能用作方式0、方式1和方式2。
由于
TR1、TF1和T1的中断源已被定时器T0占用。
此时只有控制位C/T切换控制定时和计数工作方式,且计数溢出时,只能将输出送入串行口。
将定时器T1用作串行口的波特率发生器。
当设置好工作方式时,T1便开始运行;如要停止运行,只需送入一个设置定时器T1为方式3的方式控制字即可。
因为定时器T1不能在方式3下使用,如果硬把它设置为方式3,就停止工作。
外部中断的应用-举例
例1:用一个按钮控制8个发光二极管,每按动一次按钮,是发光二极管按L1 T L2 T….T L8 T L1的顺序循环移动点亮一位。
解:如图所示。
在P1.0-P1.7外部连接
8个发光二极管L1-L8,当P1.X输出低电平时,对应的发光二极管被点亮;当
P1.X输出为高电平时,对应的发光2
极管熄灭。
在/INT1引脚上外接一个按钮。
当按钮按
下时,/INT1为低电平;按钮释放时,
/INT1为高电平。
1. 用中断方式实现
单片机复位以后PC的值为0000H,外部中断1的矢量地址是0013H,而外部中断1的子程序必须放置在从0013H开始的8 个存贮单元,无法实现。
考虑到从0000H到0013H只有19个单元空间,不可能放置完整的主程序,因此在
0000H处放置一条转移指令,将主程序引到别的位________________ _____________
置;
不同的中断矢量地址之间,只有8个存储单
元,无法放置完整的终端服务程序,因此在
中断入口处也放置一条转移指令,以便将程
序引到真正的中断程序的开始位置。
一般习
惯将中断程序放置在主程序之后。
用按钮控制发光二极管
ORG0000H;PC复位地址
AJMP MAIN;MAIN 为主程序入
口地址
ORG0013H;外部中断1的矢量
地址
AJMP INT_1;INT_1为外部中断
1服务程序入口地址
ORG0100H;真正的主程序开
始
MAIN:MOV SP, #60H ;堆栈初始化
MOV A, #11111110B
MOV P1, A ;点亮二极管L1
SETB IT1;将外部中断1
设置为下降沿触发方式
SETB EA;CPU开中断
功能说明
13位计数器
16位计数器
自动重新装入初值的8位计数器
T0:分成两个8位计数器;
T1:停止计数
SETB EX1 ;外部中断1开中断SJMP
$ ;等待中断
ORG 0200H ;真正的外部
中断1服务程序
INT_1:JB P3.3, EXIT
RL A ;修改灯的状态
MOV P1, A
EXIT:RETI;中断返回
END
2•用查询方式实现
所谓查询,就是周期性的对按钮的状态进行
访问,当查询到按钮为有效电平时就采用相
应的处理。
ORG0000H
SETB P3.3;将P3.3设置为
输入状态
MOV A, #0FEH ;设置为L1~L8 的
初始状态
LOOP:MOV P1, A
操作(中断檬)入nitUii:外部中斷INTO0003D 定时器屮断TO OOOBH 外那中斷1NT1(MI13H 迄时器中IftTl(HltBH 串行口中斷M1 M0 工作方式
方式0
方式1
方式2
方式3
第5章中断系统
JB P3.3, $;若按钮未ADC A, R3
动作,则原地等待例:双字节加法:设被加数在R0,R1中加MOV R5, A JNB P3.3, $;等待按钮数在R2, R3中,和存在R4, R5, R6中。
MOV A , #00H 释放,保证按动一次发光二极管只移动一DADD : MOV A , R0ADC A,#00H 位CLR C MOV R6,A RL A ADD A, R2RET
SJMP LOOP MOV R4, A
END MOV A , R1
2. MCS-51单片机内RAM勺通用寄存器区共有32个单元,分为4组寄存器,每组8个单元,以R0〜R7作为寄存器名称。
4. MCS-51单片机的存储器分为4个物理上相互独立的存储空间,即片内程序存储器、片外程序存储器、片内数据存储器、片外数
据存储器,按其逻辑关系可分为3个逻辑上相互独立的存储器空间。
5. MCS-51单片机片内和片外数据存储器的寻址空间可分为00H〜FFH 0000H〜FFFFH。
6. MCS-51系列单片机片包括很多机型,其中8031单片机内有0B的程序存储器。
8051单片机有4kB的程序存储器。
7. MCS-51单片机所能使用的外晶振的频率为 1.2M至12MHz如果8031单片机的时钟频率为12MH?则一个机器周期是1阳。
机器
周期:时钟周期:振荡周期=12:2:1
1. CPU的指令系统就是该CPU所能执行的指令集合。
2. MCS-51单片机的指令系统共有111条指令,按指令所占用的字节数分,有单字节指令,双字节指令,三字节指令。
3. MCS-51单片机的指令系统有7种寻址方式。
立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、基址+变址寄存器间接寻址、相对寻址、位寻址
4. 寄存器寻址方式的寄存器的内容是直接以寄存器形式给出的操作数,可用于寄存器寻址的寄存器有R0〜R7、A、B、AB DPTR 等。
5. 在寄存器间接寻址方式中,其“间接”体现在寄存器的内容不是操作数本身,而是操作数所在RAM单元的地址,可用于寄存器间接寻址的寄存器有SP R0 R1、DPTR等。
6. 特殊功能寄存器按字节访问时,只能采用直接寻址方式。
7. 在变址寻址方式中,可把DPTR或CP作为基址寄存器,而把A中的地址作为变址寄存器,变址寻址方式是专用于访问程序存储器
一种寻址方式。
1. 编写子程序和中断服务程序时,必须注意现场的保护和恢复。
2. 计算机(微处理器)能够唯一识别的语言时机器语言。
1. 中断技术是解决资源竞争的有效方法,因此可以说中断技术实质上是一个资源共享技术。
2. 中断采样用于判断是否由中断请求信号,但MCS-51中只有外部中断才存在中断采样问题。
3. 响应中断后,系统会自动产生一条长调用指令(LCALL ****H),以外中断为例,执行该指令的过程包括:首先将断点地址的内容
压栈,以保存断点。
然后把长调用指令指定的16位目标地址送PC使程序转向该中断入口地址,执行中断服务程序。
1.8031内部有2个16位的加1定时/计数器,其中T0有4种工作方式,T1有3种工作方式。
2. 当定时计数器产生溢出中断时,把定时器控制寄存器的TF0或TF1位置1。
对计数溢出的处理,在中断方式时,该位作为中断
请求标志位使用;在查询方式时,该位作为查询状态位使用。
1. 单片机内部为单总线结构,而扩展存储器又要求系统必须提供三总线。
为此,可用单片机的P0 口提供数据总线,用P2 口提供地
址总线,P3.6和P3.7可提供控制输出线和控制输入线。
WR RD
2. MCS-51可扩展程序存储器最大容量为64KB,数据存储器最大容量为64KB
3. 为实现内/外程序存储器地址的衔接,单片机EA引脚必须接高电平。
4. 单片机的外部数据存储器与外部I/O 口之间采用统一编制方式;内部程序存储器与外部程序存储器之间采用独立编址方式。
5. 从单片机角度上看,连接数据总线的输出口应具有锁存功能,连接到数据总线上的输入接口应具有三态缓冲功能。
3. 对三态缓冲电路,除了数据输入线和数据输出线以外,还应有一个三态控制信号线。
1. 在多位LED显示接口电路的控制信号中,必不可少的是段选控制信号和位选控制信号。
2. 对于4位的LED显示器,如果采用静态显示方式,则同一时刻有4位显示器通电发光,如果动态显示,则同一时刻有1位显示器发光。
1. D/A转换电路之前必须设置数据锁存器,这是因为D/A转换是需要一定时间的,在这段时间内待转换的数字量应保持稳定。
2. 使用双缓冲的D/A转换器,可以实现多路模拟信号的同步输出。
3. A/D转换器暗转换原理可分为计数式、双积分、主次逼近式、并行式。
4. ADC0809中,既可作为查询的状态标志,又可作为中断请求信号使用的信号是EOC
1. 异步串行通信的帧格式由起始位、数据位、奇偶校验位和停止位组成。
2. 串行通信有单工制式、半双工制式、全双工制式三种通信模式。
3. 定时器1作波特率发生器使用时,通常是选用自动重载方式,即工作方式 2.
4. 发送MOV SBUF,A 接收MOV A,SBUF
5. 定时器注意12分频
第3章指令系统
寻址方式直接寻址:
立即寻址:•立即数同操作码一起存放在程序存储器中
寄存器寻址:操作数在R7-R0,A,B,AB,DPTR 中, 指令码中含有该操作数的寄存器号;操作数位于片内RAM中
MOV A, Rn ; (A )・(Rn)
寄存器间接寻址:
@R0, @R1用于对片内RAM 和外部RAM (0000H~00FFH )寻址,@DPTR的寻址范围是
片外ROM/RAM 的全部64KB区域;寄存器间
址指令不能用于寻址SFR
变址寻址:
指令码中隐含有作为基地址寄存器用的数据指
针DPTR或程序计数器PC (存放基地址);指令码中也隐含有累加器 A (A中存放地址偏移量,00H 〜FFH范围内的无符号数);寻址空间是程序存储器。
MOVC A, @A+PC ;A —(A+PC)
相对寻址:
•相对转移指令的指令码中含有相对地址偏移
量;
•相对转移指令分为:短转移指令和长转移指
令(分别为双字节和三字节);
•PC的当前值+相对地址偏移量rel =下一条要执行指令的地址;SJMP rel ;PC —PC+2+rel
5、位寻址:•位寻址区:片内RAM位寻址区
20H〜2FH 和11 个SFR;
数据传送指令(28条)
(1) 立即寻址型传送指令
(2) 直接寻址型传送指令:指令操作码中至少含有一个操作数的直接地址。
MOV A, direct ; MOV direct , A ;
注:目的存储单元有累加器A、工作寄存器和
片内
RAM单元(包括SFR的字节地址)。
(3) 寄存器寻址型传送指令(4)寄存器间址型传送指
令
外部数据传送指令 (外部RAM/ROM ) (13条)
(5) 16位数传送指令
MOV DPTR , #data16 ; DPTR —data16
16位立即数是外部RAM/ROM的地址,其高8 位送
入DPH,低8位送入DPL。
(6) 外部ROM的字节传送指令(查表指令)
MOVC A, @A+DPTR ; A —(A+DPTR)远程查表
MOVC A , @A+PC ; PC —PC+1, A —(A+PC)
近程查表
(7) 外部RAM的字节传送指令:实现外部RAM
和累加器A之间的数据传送。
MOVX A, @Ri ;MOVX@Ri, A ;
MOVX A, @DPTR ; MOVX@DPTR,
A ;
注:前两外部RAM : 0000H~00FFH 后两
0000H~FFFFH
(8) 堆栈操作指令PUSH+1再送入,POP弹出
再-1
堆栈操作指令是直接寻址指令,书写格式为:注:
弹岀指令不会改变堆栈区存储器单元中的内容。
(9) 数据交换指令
XCH A, Rn ; A —Rn
XCHD A, @Ri ; A3~0 —(Ri)3~0
注:只是将累加器A中的内容和片内RAM单元内
容相互交换。
2、算术运算指令(24条)
•加法指令(13条)
(1) 不带Cy加法指令
ADD (2) 带ADDC
(3) 加1指令:只影响奇偶校验标志位
•减法指令(8条)
⑷带Cy减法指令SUBB
减1指令:只影响奇偶校验标志位DEC
(6)十进制调整指令(1条)
DA A ;若AC=1 或A3~A0>9,贝U A —
A+06H
若Cy=1 或A7~A4>9,贝U A —
A+60H
(7)乘法、除法指令(2条)
MUL AB ;A X B=BA, 形成标志
对标志位的影响:Cy=0 ;
若B不等于0,贝U OV=1,否则OV=0;
P由A中1的奇偶性确定。
DIV AB ; A - B=A…B, 形成标志
对标志位的影响:Cy=0 ;
若发现B等于0,则OV=1;
P由A中1的奇偶性确定。
3、逻辑运算指令(25条)
(1)逻辑与运算指令ANL用来清零
(2)逻辑或运算指令ORL置一
(3)逻辑异或运算指令XRL求反
⑷累加器A清零( CLR )和取反(CPL)指令
(5) 移位指不CY RL/RR 带CY RLC/RRC 交换
SWAP
4、控制转移指令( 17条)
(1)无条件转移指令LJMP addr16; PC
—addr16
长转移指令:64K范围内转移指令
AJMP addr11;PC —PC+2, PC10~PC0—addr11
绝对转移指令:2K范围内转移指令
SJMP rel ;PC —PC+2 , PC —PC+rel
短转移指令:-126-129范围内转移指令,rel的取值
范围-128-127 JMP @A+DPTR ;
PC J A+DPTR
(2) 条件转移指令
累加器A判零转移指令(双字节)
JZ rel ; 若A=0,贝U PC J
PC+2+rel,
否则PC J PC+2 JNZ rel;
⑶比较不相等转移指令(三字节)
CJNE A , #data, rel;若A=data,则PC J PC+3 若A 不等于data,则PC J PC+3+rel,形成Cy标志。
注意:指令的相对转移范围为-125〜+130
⑷减1非零转移指令(两字节)
DJNZ Rn, rel ;若Rn-1 不等于0,则PC J
PC+2+rel
若Rn-仁0,则PC J PC+2
注意:条件转移指令均为相对转移指令,因此指令的转移范围十分有限。
(5) 短调用指令
ACALL addr11 ; PC J PC+2
SP J SP+1 , ( SP ) J PC7~PC0
SP J SP+1 , ( SP ) J PC15~PC8
PC10~0J addr11
注意:(1)短调用指令也称为绝对调用指令;
(2)本调用指令应与被调用子程序起始地址在同一
个2KB范围内。
(6) 长调用指令
LCALL addr16 ; PC J PC+3
SP J SP+1, (SP) J PC7~PC0
SP J SP+1, (SP) J PC15~PC8
PC15~0 J addr16
注意:本调用指令是一个64KB范围内调用指
令。
(7) —般子程序返回指令
RET; PC15~PC8 J (SP) , SP J SP-1, PC7~PC0 J ( SP), SP J SP-1
(8) 中断子程序返回指令RETI同上
在返回断点的同时,释放中断逻辑,接受新的中断请求。
(9) 空操作指令:NOP ; PC J PC+1
5、布尔变量操作指令(17条)
(1) 位传送指令
MOV C , bit
MOV bit , C
其中:C为PSW中的Cy; bit为布尔变量的位地址。
这组指令的其中一个操作数必须是进位标志C,另一个可以是位地址。
(2) 位置位和复位指令
-位复位指令(清0) CLR
(3) 位逻辑运算指令ANL与;ORL或;CPL
(4) 位条件转移指令
•累加器cy状态判断转移指令
JC rel ;若Cy=1,则(PC) +2+rel —PC
;若Cy=0,贝^( PC) +2 —PC
JNC rel ;若Cy=0,则(PC) +2+rel —PC
;若Cy=1,贝^( PC) +2 —PC
•位状态判断转移指令
JB bit, rel ;若(小七)=1,则(PC) +3+rel —PC ;若
(bit) =0,则(PC) +3 —PC
JNB bit, rel ;若(bit) =0,则(PC) +3+rel —PC
;若(bit) =1,则(PC)+3 —PC
JBC bit, rel ;若(bit) =1,则(PC)+3+rel —PC,0 —
bit
;若(bit) =0,则(PC)+3 —
PC
6、伪指令是在机器汇编时供汇编程序识别
和执行的命令,用于对汇编的过程进行控制。
ORG 指令代码存储起始地址ORG
2000H
EQU 等值(赋值)语句先定义后使用
DAPORT EQU 0C010H
DATA 数据地址赋值语句
字符名称DATA 表达式AA DATA 35H
注:表达式可为数据或地址,也可包含已定义的
“字符名称”,但不能是汇编符号。
DB :定义字节[标号:])B 项或项表
DW :定义双字节数(字)(高8位放低地址单
元)
[标号:]DW项或项表DB :定义存储
空间
[标号:]DS表达式预留一定数量
内存单元
BIT :位地址赋值字符名称BIT 位
地址
汇编语言程序设计
1•查表程序设计
DPTR作基址的查表指令
MOVC A, @A+DPTR ; A J (A+DPTR )
步骤:(1) DPTR J所查表的始址
(2) A J所查表的项数
(3)执行查表指令
PC作基址的查表指令
MOVC A, @A+PC ; A J (A+PC )
步骤:(1) A J所查表的项数
(2)查表指令前应
放如下指令:ADD A,
#data
其中,data=§表指令到表始址间的指令字节数
(3)执行查表指令
例子:
1. 多字节加法
已知,在内部RAM中,共有6组无符号
4字节被加数和加数分别存放在以FIRS'
和SUCOND为起始地址的区域(低字节在
前,高字节在后)。
请编程序和(设和也为4
字节),并把和存于以SUM开始的区域
ORG 0900H
MOV R0, #FIRST first 送R0
MOV R1, #SECOND second R1
DJNZ R3 LOOP1 本组未完LOOP1
DJNZ R2, LOOP2 6 纟组未完LOOP2 SJMP
$
END
2. 求和、求平均:
在内部RAM从30H开始的单元中,存有16
个单字节无符号数。
求其和(2字节) 及平均
值,分别存于40H单元和42单元。
AJMP 500H
•位置位指令(置1) SET C;SETB bit ;
ANL C, bit ORL C, bit CPL C
ORG 30H
TAB: DB 9,10,11,12,13,14,15,16,
17,18,19,20,21,22,23,24
ORG 500H
MOV A,#0
MOV B,#0
MOV R0,#30H
MOV DPTR,#TAB
L1: CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
CJNE R0,#40H,L1
SUBB A,@R1
POP ACC
JC L4 (升序改为JNC)
INC R0
INC R1
CJNE R1,#36 H,L3
AJMP L5
L4: XCH A,@R1
MOV @R0,A
INC R0
INC R1
AJMP L3
MOV R0,#30H
CLR A
L2: ADD A,@R0
PUSH ACC
CLR A
ADDC A,#0
MOV 42H,A
POP ACC
INC R0
CJNE R0,#40H,L2 L5: INC R3
CJNE R3,#6,L2
MOV 40H,A
MOV R0,40H
MOV R1,42H
MOV A,40H
MOV B,#3
DIV AB
END
3.排序(降序)AJMP 100H
ORG 30H TAB: DB 4,3,6,5,9,1 END
4.求最大值:
AJMP 100H
ORG 30H
LEN EQU 30H+6
BLOCK: DB 41,6,3,10,7,255
ORG 100H
MOV R0,#30H
MOV DPTR,#BLOCK
L1: CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC DPTR
CJNE R0,#LE N,L1
MOV A, R0;A J项数
ANL A, #0FH ;屏蔽高4位
MOVC A, @A+DPTR;A J结
果
MOV R0, A;送
回R0
SJMP$
ASCTAB:DB‘0' , ‘1'…,‘9'
DB‘ A' , ‘ B '…,‘ F'
END
2)采用PC作基址
ORG1000H
MOV A, R0 ;A J项数
ANL A, #0FH;屏蔽
高4位
ADD A, #data;A J
A+data
MOVC A, @A+PC;查
表
MOV R0, A;存结果
SJMP$
ASCTAB:DB‘0' , ‘1'…,‘9'
DB‘ A' , ‘ B '…,‘ F'
END
注意:data=S表指令和表始址间的指令字节数
=03H
2.子程序设计
•子程序始址应以子程序任务定名
例如:延时程序可用DELAY
J ASCTAB
•参数传递
入口参数:子程序所需的原始数据,如SIN(X) 中
的X
ORG 100H
MOV R0,#30H MOV DPTR,#TAB
L1: CLR A
MOVC A,@A+DPTR MOV @R0,A
INC R0
INC DPTR
CJNE R0,#36
H,L1
MOV R0,#30H
MOV R1,#0
L2: MOV A,R1
SUBB A,@R0
JNC MAX (求最小值改为JC MIN )
MOV A,@R0
MOV R1,A
INC R0
CJNE R0,#LE N,L2
MAX (MIN) : INC R0
CJNE R0,#LE N丄2
岀口参数:子程序执行后的结果数据,如
SIN(0.5)的值
•主程序中的CALL指令自动把断点压入堆栈,子
程序中的RET指令自动把断点地址从堆栈中恢复
到PC;
•子程序中应使用相对转移指令,以生成浮动代码
例:已知MDA=a 和MDB=b ,编程求
L3: NOP
END
MOV R3,#0
L2: MOV R0,#30H
MOV R1,#31H L3: MOV A,@R0
PUSH ACC 例:已知R0中有1个0-F的数,编程将其变换
成ASCII码。
求解:(1)采用DPTR作基址
ORG 3000H
MOV DPTR, #ASCTAB ; DPTR
ORG1000H
MDA DATA20H MDB DATA
21H
MDC DATA22H
MOV A, MDA
;A J a (入
参)
ACALL SQR;求a2
MOV R1, A;R1 J a2
C=a2+b2,并送回MDC
求解:利用累加器A传送参数。