1. MCS-51 系列单片机的结构原理
1> 运行部件
以算术逻辑运算单元 ALU 为核心,包含累加器 ACC ,B 寄存器,暂存器,标志寄存器 PSW 等许多部件,能够实现算术运算,逻辑运算,位运算,数据传输等处理
2> 算术逻辑运算单元 ALU
可对一位二进制数据进行置位,清零,求反,测试,转移及位逻辑“与”“或”等处理
3> 累加器 ACC ( 简称 A )
4> 标志寄存器 PSW
8 位寄存器,用于保存指令执行结果的状态,以供程序查询判别
5> 进位标志位 C ( PSW .7 )
执行算术运算和逻辑运算指令时,用于记录最高位的进位或错位
6> 辅助进位标志位 AC ( PSW .6 )
用于记录在进行加法和减法运算时,低 4 位向高 4 位是否有进位或错位
7> OV ( PSW .2 )溢出标志位
进行加减法运算,结果超出 8 位二进制范围, OV 置 1 ,标志溢出
8> P ( PSW .0 )奇偶标志位
A 中 1 的个数为奇数,置位
*****************************************************************************************
1.压缩 BCD 码 = 8421 码
2.分析以下指令执行后,累加器 A ,标志位 C ,AC ,OV ,P 的值
MOV A , # 67 67 H = 01100111 B
ADD A , # 58 58 H = 01011000 B
相加得:
10111111 B --> OBF H
最高位没有发生进位, C = 0
低四位没有向前进位, AC = 0
OV = 1,因为范围是( -128 ~ 127 ) 发生溢出
P = 1,因为 1 的个数为奇数
*****************************************************************************************
2. MCS-51 单片机的存储器结构
分为 程序存储器 ROM 和 数据存储器 RAM
1> 程序存储器
用于存放单片机工作的程序,单片机工作时先由用户编制好程序和表格常数,把它存放到程序存储器中,然后在控制器的控制下,依次从程序存储器中取出指令送到 CPU 执行,实现功能。为此,设计了一个专用寄存器 -- 程序计数器 PC ,用以存放要执行的指令的地址( 16 位,64kb )
2> 数据存储器
用于存放取出程序执行时所需的数据
1> 片内数据存储器
工作寄存器组区,位寻址区,一般 RAM 区和特殊功能寄存区,堆栈区
*****************************************************************************************
● 重点
1.怎么区分程序存储器片内片外
根据引脚 EA(非)电平的高低来决定,接低电平时,则从片外程序存储器取指,接高电平,则从片内取指
2.区分 64 kb 的程序存储器和 64 kb 片外数据存储器
① 根据信号区分
片外数据存储器 RD(非) WR(非)
程序存储器 PSEN
② 根据指令区分
片外数据存储器 MOVX
程序存储器 MOVC
3.区分片内数据存储器和片外数据存储器低 256 地址空间重叠
根据指令的不同
片内数据存储器 MOV
片外数据存储器 MOVX
*****************************************************************************************
3. MCS-51 系列单片机外部引脚及片外总线
1> 输入输出引脚
① P0 口( 39 - 32 引脚 )
唯一能够外接电阻, P0 口分时复用为低 8 位地址总线和双向数据总线
② P1 口( 1 - 8 引脚 )
可作为准双向 I/O 接口使用
③ P2 口( 21 - 28 引脚 )
高 8 位地址总线
④ P3 口( 10 - 17 引脚 )
准双向 I/O 接口使用,每一位还具有独立的第二功能
2> 复位方式
MCS-51 单片机有一个复位引脚 RST ,高电平有效,当外部电路使得 RST 端出现 2 个机器周期( 24 个时钟周期 )以上的高电平,系统内部复位
3> 程序执行方式
程序复位后, PC 指针总指向 0000 H,所以程序总是从 0000 H 开始执行
4> 中断
MCS-51 单片机的中断系统规定,从中断服务程序中返回之后,至少要再执行一条指令,才能重新进入中断
5> 机器周期
包含 S1,S2,・・・S6 六个状态,每个状态有 P1,P2 两拍,每一个拍称为一个时钟周期
① 一个机器周期包含 12 个时钟周期
② 振荡周期:晶振平率 fosc 的倒数 == 时钟周期
③ 1 个机器周期:12 个震荡周期
④ 1 个指令周期:1,2,4 个机器周期
⑤ ALE 的频率:1/6 的时钟周期
= 2 * 机器周期
机器周期 = 12 * 时钟周期( 振荡周期 )