目录
一、基础知识
1.数在计算机内表示
2.BCD编码
3.ASCII码
4.微型计算机
4.1 中央处理器
编辑
4.2 存储器
4.3 输入/输出设备及I/O接口电路
4.4 总线。
二、 单片机基本原理
1. 51子系列单片机主要特点
2. 51系列单片机外部引脚
3. 片外总线
4.单片机工作方式
4.1 复位方式
4.2 程序执行方式
4.3 单步执行方式
4.4 掉电和节电方式
4.5 编程和校验方式
5. 51单片机时序
5.1 时钟周期
5.2 机器周期
5.3 指令周期
5.3 访问外部ROM的时序
5.4 访问外部RAM的时序
三、单片机汇编程序
1.指令标识符
2. 立即寻址(常数寻址)
3. 寄存器寻址
4. 存储器寻址
4.1 直接寻址
4.2 寄存器间接寻址
4.3 变址寻址
5. 位寻址
6. 指令寻址
6.1 绝对寻址
6.2 相对寻址
7. 数据传送指令
7.1 片内RAM传送指令MOV
7.2 片外RAM传送指令MOVX
7.3 ROM传送指令MOVC
8. 数据交换指令
9. 堆栈操作指令
10. 算数运算指令
10.1 加法指令
10.2 减法指令
10.3 乘法指令
10.4 除法指令
10.5 十进制调整指令
11. 逻辑操作指令
11.1 逻辑与指令ANL
11.2 逻辑或指令ORL
11.3 逻辑异或指令XRL
11.4 清零指令CLR
11.5 求反指令CPL
11.6 循环移位指令
假设机器字长8位:
符号位 0:正数
1:负数
原码:二进制数
反码:原码符号位不变,其余位0-1,1-0取反
补码:反码末位+1
压缩BCD编码:用四位二进制数表示一位十进制数
如:24: 0010 0100
非压缩BCD码:用八位二进制数表示一位十进制数,高四位任取,低四位同压缩BCD码
如:24:0011 0010 00110100
0~9:30~39
a~z:61~7A
A~Z:41~5A
运算器、控制器、存储器、输入设备、输出设备五大部分
将运算器和控制器结合起来叫CPU
1.运算部件
以算数逻辑运算单元ALU为核心、累加器ACC、B寄存器、暂存器、标志寄存器PSW
8位运算器,完成8位二进制数的加、减、乘、除等算数运算,以及逻辑“与”、“或”、“异或”、循环移位求补、清零等逻辑运算。
保存运算数据和运算结果。
辅助寄存器 ,完成乘法、除法指令,累加器A中存入被除数和商,寄存器B中存入除数和余数。
8位寄存器,4位状态标志,2位控制标志
PSW.7(C):进/借位标志位,最高位D7有进位/借位,则C置1,否则清0。
PSW.6(AC):辅助进/借位标志位,低四位向高四位有进位/借位则AC置1.
PSW.5(F0):用户标志位。
PSW.4\PSW.3(RS1\RS0):寄存器组选择位,四组选择。
PSW.2(OV):溢出标志位,运算结果超出8位范围则OV置1.
PSW.1:未定义
PSW.0:偶标志位,记录A中1的个数,奇数置1。
MOV A,#67H /*把67H送入累加器A中*/
ADD A,#58H /*把A中的67H与58H相加结果送回A*/
C=1 AC=0 OV=1 P=1
注:最高位为1,变成负数,认为溢出
2. 控制部件
单片机的控制中心,包括定时和控制电路、指令寄存器、指令译码器、程序计数器PC、堆栈指针SP、数据指针DPTR以及信息传送控制部件。控制部件以震荡信号为基准产生CPU工作的时序信号,先从ROM中取出指令到指令寄存器,然后再指令译码器中译码,产生执行指令所需的各种控制信号,指挥各功能部件产生相应操作。
存放程序和数据的记忆装置
堆栈区和堆栈指针:
先入后出、后入先出,通过堆栈指针SP管理,主要为子程序调用和中断设立的,用于保护断点和现场状态,调用后要返回调用位置,因此先把当前断点地址送入堆栈保存,对于嵌套调用,先调用的后返回。
堆栈有入栈和出栈两种操作,分为向上生长型堆栈和向下生长型堆栈。
入栈:先改变指针SP,再送入数据。
出栈:先送出数据,再改变指针。
向上:
向下:
特殊功能寄存器(SFR):
专门用于控制、管理片内算数逻辑部件、并行I/O接口、串行口、定时\计数器、中断系统等功能模块的工作。
CPU专用寄存器:累加器A、寄存器B、程序状态寄存器PSW、堆栈指针SP、数据指针DPTR。
并行接口:P0~P3。
串行接口:串口控制寄存器SCON、串口数据缓冲器SBUF、电源控制寄存器PCON。
定时/计数器:方式寄存器TMOD、控制寄存器TCON、初值寄存器TH0、TL0/TH1、TL1。
中断系统:中断允许寄存器IE、中断优先级寄存器IP。
通过DPTR指针访问。
2.ROM:程序存储器(只读存储器):存放程序、固定常数和数据表格。
程序计数器PC存放指令的地址,用于控制程序的执行。
输入设备:如键盘、鼠标、光笔、模数转换器、扫描仪、话筒
输出设备:如显示器、打印机、绘图仪、数模转换器、音箱
I/O接口电路:外部设备和微型机之间传送信息的中间设备,主要实现数据缓冲、信号变换、速度匹配、设备选择等功能。输入时具有缓冲功能,输出时具有锁存能力。
三态双向口,可作为地址/数据时分复用接口和通用I/O接口。由一个输出锁存器、两个三态缓冲器
输出驱动电路和输出控制电路组成。
P0作为通用I/O接口时:
1)输出数据时必须外接上拉电阻,输出电流不大于800。
2)输入数据时,人为地向P0口写1,方可高阻输入。
准双向口,只能作为通用I/O接口,输出时不必外接上拉电阻。
准双向口,用作通用I/O接口和高8位地址线。
P3口除了作为准双向通用I/O接口外,每根线还有第二种功能:
P3.0:RXD串行口输入端
P3.1:TXD串行口输出端
P3.2:INT0,外部中断0请求输入端,低电平有效
P3.3:INT1,外部中断1请求输入端,低电平有效
P3.4:T0,定时/计数器0外部计数脉冲输入端
P3.5:T1,定时/计数器1外部计数脉冲输入端
P3.6:WR,外部数据存储器写信号,低电平有效
P3.7:RD,外部数据存储器读信号,低电平有效
连接多个设备或功能部件的一簇公共信号线,是计算机各部件之间信息交流的通道
MCS-51系列单片机是8位单片机,包含51和52两个子系列
40个引脚
1)P0口(39~32)
P0.0~P0.7
不接片外存储器和不扩展I/O接口时作为准双向输入/输出接口,外接时时分复用为低8位地址总线和双向数据总线。
2)P1口(1~8)
P1.0~P1.7
作为准双向I/O接口使用,P1.0还可用作定时器/计数器2的计数脉冲输出端T2,P1.1还可用作定时器/计数器2的外部控制端T2EX。
3)P2口(21~28)
P2.0~P2.7
一般用作准双向I/O接口使用,在接有片外存储器和扩展I/O接口且寻址范围常256字节时可用作高8位地址总线。
4)P3口
P3.0~P3.7
P3口除了作为准双向通用I/O接口外,每根线还有第二种功能:
P3.0:RXD串行口输入端
P3.1:TXD串行口输出端
P3.2:INT0,外部中断0请求输入端,低电平有效
P3.3:INT1,外部中断1请求输入端,低电平有效
P3.4:T0,定时/计数器0外部计数脉冲输入端
P3.5:T1,定时/计数器1外部计数脉冲输入端
P3.6:WR,外部数据存储器写信号,低电平有效
P3.7:RD,外部数据存储器读信号,低电平有效
1)ALE/PROG(30)
地址锁存信号输出端,ALE在每个机器周期内输出两个脉冲。
在访问片外ROM期间,下降沿用于控制锁存P0输出的低8位地址;不访问期间可作为对外输出的时钟脉冲或定时目的。
对于片内有EPROM的机型,作为编程脉冲PROG的输入端。
注:EPROM:可擦除可编程只读存储器,断电后仍能保存数据。
2)(29)
片外ROM读选通信号输出端,低电平有效。
从片外ROM读取指令或常数期间,每个机器周期该信号有效两次,通过P0口读取指令或常数。
在访问片外RAM期间,该信号不出现。
3)RST/(9)
为备用电源,该引脚为单片机的上电复位或者掉电保护端。
单片机振荡器工作时,该引脚上出现持续2个机器周期的高电平就可实现复位。上电时,考虑到振荡器的起振时间和其他电路的稳定时间,该引脚上高电平必须持续10ms以上才能保证有效复位。
也可接备用电源,VCC发送故障掉电时该备用电源为内部RAM供电,保证数据不丢失。
4)EA/(31)
为片外ROM选用端,低电平时选用片外ROM,高电平或者悬空时选用片内ROM。
对于片内有EPROM的机型,作为21V编程电源的输入端。
VCC(40):接+5V电源正端
VSS(20):接+5V电源地端
XTAL1\XTAL2(19、18):使用单片机内部震荡电路时,用来外接石英晶体和微调电容,在单片机内部,它是个反相放大器的输入端,这个放大器构成了片内振荡器。
采用外部时钟时,一个XTAL引脚接地,一个接片外振荡脉冲输入(带上拉电阻)。
单片机引脚除了电源线、复位线、时钟输入、用户I/O接口外,其余都为了实现系统扩展。
使CPU和内部其他部件处于一个确定的初始状态,从这里开始工作。
复位引脚RST:高电平有效,在时钟电路工作后,,当外部电路使RST端出现两个机器周期(24个时钟周期)以上高电平时,系统内部复位。
RST由高电平变为低电平后,PC指针变为0000H,使单片机从程序存储器地址为0000H的单元开始执行程序。
是单片机的基本工作方式,由于系统复位后,程序总是从0000H开始执行,但0003H到0023H是中断服务程序区,因此用户程序放在中断服务区后面,在0000H处防止一条长转移指令转到用户程序。
在外部单部脉冲的作用下,使单片机一个单步脉冲执行一条指令后停下来,再一个单步脉冲执行一条指令后又暂停下来,常用于调试程序、跟踪和了解程序执行过程。51单片机的单步执行要利用中断系统完成。
从中断服务程序中返回后至少要再执行一条指令才能重新进入中断。
将外部脉冲加到引脚,平时让它为低电平,编程规定
为电平触发,那么不来脉冲时
一直为低电平处于响应中断状态,执行中断服务程序。
在中断服务程序中,第一条指令在为低电平时是死循环,不返回主程序执行。通过按钮送来一个正脉冲时中断服务程序的第一条指令结束死循环开始执行第二条指令,在高电平期间第二条开始死循环,高电平结束
回到低电平,第二条结束循环执行第三条,中断返回返回到主程序,由于这时
为低电平,请求中断。但中断系统规定,从中断服务程序中返回后至少要再执行一条指令才能重新进入中断。
时序就是在执行指令过程中,CPU产生的各种控制信号在时间上的相互关系。
CPU发出的控制信号:一是用于计算机内部,二是通过控制总线送到片外的。
单片机内部时钟电路产生(或外部时钟电路送入)的信号周期,单片机的时序信号以时钟周期信号为基础而形成的。
单片机的基本操作周期,每个机器周期包含S1~S6六种状态,每个状态包括P1、P2两个节拍,每一拍为一个时钟周期,因此,一个机器周期包括12个时钟周期,依次为S1P1、S1P2、S2P1、S2P2......
计算机从取一条指令开始到执行完该指令所需要的时间。指令周期以机器周期为单位。
51单片机指令根据指令长度和执行周期分为:单字节单周期指令、单字节双周期指令、双字节单周期指令、双字节双周期指令、三字节双周期指令、一字节四周期指令。
每个机器周期出现2次ALE信号:S1P2和S4P2,每出现一次ALE信号,CPU就进行一次取指令的操作。
如果指令从外部ROM中读取,有ALE信号和控制信号,还要P0口作为低8位地址总线和数据总线,P2口作为高8位地址总线。
需要的控制信号有ALE、、
(读/写),还要P0口和P2口在取指时用来传输ROM地址和指令,在执行阶段传送RAM地址和读写的数据。
MSC51系列单片机共111条指令,功能强、指令短、执行快,功能上分为:数据传送指令、算数运算指令、逻辑操作指令、控制转移指令、位操作指令。
操作数是常数直接出现在指令中,紧跟操作码后面一起放在ROM中,可以立即得到并执行,立即数前面以#作前缀。
MOV A,#20H
把立即数20H送给累加器A
操作数在寄存器里,使用时在指令中直接提供寄存器的名字。只针对R0~R7这8个通用寄存器和部分特殊功能寄存器(如累加器A、寄存器B、数据指针寄存器DPTR)。
把R0寄存器中的数送给累加器A
MOV A,R0
指令中直接提供存储器单元的地址,针对片内RAM和特殊功能寄存器。
特殊功能寄存器名称实际上是特殊功能寄存器单元的符号地址。
把片内RAM20H单元里的内容送给累加器A
MOV A,20H
把P0口的内容送给累加器A
MOV A,P0
存储器单元的地址放在寄存器中,通过提供寄存器来使用对应的存储单元。
将以工作寄存器R1中的内容为地址的片内RAM单元的数据传到累加器A中去。
MOV A。@R1
操作数的地址由基址寄存器中存放的地址加上变址寄存器中的地址,基址寄存器可以说数据指针寄存器DPTR或程序计数器PC,变址寄存器只能是累加器A,访问的存储器为ROM。
将DPTR的内容与A中的内容相加作为ROM的地址,从对应的单元中取出内容送入A中
MOVC A,@ A+DPTR
操作数用于提供目的位置的地址
在指令的操作数中直接提供目的位置的地址或地址的一部分
当前PC值加指令中偏移量rel得到的目的位置的地址,rel为负数时向前转移,当为正数时向后转移。
目的地址=当前PC+rel=转移指令地址+转移指令字节数+rel
MOV 目的操作数,源操作数
目的操作数:A、Rn、@Ri、direct、DPTR
源操作数:A、Rn、@Ri、direct、#data[16]
MCS51系列中只能通过累加器A与片外RAM进行数据传送
只有两条:一是DPTR变址寻址、二是PC变址寻址,常用作查表指令。
MOVC A,@ A+DPTR
MOVC A,@ A+PC
注:没有操作两个寄存器的做法。
源操作数不变,将源操作数的数据传送到目的操作数,要求第一个操作数必须为累加器A。
XCH A,Rn
XCH A,direct
XCH A,@Ri
XCHD A,@Ri
SWAP A
片内RAM中先进后出,后进先出,由堆栈指针SP统一管理,PUSH指令入栈,POP指令出栈,一字节为单位操作。
入栈:
PUSH A
PUSH B
出栈:
POP B
POP A
一般加法:ADD
带进位加法:ADDC
加1指令:INC
带借位减法:SUBB
减1:DEC
MUL AB
将存在A中的无符号数和B中存放的无符号数相乘,结果的低字节放在A中,高字节放在B中。
DIV AB
将存在A中的无符号数除以B中存放的无符号数,商放在A中,余数放在B中。
DA A
只能放在ADD、ADDC指令后面。