第一章 概述
1.1 进制转化
十进制转二进制
二进制转十六进制

1.2 单片机的定义
- 单片机定义:集成了CPU、存储器、I/O口,通过内部总线连接在一起,集成在一个芯片上
- (注:单片机单单是CPU,错)
- 单片机又叫嵌入式微控制器或者微控制器
- 单片机按照用途有通用型和专用型两类
- 专用单片机使结构最简化,从而大大降低成本和提高可靠性
- 受器件物理限制,所以单片机内部采用二进制表示
- 单片机功耗低 有等待状态、睡眠状态、关闭状态
- 支持在线系统编程ISP
- AT89S52单片机工作频率33MHz(填空)
- AT89C5X/AT89S5X 系列与MCS-51系列单片机 在原有功能、引脚、指令方面完全兼容(问法:判断题。问你S51的芯片我用AT89C51或者AT8951替换对不对,这三者混用都对,因为完全兼容)
- AT89S51单片机相当于MCS-51系列中的 87C51
1.3 单片机的应用领域
- 有工业控制检测、仪器仪表、消费类电子产品、通信、武器装备、各终端及计算机外部设备、汽车电子设备、分布式多级系统
- 我们的家用电器使用的单片机属于微计算机的测量、控制应用
- 数据库管理不是单片机的使用范围
1.4 与微型计算机的不同
微处理器芯片本身不是计算机。而单片机它们都是一个完整的计算机系统,单片机是集成在一个芯片上的用于测控目的的单片微计算机。
第二章 硬件(次重要)
2.1 硬件组成
-
硬件的所有组成要点:
8位CPU
256个数据存储器( RAM单元 ; 8KFlash程序存储器; 4个8位可编程并行IO口(P0口、P1口、P2口、P3口)
1个全双工串行口
3个16位定时器/计数器(T0,T1,T2)
1个看门狗定时器:包含了14位计数器和复位寄存器
- 当单片机由于干扰而使程序陷入死循环或跑飞状态时,可引起单片机复位,使程序恢复正常运行。
一个中断系统,6个中断源,2个优先级
32个特殊功能寄存器(SFR)。
-
按物理位置不同,分为4个物理空间;
-
片内数据存储器、片外数据存储器、片内程序存储器、片外程序存储器
-
按访问时的控制信号不同,分为3个逻辑空间。
-
片内数据存储器、片外数据存储器、片内和片外程序存储器
2.2 引脚功能
上二电源 下二时钟
- VCC (40脚):+Vcc电源引脚
- VSS (20脚): 接地引脚
- XTAL1 (19脚);外接晶振引脚 (内置放大器输入端),若用片外独立时钟,接输出端
- XTAL2 (18脚):外接晶振引脚(内置放大器输出端),若用片外独立时钟,悬空
- RST :复位信号 9引脚
复位信号输入高电平,在引脚加上持续时间大于2个机器周期高电平,可使单片机复位。
- EA拔:外部程序存储器允许控制端,关注EA=1 EA=0时的操作 31引脚
1是范围内执行片内 范围外执行片外 0 是执行片外。
功能是:外部程序存储器允许控制端。
EA= 1时,PC在0~1FFFH范围内执行片内中的程序,超出片内程序存储器容量后自动转向片外
EA=0时,PC在0~FFFFH范围内执行片外的程序 不理会片内的8K字节的Flash程序存储器.
2.3 并行I/O口引脚
老师提名:P0-P2发送的是低八位还是高八位
- P0发送地址数据分时复用低8位
- P2用高8位地址总线输出高8位地址 准双向I/O口 具有内部上拉电阻
- P3 口程序计数器
- P1 P2 P3都是准双向I/O口 具有内部上拉电阻
(复位时,SP=07H,而4个I/O端口P0~P3的引脚均为高电平,且为输入状态。)
P0.0~P0.7(39~32脚)——P0口
P1.0~P1.7(1~8脚)——P1口
P2.0~P2.7(21~28脚)——P2口
P3.0~P3.7(10~17脚)——P3口
8只/组×4 组= 32 只引脚
2.4 CPU
- 累加器 从一个寄存器到另一个寄存器需要经过累加器
A的进位位是Cy是特殊的(位于程序状态字特殊功能寄存器PSW中)是特殊的,因为它也是位处理器的位累加器
- PSW RS1 RS0 两者结合对应四个寄存器区 ,OV 溢出标志,P 奇偶检验
- 位于片内特殊功能寄存器区,字节地址为D0H
- 奇偶校验,1的个数是奇数为1
- 32个地址被砍成了4块。
解析:P为奇偶校验标志位,由硬件置位或清0。根据累加器A中“1”的个数的奇偶性,即“1”的个数为偶数时P=0,奇数时P=1。当A中的内容63H时,A中“1”的个数为4,所以P=0。
PSW中RS1,RS0的作用就是决定使用哪一组工作寄存器,单片机复位后,PSW=00H
即单片机复位后,工作寄存器使用的是第0组,此时R4地址为04H。
0组:00H-07H
1组:08H-0FH
2组:10H-17H
3组:18H-1FH
(2^16=64*1248 B =64 KB)
2.5 存储器RAM
堆栈放在片内存储器

解析:单片机从20H到2FH的16个字节单元,共128位可以按位寻址,对应位寻址空间00H到7FH,所以位地址为40H的单元地址为40H/8+20H=28H;
另外特殊功能寄存器中,有16个可以位寻址,查一下表格就行了88H对应的字节地址也为88H
解析:同理2AH-20H=0AH,0AH*8=50H ,A8H查表,对应的为A8H,注意表格上以字节为单位 位到字节要除以8,字节到位要乘以8,减去以后要乘以8
解析:对照上图。
记住81H 和 07H这个数字
2.6 机器周期
- 一个机器周期有12个时钟周期
- 12个时钟周期内有6个状态:即S1-S6
- 每个状态分两拍:P1 P2
- 综上,12个时钟周期就是:S1P1 S2P2 …S6P2 共12个
- 单片机的时钟频率是33Mhz
- 12M的晶振,一个机器周期 是1us
(每12个时钟周期等于一个机器周期,时钟周期等于晶振频率的倒数:T(CY) = 12*T(osc) = 12 / f(soc) )
A PC叫程序计数器,是不能读写操作的。所以不是特殊功能寄存器。特殊功能寄存器是可以用指令进行读写操作的。
C 是1/33M
D SP 是堆栈指针寄存器,存的是栈顶地址,而不是地址单元的内容
2.7 复位操作
注意PC是4个0 同样的还有DPTR也是
IP是XX 6个0
(复位时片内部分寄存器的状态:
PC 0000H
Acc 00H
PSW 00H
B 00H
SP 07H)
第三章 指令(最重要)
3.1 七种寻址方式(小题必考)
判断
3.1.1 寄存器寻址(Rn)
MOV A,Rn ;Rn(0~7)中的源操作数送入到累加器A中
3.1.2 直接寻址(direct)(填空)
直接寻址是访问片内所有特殊功能寄存器的唯一寻址方式。
MOV A,direct
MOV direct1,direct2 ; direct表示直接的操作数单元地址
MOV A,40H ;把内部RAM 40H单元(direct)的内容传送到A
MOV 42H,62H ;片内RAM中62H单元的内容到片内RAM中的42H单元
3.1.3 寄存器间接寻址(@)(填空)
MOV A,@Ri ;i=0或1 ;寄存器中存的是操作数地址,要先从寄存器中找到操作数的地址,再按该地址找到操作数
MOV A,@40H ;即把内部RAM 40H地址单元中的内容传送给A。
3.1.4 立即数寻址(#)
MOV A,#40H ;第一个字节是操作码,第二字节是立即数,就是放在程序存储器内的常数。
3.1.5 基址寄存器加变址寻址(@A+PC/DPTR)(填空)
以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器
功能:MOVC适用于读程序存储器中固定的数据,查表指令要用。
MOVC A,@A+DPTR
如果(A)=05H,(DPTR)=0400H,指令执行结果是把程序存储器0405H单元的内容传送给A
MOVC A,@A+PC
JMP A,@A+DPTR
- 相对数寻址
功能:解决程序转移
目的地址=转移指令所在的地址(PC值)+转移指令字节数+rel
偏移量rel是带符号8位二进制补码数,–128~+127
SJMP rel ;程序要转移到该指令的PC值加3再加上rel的目的地址处。
SJMP LOOP ;“LOOP” 为目的地址标号。汇编时,由汇编程序自动计算和填入偏移量
- 位寻址
功能:对内部RAM和特殊功能寄存器具有位寻址功能的某位内容进行置1和清0操作
位地址一般以直接位地址给出,位地址符号为“bit”。
MOV C,bit
MOV C,40H ;把位地址为40H的值送到进位位C。
注:判断寻址方式一般看源操作数。
3.2 数据传送类指令(填空必考!)
3.2.1 MOV
<操作码=MOV> <目的操作数>,<源操作数>
按照目的操作数分类,可以分成:
A,Rn,direct,@Ri,DPTR
- 以累加器为目的操作数的指令
对于所有MOV类指令,累加器A是一个特别重要的8位寄存器
CPU对它具有其他寄存器所没有的操作指令。后面将要介绍的加、减、乘、除指令都是以A作为目的操作数
MOV A,Rn ; (Rn)→A,n =0~7
MOV A,@ Ri ; ((Ri))→A i =0,1
MOV A,direct ; (direct)→A
MOV A,#data ; #data→A
MOV A,R6 ;(R6)→A,寄存器寻址
MOV A,@R0 ;((R0))→A,间接寻址
MOV A,70H ;(70H)→A,直接寻址
MOV A,#78H ;78H→A,立即数寻址
- 以Rn为目的操作数的指令
MOV Rn ,A ;(A)→Rn ,n =0~7
MOV Rn ,direct ;(direct)→Rn ,n =0~7
MOV Rn ,#data ;#data→Rn ,n =0~7
- 以直接地址direct为目的操作数的指令
;把源操作数送入直接地址指定的存储单元。direct指的是内部RAM或SFR地址。
MOV direct,A ; (A)→direct
MOV direct,Rn ; (Rn)→direct,n =0~7
MOV direct1,direct2 ;(direct2)→direct1
MOV direct,@Ri ; ((Ri))→direct,i =0,1
MOV direct,#data ; #data→direct
- 以寄存器间接地址为目的操作数的指令
MOV @Ri,A ;(A)→((Ri)), i=0,1
MOV @Ri,direct ;(direct)→((Ri)),i=0,1
MOV @Ri,#data ;#data→((Ri)), i=0,1
3.2.2 PUSH POP(指令题必考1!4选1)
概念
堆栈:内部RAM中设定一个后进先出(LIFO,Last In First Out)的区域
堆栈指针SP:指示堆栈的栈顶位置,请注意,不是内容。
堆栈操作有进栈和出栈两种
- 进栈PUSH
①SP加1;
②把SP指示的内容送到RAM。
PUSH direct
例:
当(SP)=60H,(A)=30H,(B)=70H时,执行下列指令
PUSH Acc ;(SP)+1=61H→SP,(A)→61H
PUSH B ;(SP)+1=62H→SP,(B)→62H
结果:(61H)=30H,(62H)=70H,(SP)=62H。
- 出栈POP
①将SP指示的栈顶单元的内容送入direct字节中
②SP减1
例:
当(SP)=62H,(62H)=70H,(61H)=30H时,执行指令
POP DPH ;((SP))→DPH,(SP)-1→SP
POP DPL ;((SP))→DPL,(SP)-1→SP
结果为(DPTR)=7030H,(SP)=60H。
- 此例子老师在黑板上写过,非常重要!
;(SP)=60H
PUSH DPH ;POP = 61H
;(SP)=60H
POP DPL ;POP=5FH
DPTR 的高位字节(DPH)将被设置为 50H,低位字节(DPL)将被设置为 7BH。此题与DPTR无关。
SP是栈顶指针 指向栈顶的地址 注意不是内容。
第一句。
弹出 (32H) 的值 3CH 到 DPH 寄存器。 此时栈顶变成31H
DPH = (32H) =3CH
SP = 31H
第二句。
弹出 (31H) 的值 5FH 到 DPL 寄存器。 此时栈顶变成30H
DPL = (31H) =5FH
SP = 31H-1=30H
第三句。
弹出 (30H) 的值 50H 到 SP 寄存器。此时栈顶变成50H
SP = 50H
综上,执行完指令后的最终情况为:
DPH = 3CH
DPL = 5FH
SP = 50H

原理同上。
解释:
POP DPH
POP DPL ;弹出两次,SP = SP - 2 = 50H
MOV DPTR, #4000H
RL A ;二进制右移 乘以2 A=02H×2=04H
MOV B, A ;B = 04H
MOVC A, @A + DPTR ;取出第4个字节30H
PUSH ACC ;SP = SP + 1 = 51H, (51H)=30H
MOV A, B
INC A ;A = 05H
MOVC A, @A + DPTR ;取出第5个字节50H
PUSH ACC ;SP = SP + 1 = 52H, (52H)=50H
RET ;子程序返回指令
注:执行 RET 指令时,从堆栈中弹出两个字节到 PC 的高、低八位。
即:
(SP) → PCH,然后 SP - 1 → SP;
(SP) → PCL,然后 SP - 1 → SP。
即:
(52H) = 50H → PCH,SP = 51H
(51H) = 30H → PCL,SP = 50H
那么,PC = 5030H,就是这么来的。
3.2.3 MOVX(填空+指令题必考2!)
MOVX表示访问的是片外RAM或I/O口
MOVX A,@DPTR ;((DPTR))→A,读外部RAM/IO
MOVX @DPTR,A ;(A)→((DPTR)),写外部RAM/IO
①采用16位的 DPTR间接寻址,可寻址整个64KB片外数据存储器空间
②高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输出。
(注:输出是低八位还是高八位极高概率考察)
MOVX A,@Ri ;((Ri))→A,读外部RAM/IO
MOVX @Ri ,A ;(A)→((Ri)),写外部RAM/IO
①采用Ri(i =0,1)进行间接寻址,可寻址片外256个单元的数据存储器。
②8位地址由P0口输出,锁存在地址锁存器中,然后P0口再作为8位数据口。
(1)请写出能完成以下操作的指令或指令序列。
将R0的内容传送到R1;
将内部RAM 20H单元的内容传送到R7;
将外部RAM 1000H单元的内容传送到内部RAM 30H单元;
将R1的内容传送到外部RAM 1000H单元;
将片内RAM 40H ,50H两个单元内容相加,结果存入 41H 单元;
将41H 单元内容压入堆栈;
MOV R1, R0 ; 将R0的内容传送到R1
MOV A, 20H ; 将内部RAM 20H单元的内容移动到累加器A
MOV R7, A ; 将累加器A的值传送到R7
MOVX A, @DPTR ; 将外部RAM 1000H单元的内容移动到累加器A
MOV 30H, A ; 将累加器A的值传送到内部RAM 30H单元
MOV A, R1 ; 将R1的内容移动到累加器A
MOVX @DPTR, A ; 将累加器A的值移动到外部RAM 1000H单元
MOV A, 40H ; 将内部RAM 40H单元的内容移动到累加器A
ADD A, 50H ; 将累加器A的值与内部RAM 50H单元的内容相加
MOV 41H, A ; 将累加器A的值移动到内部RAM 41H单元
PUSH 41H ; 将41H单元的内容压入堆栈
3.2.4 查表指令(填空)
仅有两条,请看.
MOVC 即表示程序存储器中的代码。
执行上述两条指令时,单片机的 PSEN*引脚信号(程序存储器读)有效,这一点读者要牢记。
MOVC A,@A+PC
①PC作为基址寄存器,A的内容(无符号数)和PC的当前值(下一条指令的起始地址)相加后得到一个新的16位地址
②把该地址的内容送到A
例:
当 (A)=30H时,执行地址1000H处的指令
1000H: MOVC A,@A+PC
指令占用一个字节,下一条指令的地址为1001H,(PC)=1001H再加上A中的30H,得1031H,结果把程序存储器中1031H的内容送入累加器A。
MOVC A,@A+DPTR
①DPTR为基址寄存器,A的内容(无符号数)和DPTR的内容相加得到一个16位地址
②把由该地址指定的程序存储器单元的内容送到累加器A。
例:
(DPTR)=8100H,(A)=40H,执行指令
MOVC A,@A+DPTR
将程序存储器中8140H单元内容送入A中。
不排除MOVC和堆栈指令结合考。
3.2 累加器 (指令题必考3!4选1)
- 老师提到了CLR 重点看
CLR A ;累加器A清0。不影响Cy、Ac、OV等标志位。
CPL A ;将累加器A的内容按位逻辑取反,不影响标志位。
RL A ;A向左循环移位,位7循环移入位0,不影响标志位,
RLC A ;将累加器A的内容和进位标志位Cy一起向左环移一位
RR A ;A的内容向右环移一位不影响其他标志位,
RRC A ;A的内容和进位标志Cy一起向右环移一位
SWAP A ;将累加器A的高半字节(Acc.7~Acc.4)和低半字节(Acc.3~Acc.0)互换。
【例3-8】
(A)= 95H,执行指令
SWAP A 结果为 (A)=59H。
逻辑与 或 异或
ANL A,Rn ;(A)∧(Rn)→A,n=0~7
ANL A,direct ;(A)∧(direct)→A
ANL A,#data ;(A)∧#data→A
ANL A,@Ri ;(A)∧((Ri))→A,i =0~1
ANL direct,A ;(direct)∧(A)→direct
ANL direct,#data ;(direct)∧#data→direct
ORL A,Rn ;(A)∨(Rn)→A ,n =0~7
ORL A,direct ;(A)∨(direct)→A
ORL A,#data ;(A)∨ #data→A
ORL A,@Ri ;(A)∨((Ri))→A,i =0,1
ORL direct,A ;(direct)∨(A)→direct
ORL direct,#data ;(direct)∨#data→direct
XRL A,Rn ;(A)⊕(Rn)→A,n=0~7
XRL A,direct ;(A)⊕(direct)→A
XRL A,@Ri ;(A)⊕((Ri))→A ,i =0,1
XRL A,#data ;(A)⊕#data→A
XRL direct,A ;(direct)⊕(A)→direct
XRL direct,#data ;(direct)⊕#data →direct
把Acc.3 Acc.4 Acc.5 Acc.6清零
3.3 控制跳转类指令
RET (简答必考题1,2!)
RET与RETI的不同,运行过程,功能!!!!!
RET是子程序返回指令
运行过程是:
(SP)→PCH,然后(SP)-1→SP
(SP)→PCL,然后(SP)-1→SP**
功能: 从堆栈中退出PC的高8位和低8位字节,把栈指针减2,从PC值处开始继续执行程序。不影响任何标志位。RETI是中断返回指令。
功能与RET类似。
RETI与RET的不同处:该指令清除了中断响应时被置1的内部中断优先级寄存器的中断优先级状态。
实验一 上的,有时间最好看一下。不排除上述是填空题的方式。
(2)比较AJMP、LJMP、 JZ、DJNZ 指令编译后机器码中操作数(跳转地址)的不同
AJMP指令是绝对跳转指令,其机器码的操作数部分是跳转的目标地址(11位)。
LJMP指令也是绝对跳转指令,但相比于AJMP,其机器码的操作数部分是跳转的目标地址(16位)。
JZ指令是条件跳转指令,用于在零标志位(ZF)为1时进行跳转。其机器码的操作数部分是相对跳转的偏移量(8位,有符号)。
DJNZ指令是循环跳转指令,用于在减一操作后不为零时进行跳转。其机器码的操作数部分是相对跳转的偏移量(8位,有符号)。
综上,AJMP和LJMP是绝对跳转指令,操作数是跳转地址;
而JZ和DJNZ是相对跳转指令,操作数是相对于当前指令地址的偏移量。
CJNE(重要)
LCALL(简答题必考3!)
LCALL可以调用64KB范围内程序存储的任何一个子程序
DJNZ(编程题必考1!!!)
知识点:
重点要看的跳转指令如下:
;长转移指令
LJMP addr16
指令执行时,把转移的目的地址,即指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向addr16指定的目的地址:64KB程序存储器地址空间的任何位置。
;比较不相等转移指令
CJNE A,direct,rel
CJNE A,#data,rel
CJNE Rn,#data,rel
CJNE @Ri,#data,rel
比较前两个操作数大小,如果值不相等则转移,并转向目的地址。
如果第一操作数(无符号整数)小于第二操作数(无符号整数),则进位标志位Cy置1,否则Cy清0。该指令的执行不影响任何一个操作数的内容。
;调用子程序指令
(1)长调用指令
LCALL addr16
可调用64KB范围内程序存储器中的任何一个子程序。执行时,先把PC加3获得下一条指令的地址(断点地址),
接着把指令的第二和第三字节(A15~A8,A7~A0)分别装入PC的高位和低位字节中,然后从PC指定的地址开始执行程序。执行后不影响任何标志位。
(2)绝对调用指令
ACALL addr11
与AJMP指令类似,为兼容MCS–48的CALL指令而设,不影响标志位。格式如下:
【2KB】范围内的调用子程序的指令。子程序地址必须与ACALL指令下一条指令的16位首地址中的【高5位地址】相同
;子程序返回指令
RET
执行本指令时
(SP)→PCH,然后(SP)-1→SP
(SP)→PCL,然后(SP)-1→SP
功能: 从堆栈中退出PC的高8位和低8位字节,把栈指针减2,从PC值处开始继续执行程序。不影响任何标志位。
;减1不为0转移指令
把减1与条件转移两种功能合在一起。两条:
DJNZ Rn,rel ;n =0~7
DJNZ direct,rel
用于控制程序循环。预先装入循环次数,以减1后是否为“0”作为转移条件,即实现按次数控制循环。
;中断返回指令
RETI
与RET指令相似,不同处:该指令清除了中断响应时被置1的内部中断优先级寄存器的中断优先级状态,其他相同。
NOP
不进行任何操作,耗一个机器周期时间,执行(PC)+1→PC操作
3.4 汇编语言(填空必背)
汇编语言被编译后叫汇编语言
指令的格式(4个背下来)
标号字段、 操作码字段、 操作数字段、 注释字段
START: MOV A,#00H ;0→A
MOV R1,#10 ;10→R1
MOV R2,#00000011B ;03H→R2
LOOP: ADD A,R2 ;(A)+(R2)→A
DJNZ R1,LOOP ;R1减1不为零,则跳LOOP处
NOP
HERE: SJMP HERE
- 标号字段:语句所在地址的标志符号,才能被访问
- 操作码字段:操作码字段规定了语句执行的操作。
- 操作数字段:指令的操作数或操作数地址
判断指令的正确性
3.5 伪指令(简答题必考4!)
以下辅助理解
ORG(ORiGin)汇编起始地址命令
;ORG的功能:表示源程序的开始,用一条ORG伪指令规定程序的起始地址。
;如果不用ORG,则汇编得到的目标程序将从0000H地址开始
ORG 2000H
START: MOV A,#00H
;可多次用ORG指令,规定不同的程序段的起始地址。但是,地址必须由小到大排列,且不能交叉、
;例如若按下面顺序的排列则是错误的,因为地址出现了交叉。
ORG 2500H
……
ORG 2000H
……
ORG 3000H
END(END of Assembly)汇编终止命令
;END的功能:源程序结束标志,终止源程序的汇编工作。整个源程序中只能有一条END命令,且位于程序的最后。
END
;如果END出现在程序中间,其后的源程序,将不进行汇编处理。
EQU(EQUate)标号赋值命令
;EQU的功能是给标号赋值。赋值后,标号值在整个程序有效。
TEST: EQU 2000H
表示TEST=2000H,汇编时,凡是遇到TEST时,均以2000H来代替。
DB(Define Byte)定义数据字节命令
;DB的功能是从指定的地址开始,在程序存储器连续单元中定义字节数据
ORG 2000H
DB 30H,40H,24,"C","B"
汇编后
(2000H)=30H
(2001H)=40H
(2002H)=18H(十进制数24)
(2003H)=43H(字符“C”的ASCII码)
(2004H)=42H(字符“B”的ASCII码)
显然,DB功能是从指定单元开始定义(存储)若干字节,十进制数自然转换成十六进制数,字母按ASCII码存储。
DW(Define Word)定义数据字命令
;该命令用于从指定的地址开始,在程序存储器的连续单元中定义16位的数据字
ORG 2000H
DW 1246H,7BH,10
汇编后
(2000H)=12H ;第1个字
(2001H)=46H
(2002H)=00H ;第2个字
(2003H)=7BH
(2004H)=00H ;第3个字
(2005H)=0AH
3.6 子程序设计(简答题必考5!)
子程序基本结构(辅助理解)

3.7循环的控制(填空必背)
循环分为循环计数控制结构和条件控制结构
以下辅助理解。

第四章 中断
4.1 中断 填空必备
中断系统有6个中断源,2个中断优先级,可实现两级中断服务程序嵌套。(填空)
4.2 中断允许 中断优先级
中断允许控制由中断允许寄存器IE控制。
中断优先级控制由中断优先级寄存器IP控制。
中断允许寄存器IE
IE对中断的开放和关闭实现两级控制。
有一个总的开关中断控制位EA(IE.7位),
EA=0时,所有的中断请求被屏蔽;
EA=1时,开放中断,但6个中断源的中断请求是否允许,还要由IE中的低6位所对应的6个中断请求允许控制位的状态来决定。AT89S52复位以后,IE被清“0”,所有的中断请求被禁止。(填空)
IE中与各个中断源相应的位可用指令置“1”或清“0”
【例4-1】 若允许片内2个定时器/计数器T1、T0中断,并禁止其他中断请求,请编写设置IE的相应程序段。 1)用位操作指令 CLR ES ;禁止串行口中断 CLR EX0 ;禁止外部中断0中断 CLR EX1 ;禁止外部中断1中断 CLR ET2 ;禁止定时器/计数器T2中断 SETB ET0 ;允许定时器/计数器T0中断 SETB ET1 ;允许定时器/计数器T1中断 SETB EA ;总中断开关位开放 2)用字节操作指令 MOV IE,#8AH
- SETB 允许 – 置1
- CLR 中断 – 置0(填空)
中断允许寄存器IP(表格背!)
高打断低 低打断高
同级中断不能嵌套 (选择必备)
中断优先级关系,可归纳为两条基本规则:
(1)低优先级可被高优先级中断,高优先级不能被低优先级中断。
(2)任何一种中断一旦得到响应,不会再被它的同级中断源所中断。
1:高优先级 0:低优先级
AT89S52的中断系统有两个不可寻址的“优先级激活触发器。
AT89S52复位以后,IP的内容为0,各个中断源均为低优先级中断。
各中断源在相同优先级的条件下,外部中断0的中断优先权最高,T2溢出中断中断优先权最低。
4.3 响应中断(表格背!)
中断请求被响应,必须满足以下必要条件:
(1)总中断允许开关接通,即IE寄存器中的中断总允许位EA=1。
(2)该中断源发出中断请求,即对应的中断请求标志为“1”。
(3)该中断源的中断允许位EA=1,即该中断被允许。
(4)无同级或更高级中断正在被服务。(简答必背5)
两个中断入口间只相隔8字节,通常在中断入口地址处放置一条无条件转移指令,
中断响应的过程:
首先由硬件自动生成一条长调用指令“LCALL addr16”。就是程序存储区中相应的中断入口地址。
例如,对于外部中断1的响应,硬件自动生成的长调用指令为LCALL 0013H
首先将程序计数器PC的内容压入堆栈以保护断点,再将中断入口地址装入PC,使程序转向响应中断请求的中断入口地址。
记中断级别最低的两个
答案有个印象
4.4 简答必背
这两个是必背的。
简答必备同必背1!!
简答必背5!!
填空必备

第五章 定时器/计数器
5.1 T0/T1–小题
- 定时器/计数器T0由TH0 TL0构成,定时器/计数器T1由TH1 TL1构成
- 两个定时器都有定时器和计数器2种工作模式和4钟工作方式(方式0 方式1 方式2 方式3) 【选择填空必备】
TMOD格式
- 8位分成两组 高4位控制T1 低4位控制T0
- GATE门控位
- C/T 计时器/定时器模式选择位
- M1 M0 工作方式选择位
- 方式0–13位
- 方式1–16位
- 方式2–8位(初值自动装入)
- 实现精准定时的是方式2
T=12/3M = 4us
工作方式0:Tmax=2^13*4us=32.768ms
工作方式 1:Tmax=2^16*4us=262.144ms
工作方式 2:Tmax=2^8*4us=1.024ms
5.2 T0/T1方式1编程题必考!!
注:本例改了数据,和书上的不同!
初值计算
注:之所以说2的16次方,是因为方式1是16位
程序设计
- 把红色的改了。
第六章 串行
6.1 串行通信和并行通信
- 串行通信:将数据字节分成一位一位的形式在一条传输线上逐个传送。一次只能传送一位,对于一个字节的数据,至少要分8位才能传送完毕。
- 并行通信:使用多条数据线将数据字节的各个位同时传送,每一位数据都需要一条传输线,此外还需要一条或几条控制信号线。


6.2 串行通信的传输模式
1.单工
数据传输仅能按一个固定方向传输,不能反向传输,
2.半双工 数据传输可以双向传输,但不能同时进行,不能同时传输
3.全双工
数据传输可同时进行双向传输

6.3 串行口四种工作方式
4种工作方式由SCON中SM0、SM1位定义
6.4 波特率计算
-
方式0时,波特率固定为时钟频率fosc的1/12,不受SMOD位值的影响。若fosc = 12 MHz,波特率为1Mbit/s。
-
方式2时,波特率仅与SMOD位的值有关
-
若fosc =12 MHz: SMOD=0,波特率 = 187.5 kbit/s;SMOD=1,波特率为375 kbit/s。
- 方式1或方式3定时,常用T1作为波特率发生器,其关系式为