单片机期末复习
只针对MCS-51单片机
基础
- A/Acc:累加器。
- B:B寄存器。
- DPTR:数据指针,一个16位的SFR,其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示。
-
E
A
‾
\overline{{EA}}
EA:
E
A
‾
\overline{{EA}}
EA引脚确定CPU的访问片内、片外存储器。
- E A ‾ \overline{EA} EA接高电平时,程序将从片内存储器开始执行;当PC超出片内ROM的容量时,会自动转向片外程序存储器执行程序。
- E A ‾ \overline{EA} EA接低电平时,迫使单片机只能只能执行片外存储器。
- 此处要注意8031没有内部程序存储器,只能接低电平。
- PC:16位程序计数器,工作方式:1.程序计数自动+1。2.执行有条件,无条件转移指令,程序计数器被置入新的数值,从而使程序流向发生变化。PCL,是其低八位;PCH,是其高八位。
- PSW:程序状态寄存器,一个8位可读写寄存器。
- Cy(PSW.7):进位标志位。
- Ac(PSW.6):辅助进位标志位。
- F0(PSW.5):标志位
- RS1,RS0(PSW.4,PSW.3):4组工作寄存器去选择控制位1和位0。
- OV(PSW.2):溢出标志位
- PSW.1:保留位
- P(PSW.0):奇偶标志位,用来表示累加器A中为1的位数的奇偶数,P=1,则A中的 ‘1’位数为奇数,P=0,则A中的 ‘1’ 位数位偶数。
- P0-P3:4个并行I/O口
- R0-R7:表示当前的工作寄存器组中的寄存器。
- SFR:特殊寄存器,用于对片内各个功能部件进行管理、控制、监视。
- SP:堆栈指针,一个8位的特殊功能寄存器,一个字节数据压入堆栈前, SP自动+1,一个字节数据弹出堆栈后,SP自动-1。
- 内部数据存储器(RAM):共128个单元,地址范围:00H~7FH。
- 00H-1FH,为4组通用工作寄存器,每个区含8个8位寄存器编号R0~R7,使用由PSW的PS1和PS0控制,如PS1=0,PS0=1,使用1组工作寄存器。
- 20H-2FH:可以进行共128位的位寻址,共有16个单元,一个单元是8位,所以位寻址区共有128位。这128位都单独有一个位地址,其位地址的对应值是 00H-7FH 。
- 30H-7FH:为用户RAM存储器,只能进行字节寻址。
- 机械周期:12个时钟周期,单片机完成一个基本操作需要的时间,分为6种状态:S1-S6。每个状态又分为2拍:P1,P2。所以一个机械周期的12个时钟周期又可以表示为:S1P1,S2P2 … \dots …S6P2。如果采用12MHz晶振,1个机械周期为 1 12 ∗ 1 0 6 ∗ 12 s = 1 u s \cfrac{1}{12*10^{6}}*12s=1us 12∗1061∗12s=1us
- 时钟周期:1/晶体震荡频率
- 寻址范围:单位字节,1KB=1024Byte=
2
10
2^{10}
210Byte
- 单片机程序存储区的寻址范围是由程序计数器PC的位数决定的,若PC为16位,则寻址范围是(64K): 2 6 ∗ 2 10 = 64 K 2^6*2^{10}=64K 26∗210=64K
- BCD码: 用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。
- 溢出率: 溢出率应该是每秒溢出的次数。12/fosc=每个机器周期时间, ( 12 f o s c ) ∗ ( 256 − 初 值 ) = 溢 出 一 次 所 需 的 时 间 (\cfrac{12}{fosc})*(256-初值)=溢出一次所需的时间 (fosc12)∗(256−初值)=溢出一次所需的时间-------这里 (256-初值) 代表溢出多少个机械周期,最后用1除以该数就代表每秒溢出的次数,也就是溢出率。
- 时钟周期 = 晶振周期 = 振荡周期Tosc = 晶振频率(振荡频率fosc)的倒数。
- 复位时,堆栈SP=07H,P0~P3=0FFH,其他都为0
单片机概述
- 单片机还可以称为微控制器,嵌入式控制器。
- 与普通计算器不同之处:将微处理器,存储器,各种输入输出接口集成到一个一块芯片上。
- 根据基本操作处理位数分类:1位单片机,4位单片机,8位单片机,16位单片机,32位单片机.
- MCS-51系列单片分类及其不同之处:
- 分类:8031,8051,8751
- 8031:1个8位cpu,128BRAM,21个特殊寄存器SFR,4个8位并行I/O接口,1个全双工接口,2个16位定时器/计数器,中断系统。
- 8051:在8031的基础上,片内又集成了4KBROM作为程序存储器,是1个程序不超过1KB的程序。
- 8071:在8031的基础上增加4KB的EPROM,它1个程序不超过1KB的小系统。用户可以把程序固化在EPROM中,可以反复修改程序。
内部RAM可寻址位
知道位地址,求字节地址和位数?
位地址=x(变成十进制),字节地址=y(16进制),位数=n
n
=
x
−
⌊
x
8
⌋
∗
8
,
y
=
2
⌊
x
8
⌋
H
n=x-⌊ \cfrac{x}{8}⌋*8,y=2⌊ \cfrac{x}{8}⌋H
n=x−⌊8x⌋∗8,y=2⌊8x⌋H
指令系统
描述指令的意义
* | 意义 |
---|---|
Rn | 当前工作区的8个工作寄存器R0~R7 |
Ri | 当前工作区可作地址寄存器的2个寄存器R0、R |
direct | 直接地址 |
#data | 包含在指令中的8位立即数 |
#data16 | 包含在指令中的16位立即数 |
@ | 间接寄存器或基址寄存器的前缀 |
(X) | X中的内容 |
((X)) | 由X寻址单元中的内容,即(X)中的内容 |
→ \to → | 右边的内容被左边的内容取代 |
C/Cy | 位处理机中的累加器或进位标志位 |
OV | 溢出标志 |
addr11 | 11位目的地址 |
addr16 | 16位目的地址 |
rel | 相对转移指令的偏移量,位8位带符号数的补码数。 |
bit | 内部RAM或特殊功能寄存器中的直接寻址位 |
寻址方式
- 寄存器寻址
MOV A,Rn; n=0~7 - 直接寻址
MOV A,40H - 寄存器间接寻址
MOV A,@Ri; i=1或0 - 立即寻址
MOV A,#40H; - 基址寄存器加变址寄存器间址寻址
以DPTR或PC作为基址,A作为变址,两者内容相加形成16位进制的操作数的地址。
MOV A,@A + DPTR; - 位寻址
MOV C,40H;
把40H位的值送进位位C; - 相对寻址
数据传送指令
数据传送类指令
MOV 内部 RAM ( 包括特殊功能寄存器)的 数据传送
MOVX 外部扩展RAM 的 数据传送
MOVC 程序存储器 的 读取数据 ( 包括数据表)
以下代码不在做过多做文字描述,详情看上章描述指令的意义。
MOV <目的操作数> <源操作数>
- mov A, Rn;(Rn) → \to →A, n=0~7 把Rn的内容复制到A的内容
- mov A, @Ri; ((Ri)) → \to →A, i=0,1
- mov A, direct; (direct) → \to →A
- mov A, #40H; 40 → \to →A
- mov Rn,A; A → \to →(Rn), n=0~7
- mov Rn, direct; (direct) → \to →(Rn)
累加器读写外部数据存储器
- movx A,@DPTR; ((DPTR)) → \to → A 读外部RAM/IO
- movx @DPTR,A;(A) → \to →((DPTR)) 写外部RAM/IO
查表指令movc
- movc A,@A + PC
- movc A, @A +DPTR
字节交换指令XCH
- XCH A,Rn; (A) ⇆ \leftrightarrows ⇆(Rn)
半字节交换指令XCHD
- XCHD A,@Ri;
累加器A的低四位与内部RAM低四位交换,例:
(R0)= 60H, (60H)=3EH, (A)=59H
执行 XCHD @R0,A; 则 (A)=5EH, (60H)=39H
算数操作指令
程序执行的结果将使程序状态寄存器–PSW中的进位(Cy),辅助进位(Ac),溢出(OV),P 4种标志位,置“1”或者清“0”,但是增1减1指令不影响这些标志位。
加法指令运算结果对标志位的影响:
- 位7有进位,则置标志位Cy为“1”,否则清“0”.
- 位3有进位,则置辅助进位标志Ac为“1”,否则清“0”.
- 如果位6有进位,位7无进位,或者位7有进位,位6无进位,置溢出标志位OV为“1”,否则清“0”.
- 若结果“1”的个数为奇数,置P为“1”,否则清“0”.
- 值得注意的是,溢出标志位只有在带符号数时才有意义。两个带符号数相加若OV为“1”,则说明运算超出了累加器A的运算范围(-128~+128),产生溢出,运算结果错误,否则运算结果正确。
加法指令ADD
ADD A, Rn; (A)+(Rn)
→
\to
→A, n=0~7
ADD A,direct; (A)+(direct)
→
\to
→A
ADD A,@Ri; (A)+((Ri))
→
\to
→A, i=0,1
ADD A,#data; (A)+# data
→
\to
→ A
例:(A)= 53H, (R0) = FCH, 执行指令 ADD A,R0
0101
0011
+
)
1111
1100
1
←
0011
1111
\begin{matrix} & 0101&0011 \\ +)& 1111&1100\\ \hline 1\leftarrow&0011&1111 \end{matrix}
+)1←010111110011001111001111
结果为(A)=4FH,Cy=1, AC=0, OV=0, P=1(A中的“1”为奇数)
注意: 此时OV为0是因为位6,位7都进位。
带进位加法指令ADDC
ADDC A, Rn; (A)+(Rn)+Cy
→
\to
→A, n=0~7
ADDC A,direct;
ADDC A,@Ri;
ADDC A,#data;
增1指令INC
INC A
INC Rn
INC direct
INC @Ri
INC DPTR
十进制调整指令DA
DA A;
针对BCD码的加法运算;
修正方法:
- 累加器低4位大于9或辅助进位位Ac=1则进行低4位加6修正。
- 累加器高4位大于9或辅助进位位Ac=1则进行低4位加6修正。
- 累加器高4位为9,低4为大于9,则高4为和低4为分别加6修正。
例:(A)=56H,(R5)=67H,把他们看作压缩的BCD数,进行BCD数的加法。执行指令:
ADD A,R5
DA A
0101
0110
+
)
0110
0111
1011
1101
+
)
0110
0110
1
←
0010
0011
\begin{matrix} & 0101&0110 \\ +)&0110&0111\\ \hline &1011&1101\\ +)&0110&0110\\ \hline 1\leftarrow&0010&0011 \end{matrix}
+)+)1←0101011010110110001001100111110101100011
(A)=23H,Ac=1,Cy=1,P=1
带结尾的减法指令SUBB
SUBB A, Rn; (A)-(Rn)-Cy
→
\to
→A, n=0~7
SUBB A,direct;
SUBB A,@Ri;
SUBB A,#data;
减1指令DEC
DEC A
DEC Rn
DEC direct
DEC @Ri
乘法指令MUL
乘法指令除法指令,建议转换成10进制后计算
MUL AB; A*B
→
\to
→BA
累加器A和寄存器B中的无符号8位整数相乘,其16位积的低位在累加器中,高位在寄存器B中。
除法指令DIV
DIV AB; A/B
→
\to
→A(商) B(余数)
商放在累加器A中,余数放在寄存器B中。
逻辑运算指令
简单逻辑操作指令CLR ,CPL
- CLR A; 使累加器清“0”
- CPL A; 使累加器取反
左环移指令RL
- RL A; 累加器A循环左移,位7取代位0
带进位左环移指令RLC
- RLC A;累加器A循环左移,Cy取代位0,位7取代Cy,
右环移指令RR
- RR A; 累加器A循环右移,位0取代位7
带进位右环移指令RRC
- RRC A;累加器A循环右移,Cy取代位7,位0取代Cy,
累加器半字节交换指令SWAP
- SWAP A;累加器高半字节和低半字节互换
(A)=C5H
SWAP A;
(A) = 5CH
逻辑与指令ANL
其他指令不在一 一列举。
ANL A, Rn; (A)
∧
\land
∧(Rn)
→
\to
→A
逻辑或指令ORL
ORL A,Rn; ( A ) ∨ ( R n ) → A (A) \lor(Rn)\to A (A)∨(Rn)→A
逻辑异或指令XRL
XRL A,Rn; ( A ) ⊕ ( R n ) → A (A)\oplus(Rn)\to A (A)⊕(Rn)→A
控制转移类指令
无条件转移指令AJMP
AJMP addr11;
该指令执行时,先将PC+2,然后把addr11送到PC.10-PC.0,PC.15-PC.11保持不变。
相对转移指令SJMP
SJMP rel;
rel是单字节的带符号的8位二进制补码数,rel为正,则向后(地址增大的方向),否则向前(地址减小的方向),执行本指令时,PC先加2(本指令为2个字节),再把指令的有符号偏移量rel加入PC上。
用户在编写程序时,只需在相对转移指令中,直接写上要转向的目标地址标号就可以了。
例:
L
O
O
P
:
M
O
V
A
,
R
6
⋮
S
J
M
P
L
O
O
P
⋮
\begin{matrix} LOOP:&MOV&A,R6\\ &&\vdots\\ &SJMP&LOOP\\ &&\vdots \end{matrix}
LOOP:MOVSJMPA,R6⋮LOOP⋮
程序在汇编时,由汇编程序自动填入偏移量。
在手工汇编时,偏移量需要自己计算:
- 1230H:SJMP 46H
SJMP所在地址为1230H,rel=46H时正数,则PC=1230H+02H+46H=1278H - 1230H:SJMP 0E7H
rel=0E7H是负数19H的补码,PC=1230H+02H-19H=1219H - 根据目标地址计算偏移量
向前偏移:rel=FFH-源地址+目标地址-1
向后偏移:rel=目标地址-源地址-2
长跳转指令LJMP
LJMP addr16
间接跳转指令JMP
JMP @A+DPTR
转移目标由A中8位无符号数与DPTR的16位数内容之和来确定。
条件转移指令JZ
JZ rel ;若A=0,则PC+2+rel—>PC;
;否则,PC+2—>PC
还有是:
JNZ rel ;若A!=0,则PC+2+rel—>PC;
;否则,PC+2—>PC
比较不相等转移指令CJNE
CJNE A,direct,rel
CJNE A,#data,rel
CJNE Rn,#data,rel
CJNE @Ri,#data,rel
比较前两个操作数大小,不相等则转移,PC先加3(本条指令占3个字节),在加rel,
如果第一个操作数小于第二个操作数,则置Cy为“1”,否则清“0”.
减一不为零转移指令DJNZ
DJNZ Rn,rel;
DJNZ direct, rel;
操作数减一,并将结果送到源操作数中。结果不为0则转移。本指令可使用寄存器Rn或direct用作循环变量,控制循环次数。
调用子程序指令
- 短调用指令
ACALL addr11
执行该指令时,PC先+2(该指令占2个字节),获取下一条指令地址,并把该地址压入堆栈保护,SP+1,PCL入栈,SP+1,PCH入栈,SP+1,再把PC高5位和addr11连接得到16位地址,送入PC。调用的子程序地址必须与下一条指令的第一个字节在同一2K区内 - 长调用指令
LCALL addr16
可以调用64K内的任意子程序,执行该指令时,PC先+3(该指令占3个字节),获取下一条指令地址,并把该地址压入堆栈保护,SP+1,PCL入栈,SP+1,PCH入栈,SP+1,再把指令的第二第三字节(A15-A8,A7-A0)装入PC的高位,低位,执行程序。
子程序返回指令RET
RET; ( S P ) → P C H , ( S P ) − 1 → S P ; ( S P ) → P C L , ( S P ) − 1 → S P (SP)\to PCH,(SP)-1\to SP;(SP)\to PCL,(SP)-1\to SP (SP)→PCH,(SP)−1→SP;(SP)→PCL,(SP)−1→SP
中断返回指令RETI
RETI
与RET不同处,清除被置“1”MCS-51单片机内部中断优先级状态.
空操作指令NOP
NOP
消耗一个机械周期
位操作类指令
数据位传送指令MOV
MOV C,bit
MOV bit, C
把源操作数指出的位变量送到目的操作数指定的单元去。
例:
M
O
V
C
,
06
H
;
(
20
H
)
.
6
→
C
y
MOV C,06H; (20H).6\to Cy
MOVC,06H;(20H).6→Cy
这里06H是位地址,20H是内部RAM的字节地址。06H是内部RAM 20H字节位6的位地址。
位变量修改指令CLR ,CPL ,SETB
CLR C ;清“0”Cy
CLR bit ;清“0”bit
CPL C ;Cy取反
CPL bit ;bit位取反
SETB C ;置Cy“1”
SETB bit ;置bit位“1”
例:
CLR 27H;
0
→
(
24
H
)
.
7
位
0\to(24H).7位
0→(24H).7位
CPL 08H;
(
21
H
)
.
0
‾
→
(
21
H
)
.
0
位
\overline{(21H).0}\to(21H).0位
(21H).0→(21H).0位
SETB P1.7;
1
→
P
1.7
位
1\to P1.7位
1→P1.7位
位变量逻辑与指令ANL
ANL C,bit;
b
i
t
∧
C
y
→
C
y
bit\land Cy \to Cy
bit∧Cy→Cy
ANL C,
b
i
t
‾
\overline{bit}
bit;
b
i
t
‾
∧
C
y
→
C
y
\overline{bit}\land Cy\to Cy
bit∧Cy→Cy
位变量逻辑或指令ORL
ORL C,bit;
ORL C,
b
i
t
‾
\overline{bit}
bit;
条件转移指令JC ,JNC,JB,JNB
JC rel; Cy=1,转移
JNC rel; Cy=0,转移
JB bit,rel; 直接寻址位=1,转移
JNB bit,rel; 直接寻址位=0,转移
JBC bit,rel; 直接寻址位=1,转移并清0直接寻址位
中断系统
能够实现中断处理功能的部件。
作用
中断方式完全消除了CPU在查询方式中的等待现象,大大提高了CPU的工作效率。
中断源入口地址
中断优先级由高到低。
中断源 | 入口地址 | 中断请求标志位 |
---|---|---|
外部中断0 | 0003H | IE0 |
定时器/计数器 T0 溢出中断 | 000BH | TF0 |
外部中断1 | 0013H | IE1 |
定时器/计数器 T1 溢出中断 | 001BH | TF1 |
串行口中断 | 0023H | T1/R1 |
中断请求标志位特殊寄存器TCON/SCON
TCON为定时器/计数器的控制寄存器。
TCON | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
---|---|---|---|---|---|---|---|---|
位地址 | 8FH | 8DH | 8BH | 8AH | 89H | 88H |
- 跳沿触发方式:引脚 I N T 0 ‾ 或 I N T 1 ‾ 从 高 电 平 跳 变 到 低 电 平 有 效 。 \overline{INT 0}或\overline{INT1}从高电平跳变到低电平有效。 INT0或INT1从高电平跳变到低电平有效。
- 电平触发方式:引脚 I N T 0 ‾ 或 I N T 1 ‾ 低 电 平 有 效 。 \overline{INT0}或\overline{INT1}低电平有效。 INT0或INT1低电平有效。
* | 功能 |
---|---|
IT0 | 选择 I N T 0 ‾ \overline{INT0} INT0跳沿触发方式(“1”)或电平触发方式 (“0”) 控制位 |
IE0 | 外部中断0请求标志位 |
IT1 | 选择 I N T 1 ‾ \overline{INT1} INT1跳沿触发方式(“1”)或电平触发方式 (“0”) 控制位 |
IE1 | 外部中断1请求标志位 |
TF0 | 定时器/计数器T0溢出中断请求标志位 |
TF1 | 定时器/计数器T1溢出中断请求标志位 |
SCON为串行口控制寄存器,其低二为分别为接收中断和发送中断标志位。
- T1–发送中断请求标志位
- R1–接收中断请求标志位
中断允许寄存器IE
IE | 功能 |
---|---|
EA | 中断允许控制位 |
ES | 串行中断控制位 |
ET1 | 定时器/计数器T1溢出中断允许位 |
EX1 | 外部中断1允许位 |
ET0 | 定时器/计数器T0溢出中断允许位 |
EX0 | 外部中断0允许位 |
中断优先级寄存器IP
IP | 功能 |
---|---|
PS | 串行中断优先级控制位 |
PT1 | 定时器T1中断优先级控制位 |
PX1 | 外部中断1中断优先级控制位 |
PT0 | 定时器T0中断优先级控制位 |
PX0 | 外部中断0中断优先级控制位 |
中断请求相应条件
- 中断源发出中断请求。
- CPU开中断相应,即EA为1。
- 申请中断的中断源中断允许位为1。
- 无同级或更高级中断服务正在被响应。
中断服务程序流程
关 中 断 → 现 场 保 护 → 开 中 断 → 中 断 处 理 → 关 中 断 → 现 场 恢 复 → 开 中 断 → 中 断 返 回 关中断\to现场保护\to开中断\to中断处理\to关中断\to现场恢复\to开中断\to中断返回 关中断→现场保护→开中断→中断处理→关中断→现场恢复→开中断→中断返回
扩展外部中断源的方法
- 定时器/计数器作为外部中断源的使用方法:T0/T1引脚作为外部中断源输入引脚,定时器/计数器溢出请求标志位TF1/TF0作为外部中断请求标志位。
- 中断和查询结合的方法:对多规格中断源按优先级排序,把优先级最高了连接 I N T 0 ‾ \overline{INT0} INT0,其余中断源用“线或”连接 I N T 1 ‾ \overline{INT1} INT1,同时连接P1接口。发生中断时,用查询方法判断哪个中断源发生中断。
- 用优先权编码器扩展外部中断源:由优先权编码器给出多个外部中断源安排中断优先级,8031只响应优先级最高的。
查询法扩展外部中断源比较简单,但是当中断源数量较多时,查询时间较长。
用优先权编码器扩展外部中断源,结构简单,价格低廉,但是无法实现中断服务子程序嵌套。
定时器/计数器
- 计数工作模式:T0(P3.4)和T1(P3.5)输入引脚作为两个计数器的输入引脚,发生负跳变计数+1。
- 定时工作模式:每个机器周期产生一个计数脉冲,根据计数次数算出时间。定时器有4种工作模式,由TMOD的M1和M0位控制。
注意: 当作为计数器工作时,因为一个计数周期要进行一个负跳变,高电平到低电平的过程,所以一个计数周期=2*机械周期,即24个振荡周期,又因为外部脉冲的变化必须要比 51单片机采样的速度慢才行,否则会丢失计数脉冲的个数,所以外部脉冲的脉冲频率 ≤ \le ≤ 振荡频率/24。
例如:
选用6MHz频率的晶体,求允许输入最大的脉冲频率?
允 许 输 入 最 大 脉 冲 频 率 = 6 ∗ 1 0 6 24 H z = 250 ∗ 1 0 3 H z = 250 K H z 允许输入最大脉冲频率=\cfrac{6*10^{6}}{24}Hz=250*10^{3}Hz=250KHz 允许输入最大脉冲频率=246∗106Hz=250∗103Hz=250KHz
工作方式寄存器TMOD
GATE | C / T ‾ C/\overline{T} C/T | M1 | M0 | GATE | C / T ‾ C/\overline{T} C/T | M1 | M0 |
---|
高4位控制T1,低4位控制T0。
- GATE:
- 值为0时,仅由控制位TRX(X=0,1)=1来启动计数器/定时器运行。
- 值为1时,由TRX(X=0,1)=1和外中断引脚 I N T 0 ‾ \overline{INT0} INT0或 I N T 1 ‾ \overline{INT1} INT1的高电平共同控制。
-
C
/
T
‾
C/\overline{T}
C/T:定时器模式,计数器模式选择。
- =0,定时器模式,计数输入信号时内部时钟脉冲
- =1,计数器模式,计数器对外部输入引脚T0,T1的外部脉冲(负跳变)计数。
- M1,M0工作模式选择。
M1 M0 工作方式 0 0 方式0,13位定时器/计数器 0 1 方式1,16位定时器/计数器 1 0 方式2,8位初值自动填装入8位定时器计数器 1 1 方式3,仅适用于T0,分成两个8位计数器,T1停止计数
定时器/计数器控制寄存器TCON
TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
---|
- 跳沿触发方式:引脚 I N T 0 ‾ 或 I N T 1 ‾ 从 高 电 平 跳 变 到 低 电 平 有 效 。 \overline{INT0}或\overline{INT1}从高电平跳变到低电平有效。 INT0或INT1从高电平跳变到低电平有效。
- 电平触发方式:引脚 I N T 0 ‾ 或 I N T 1 ‾ 低 电 平 有 效 。 \overline{INT0}或\overline{INT1}低电平有效。 INT0或INT1低电平有效。
* | 功能 |
---|---|
IT0 | 选择 I N F 0 ‾ \overline{INF0} INF0作为跳沿触发方式(“1”)或电平触发方式 (“0”) 控制位 |
IE0 | 外部中断0请求标志位 |
IT1 | 选择 I N F 1 ‾ \overline{INF1} INF1作为跳沿触发方式(“1”)或电平触发方式 (“0”) 控制位 |
IE1 | 外部中断1请求标志位 |
TF0 | 定时器/计数器T0溢出中断请求标志位 |
TF1 | 定时器/计数器T1溢出中断请求标志位 |
TR0 | 定时器/计数器T0启动标志位,=1启动 |
TR1 | 定时器/计数器T1启动标志位 |
串行口
串行口控制器SCON
SM0 | SM1 | SM2 | REN | TB8 | RB8 | T1 | R1 |
---|
- SM0,SM1串行口4种工作方式控制
SM0 | SM1 | 方式 | 功能 | 波特率 |
---|---|---|---|---|
0 | 0 | 0 | 同步位于寄存器方式,常用作外接位移寄存器,用以扩展并行I/O口 | fosc/12 |
0 | 1 | 1 | 8位异步收发,比特率可变(由定时器控制) | 2 S M O D 32 ∗ 定 时 器 T 1 溢 出 率 \cfrac{2^{SMOD}}{32}*定时器T1溢出率 322SMOD∗定时器T1溢出率 |
1 | 0 | 2 | 9位异步收发 | 2 S M O D 64 ∗ f o s c \cfrac{2^{SMOD}}{64}*fosc 642SMOD∗fosc |
1 | 1 | 3 | 9位异步收发,波特率可变(由定时器控制) | 2 S M O D 32 ∗ 定 时 器 T 1 溢 出 率 \cfrac{2^{SMOD}}{32}*定时器T1溢出率 322SMOD∗定时器T1溢出率 |
- SM2多机通讯控制位
主要用于方式2、3。- SM2=1时,收到第9位数据(RB8)为1,将收到的前八位放入SBUF,置RI为“1”,产生中断请求。RB8为0,丢弃前8位数据。
- SM2=0时,无论RB8为何值,都把前8为放入SBUF。置RI为“1”,产生中断请求。
- 方式1,当SM3=1,收到有效停止位,才会置RI为“1”.
- 方式0,SM3=0.
- REN允许串行接收位
- REN=0,禁止串行接收
- REN=1,允许串行接收
- TB8发送的第9位
- 在方式2、3,TB8是要发送的第9位数据
- 在双机通讯,TB8做奇偶校验位。
- 在多机位通讯中,TB8=0表示数据帧,TB8=1表示为地址帧。
- RB8接收的第9位数据
- 在方式0,不使用RB8
- 在方式1,接收停止位
- 在方式2,3,接收第9位数据
- TI发送中断标志位
- RI接收中断标志位
特殊功能寄存器PCON
SMOD | - | - | - | - | - | - | - |
---|
SMOD:波特率选择位
例,方式1波特率计算公式:
方
式
1
波
特
率
=
2
S
M
O
D
32
∗
定
时
器
T
1
溢
出
率
方式1波特率=\cfrac{2^{SMOD}}{32}*定时器T1溢出率
方式1波特率=322SMOD∗定时器T1溢出率
溢出率的意义,见名词解释。
波特率
串行口每秒发送或接收的位数。
定
时
器
T
1
溢
出
率
=
计
数
速
率
256
−
X
=
f
o
s
c
/
12
256
−
X
定时器T1溢出率=\cfrac{计数速率}{256-X}=\cfrac{fosc/12}{256-X}
定时器T1溢出率=256−X计数速率=256−Xfosc/12
方式 | 波特率 |
---|---|
0 | fosc/12 |
1 | 2 S M O D 32 ∗ 定 时 器 T 1 溢 出 率 \cfrac{2^{SMOD}}{32}*定时器T1溢出率 322SMOD∗定时器T1溢出率 |
2 | 2 S M O D 64 ∗ f o s c \cfrac{2^{SMOD}}{64}*fosc 642SMOD∗fosc |
3 | 2 S M O D 32 ∗ 定 时 器 T 1 溢 出 率 \cfrac{2^{SMOD}}{32}*定时器T1溢出率 322SMOD∗定时器T1溢出率 |
特殊寄存器功能背诵
TMOD
GATE | C / T ‾ C/\overline{T} C/T | M1 | M0 | GATE | C / T ‾ C/\overline{T} C/T | M1 | M0 |
---|
TCON
TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
---|
SCON
SM0 | SM1 | SM2 | REN | TB8 | RB8 | T1 | R1 |
---|
PCON
SMOD | - | - | - | - | - | - | - |
---|
IE
EA | - | - | ES | ET1 | EX1 | ET0 | EX0 |
---|
IP
- | - | - | PS | PT1 | PX1 | PT0 | PX0 |
---|
D/A、A/D接口
D/A转换器
D/A(数/模)转换器输入的数字量,经转换后输出的是模拟量。转换过程就是将数码按照权值大小转换成相应的模拟分量,再以叠加方法把相应的模拟分量相加,和就是D/A转换结果。
主要技术指标
- 分辨率:输入单位数字量变化引起模拟量输出的变化。
- 定义满刻度值与 2 n 2^n 2n(n为D/A转换器二进制位数)之比。
- 例如:满量程为10V,8为D/A转换器分辨率多少?
- 10 V 2 8 = 39.1 m V = 0.391 % 满 量 程 \cfrac{10V}{2^8}=39.1mV=0.391\%满量程 2810V=39.1mV=0.391%满量程
- 建立时间:描述D/A转换速度。
- 转换精度:理想情况下,与分辨率基本一致,由于电源电压、参考电压,电阻等因素影响存在误差。