第3章 89C51单片机汇编语言简介汇编
第3章 89C51单片机汇编语言简介
第3章89C51单片机汇编语言简介教学目标本章主要介绍89C51单片机的寻址方式、指令系统、基本程序结构及汇编语言程序的编写,并给出了两个简单的应用实例。
通过本章节的学习,读者应初步掌握89C51单片机汇编语言的基本指令,并能够完成一些简单程序的编写和调试。
任务导入:基于汇编语言的静态LED显示系统的实现:利用89C51单片机的I/O端口驱动一个共阳极数码管,在数码管上循环显示0-9数字,时间间隔0.5秒。
任务分析要实现用一个数码管循环显示数字0~9的功能,我们可把数码管的段选线连接到单片的I/O口上,再通过程序让单片机的I/O口分时输出0~9对应的段码就可以了。
单片机的程序又如何编写呢?通过本章的学习,就可以用单片机的汇编语言让数码管按照要求进行显示。
任务必备知识3.1 89C51单片机指令系统3.1.1 89C51单片机指令分类89C51单片机指令系统共有111条指令。
这些指令可按不同方法进行分类:1.按字节数分单字节指令(49条)、双字节指令(45条)、三字节指令(17条)。
2.按指令的执行时间分单机器周期指令(64条)、双机器周期指令(45条)、四机器周期指令(2条)。
3.按指令的功能分数据传送指令(28条)、算术运算指令(24条)、逻辑运算指令(25条)、控制转移指令(17条)、位操作指令(17条)。
指令一般由两部分组成,即操作码和操作数。
在介绍指令系统前,我们先了解一些特殊符号的意义,这对今后程序的编写是相当有用的。
Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。
Ri——当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1)direct—内部数据存储单元的8位地址。
包含0—127(255)内部存储单元地址和特殊功能寄存地址。
#data—指令中的8位常数。
#data16—指令中的16位常数。
addr16—用于LCALL和LJMP指令中的16目的地地址,目的地址的空间为64kB程序存储器地址。
89C51单片机课件第3章
图3―1 寄存器间接寻址示意图
Microcomputer Control & Interface Technology
片内RAM
R0
30H
30H 34H
A
34H
图
MOV @R0,A间接寻址示意图
Microcomputer Control & Interface Technology
2000H+2
图3-5 相对寻址示意图
Microcomputer Control & Interface Technology
返回
3.4 MCS-51指令系统分类介绍
111条指令,按功能分类,可分为下面5大 类: (1)数据传送类(28条) (2)算术操作类(24条) (3)逻辑运算类(25条) (4)控制转移类(17条) (5)位操作类(17条)
Technology
(3) 只有乘、除两条指令的执行时间为4个机器周期 (48个时钟振荡周期)。 12MHz晶振:机器周期为1s。
3.2 指令格式 两部分组成,即操作码和操作数。 操作码用来规定指令进行什么操作 操作数则是指令操作的对象 有单字节指令、双字节指令、三字节不同长度的指令, 格式不同: (1)单字节指令:指令只有一个字节,操作码和操 作数同在一个字节中。
Microcomputer Control & Interface Technology
A 70H
MOV DPTR,#1600H ;DPTR←#1600H MOV 30H,#40H ;30H单元←#40H
PC PC+1 PC+2 M 1 0 0 程序存储空间 0 0 1 0 0 0 0 0 0 1 0 1 1 0 高位立即数 DPH 0 0 0 0 0 0 0 低位立即数 DPL
89c51计数器汇编语言
89c51计数器汇编语言
89c51是一种8位单片机,具有有限的指令集。
以下是一个简单的89c51计数器的汇编语言程序示例:
```
ORG 0H ;程序起始地址
mov R0,#00H ;将R0寄存器置零
mov R1,#01H ;将R1寄存器置一
LOOP: ;循环开始
inc R0 ;递增R0寄存器的值
;这里可以添加其他要执行的指令
cjne R0,#10H,LOOP ;比较R0寄存器的值和十进制数10,如果不相等则跳转到LOOP标签处,继续执行循环
END ;程序结束
```
这个程序将使用R0寄存器作为计数器,并在R0寄存器的值递增到十进制数10时停止循环。
在循环内部,您可以添加其他要执行的指令来实现更复杂的功能。
教学课件PPT 89C51单片机的C51程序设计
程序存储器(64K字节)
对应MOVC @DPTR访问
可位寻址片内数据存储器(16字节,128位) 允许位和字节混合访问
间接寻址片内数据存储器(256字节)
可访问片内全部RAM空间
分页寻址片外数据存储器(256字节)
对应MOVX @R0访问
4.2 C51程序设计基础
C51存储类型定义举例:
unsigned char data x,y,z; /*在内部RAM区定义了3个无符号字节型变量x,y,z*/
40M/80M/100M,而且还有很多是单周期的。
4.2 C51程序设计基础
4.2.1 C51变量/常量存储类型
C51存储类型 对应89C51单片机存储器空间
data
直接寻址片内数据存储器(128字节)
xdata
片外数据存储器(64K字节)
说明 访问速度快 对应MOVX @DPTR访问
code bdata idata pdata
序号 语句
1
=
2
if
3
表达式1 ? 表达式2 : 表达式3
4
switch/case
5
while
6
do-while
7
for
8
函数
含义 赋值语句 条件语句 条件运算符 多分支语句 循环语句 循环语句 循环语句 模块化程序设计
4.2 C51程序设计基础
表4-6 常用语句
序号 语句
1
=
2
if
3
表达式1 ? 表达式2 : 表达式3
4.3 C51程序举例
例4:把外部数据RAM中从地址2000H单元开始的100个有符号 数逐一取出,若为正数则放回原单元,若为负数则求补后放回。
单片机89C51指令
MOV @Ri, direct;
0101 011i direct
(direct)
(Ri)
MOV @Ri, #data ;
0111 011I data
#data
(Ri)
Back
(Ri)表示 Ri 中的内容为指定的 RAM 单 元。 MOV 指令在片内存储器的操作功能如 图 3-6 示。
图 3-6 传送指令在片内存储器的操作功能
例如:将片内RAM 65H单元内容47H送A,可执
行指令“MOV A,@R0”。其中R0内容为65H。 如图所示:
以指令中所指定 的R0内容(65H) ① 为指针
数据存储器
R0
65H
地址
┋
② A 47H
将片内RAM 65H 单元内容47H送A
65H ┋
47H
BACK
5、变址寻址(基址寄存器+变址寄存器间接寻址)
@Ri
direct
Rn
#data
direct
将直接地址源 direct 所指出的片内存储单 元中内容传送到直接 地址目的 direct 所 指出的片内存储单元 中 将间接寻址 (Ri 为 R0 或 R1) 所得的片内RAM 单元内容传送到直接 地址 direct 所指出 的片内存储单元中 将立即数传送到直接 地址 direct 所指出 的片内存储单元中
如:(A)=78H,(R5)=47H,(70H)=F2H, 执行指令: MOV R5,A ;(A) R5, (R5)=78H MOV R5,70H ;(70H) R5, (R5)=F2H MOV R5,#A3H; A3H R5, (R5)=A3H 注意,在89C51指令系统中没有“MOV Rn”传送指令。
第三章89C51的指令系统
5)变址寻址
变址寻址是通过“基址寄存器+变址寄存器”来进行间接寻 址 以DPTR(数据指针)或PC(程序计数器)为基址寄存器 以 A作为变址寄存器。 主要是用在查表操作。 例:MOVC A,@A+DPTR 指令代码:93H MOVC A,@A+PC
6)相对寻址
相对寻址:PC中的当前值+指令的第二字节给出的偏移量 ,相加的结果作为相对跳转指令的目的地址。 只在相对转移指令中使用 当前值:正运行指令之后的字节地址,即下一条指令起始 地址。 偏移量是带符号是数,有正负之分,以补码的形式给出, 转移范围是-128 到+127 。 例:JC 06H 指令代码:40H,06H
(A) (A) (A) (Rn) (direct) ((Ri)) 操作
机器周 期
1 1 1 1
振荡周 期
12 12 12 12
字 节
1 2 1 1
(A)0~3
((Ri))0~3
SWAP A
11000100
高4位 位
低4
1
12
1
9、堆栈指令
汇编格式 机器码 操作 机器周期 振荡 周期 字 节
PUSH direct
direct←data
2
24
3
4、以间接地址为目的操作数的指令
汇编格式 机器码 操作 机器 周期 振荡 字 周期 节
MOV
@Ri , A
1111011i
(Ri)←(A)
1
12
1
MOV
@Ri , direct
1010011i direct
(Ri)←(direct)
1
12
2
MOV
@Ri , #data
完全手册 51单片机C语言开发详解之第3章 AT89S51单片机的指令系统
技术凝聚实力 专业创新出版
3.2.9 寻址方式与存储器的对应
虽然AT89S51单片机的寻址方式有很多种,但指令对哪一个存储器 空间进行操作是由指令的操作码和寻址方式确定的。一般来说,有 以下几点。 程序存储器:只能采用立即寻址和基寄存器加变址寄存器间接寻址 的寻址方式; 特殊功能寄存器空间:只能采用直接寻址方式,不能采用寄存器间 接寻址方式; 内部数据存储器高128B:只能采用寄存器间接寻址方式,不能采用 直接寻址方式; 内部数据存储器低128B:既能采用寄存器间接寻址方式,又能采用 直接寻址方式; 外部扩展的数据存储器:只能采用MOVX指令访问。
技术凝聚实力 专业创新出版
3.3.1 以累加器A为目的操作数的指令
① MOV A, Rn ; 寄存器寻址,(Rn) → A, n=0~7 ② MOV A, direct ; 直接寻址, (direct)→ A ③ MOV A,@Ri ; 间接寻址, ((Ri))→ A,i=0或1 ④ MOV A,#data ; 立即寻址, data → A 这组指令的功能是把源操作数的内容送到累加器A,源 操作数的内容不发生改变。
技术凝聚实力 专业创新出版
3.3.2 以Rn为目的操作数的指令
① MOV Rn, A ; 寄存器寻址,(A) →Rn ② MOV Rn, direct ; 直接寻址, (direct)→ Rn ③ MOV Rn,#data ; 立即寻址,data →Rn 这组指令的功能是把源操作数的内容送到当前工作寄存 器组R0~R1中的某一个,源操作数的内容不发生改变。
技术凝聚实力 专业创新出版
3.2.6 基址加变址寻址
第3章答案指令系统1-40
第3章指令系统1,简述下列基本概念:指令,指令系统,机器语言,汇编语言,高级语言。
1、指令:CPU根据人的意图来执行某种操作的命令指令系统:一台计算机所能执行的全部指令集合机器语言:用二进制编码表示,计算机能直接识别和执行的语言汇编语言:用助记符、符号和数字来表示指令的程序语言高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言2,什么是计算机的指令和指令系统?2、见第1题。
3,简述89C51汇编指令格式。
3、操作码[目的操作数] [,源操作数]4,简述89C51寻址方式和所能涉及的寻址空间。
5,要访问特殊功能寄存器和片外数据寄存器,应采用哪些寻址方式?5、SFR:直接寻址,位寻址,寄存器寻址;片外RAM:寄存器间接寻址6,在89C51片内RAM中,已知(30H)=38H, (38H)=40H, (40H)=48H, (48H)=90H, 请分析下面各是什么指令,说明源操作数的寻址方式以及按顺序执行每条指令后的结果。
6、MOV A,40H ;直接寻址(40H)→AMOV R0,A ;寄存器寻址(A)→R0MOV P1,#0F0H ;立即数寻址0F0→P1MOV @R0,30H ;直接寻址(30H)→(R0)MOV DPTR,#3848H ;立即数寻址3848H→DPTRMOV 40H,38H ;直接寻址(38H)→40HMOV R0,30H ;直接寻址(30H)→R0MOV P0,R0 ;寄存器寻址(R0 )→P0MOV 18H,#30H ;立即数寻址30H→18HMOV A,@R0 ;寄存器间接寻址((R0)) →AMOV P2,P1 ;直接寻址(P1)→P2最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H 注意:→左边是内容,右边是单元7,对89C51片内RAM的高128字节的地址空间寻址要注意什么7、用直接寻址,位寻址,寄存器寻址8,指出下列指令的本质区别。
第3章单片机指令系统
寄存器寻址 寻址方式 寄存器间接寻址
基址加变址寄存器间接寻址 相对寻址 位寻址
1.立即寻址
操作数直接由指令给出,通常紧跟指令操作码之 后的字节是操作数,该操作数被称为立即数。
立即寻址所对应的寻址空间为:ROM 立即数:8/16位二进制数
如:MOV MOV A,#7AH DPTR, #1234H
注意:
① 适当选择SFR。寻址SFR时,可以用直接地址,也可以 用寄存器名,但后者更容易理解和阅读 如: MOV A,0D0H ; (A)←(D0H) MOV A,PSW ; (A)←(PSW)
② 适当选择累加器的表达式
累加器A表达方式 A → 寄存器寻址 ACC 直接寻址 E0H ;04H 单字节
如:
INC A INC ACC INC 0E0H
;05E0H 双字节
③ 注意地址的区别(位地址与字节地址)
如: MOV A,30H MOV C,30H ; (A)←(30H) ;(C)←(30H) 字节操作 位操作
3. 寄存器寻址
操作数在寄存器中
可用寄存器有: (1)四组工作寄存器R0~R7共32个工作寄存器 (2)SFR中有A、AB、DPTR及CY 如: MOV R3,#12H MOV A,R3
注意:① 立即数前加“#”号 ② 立即寻址方式的指令是双字节的(第1个字节为 操作码,第2个字节是操作数) ③ 操作数是放在ROM内的常数
2. 直接寻址
指令中直接给出操作数所在的单元地址或位地址
直接寻址可访问的存储空间: (1)内部RAM低128个单元 在指令中直接以单元地址形式给出,地址范围00H~7FH (2)特殊功能寄存器SFR 直接寻址是SFR惟一的寻址方式,SFR可以用单元地址给出, 也可用寄存器符号形式给出(但A、AB、DPTR除外) (3)211个位地址空间 内部RAM中可位寻址的20H~2FH单元对应的128个位地址空间 11个SFR中83个可用的位地址空间
89c51单片机汇编语言
89c51单片机汇编语言1.引言概述部分的内容可以介绍本文的主题:89C51单片机汇编语言。
该部分可以简要说明单片机的概念和应用领域,并强调本文将重点介绍汇编语言在89C51单片机中的应用和相关原理。
以下是一个示例:引言1.1 概述单片机是一种嵌入式系统中常用的微型计算机。
它具备微处理器、存储器、输入输出接口等核心部件,并通过时钟信号实现对不同外设的控制。
作为一种低成本、体积小、功耗低的控制器,单片机广泛应用于各个领域,如家电、通信、工业自动化等。
本文着重介绍了89C51单片机的汇编语言编程。
汇编语言是一种低级语言,直接操作底层硬件,非常适合在单片机上进行程序开发。
本文旨在帮助读者理解汇编语言在89C51单片机中的运行原理和应用场景。
首先,将会对89C51单片机进行详细介绍,包括其基本特性、内部结构和常见的应用领域。
然后,将会对汇编语言的基础知识进行解析,包括指令系统、寄存器和内存的使用方法等相关内容。
通过本文的学习,读者将能够掌握如何使用汇编语言编写简单的单片机程序,并了解如何利用89C51单片机进行各种实际应用的开发。
本文的结论将对所学内容进行总结,并对未来的学习和应用提出展望。
通过深入学习和实践,读者可以不仅仅掌握汇编语言的编程技巧,还能够开发出更加复杂和实用的单片机应用。
希望本文能够对读者在89C51单片机的汇编语言编程方面提供有价值的指导和帮助。
让我们开始探索吧!1.2 文章结构文章结构部分主要介绍了本文的组织结构和各章节的内容概述。
正文中介绍了89C51单片机的基本知识,以及汇编语言的基础知识。
结论部分总结了本文的主要观点,并展望了相关领域的发展方向。
在本文中,我们首先会在引言部分进行概述,介绍本文的总体内容和目的。
其次,在正文部分的第2.1节中,我们将详细介绍89C51单片机的基本知识,包括其特点、应用领域以及与其他单片机的比较等内容。
在第2.2节中,我们将深入讲解汇编语言的基础,包括指令集、寄存器、数据传送等重要概念和操作方法。
第3章 89C51单片机的指令系统
3.以直接地址为目的操作数的数据传送指令 MOV direct,A ;direct ← (A) MOV direct,#data ;direct ←data MOV direct1,direct2 ;direct1 ←(direct2) MOV direct,Rn ;direct ←(Rn) MOV direct,@Ri ;direct ←((Ri)) 这组指令的功能是将源操作数所指定的内容送 入由直接地址direct所指定的片内存储单元。 例3-2 已知:(R0)=60H,(60H)=72H, MOV 40H,@R0 ;(40H)←(60H) 指令执行过程如图3-5所示。 执行结果为: (40H)=72H
D7
Cy
D6
AC
D5
F0
D4
RS1
D3
RS0
D2
OV
D1
…
D0
P
PSW
89C51寻址方式
序号 1 2 3 4 5 6 7 方式 立即寻址 直接寻址 寄存器寻址 使用的变量 立即数 直接地址 R0~R7、A、B、Cy、 DPTR 寻址空间 程序存储器 内部RAM和特殊功能寄 存器SFR R0~R7、A、B、Cy、 DPTR
3.2.4 寄存器间接寻址
所谓寄存器间接寻址就是以寄存器中的内容作 为RAM地址,该地址中的内容才是操作数。
寄存器前加“@”标志,表示间接寻址。
例如:MOV A,@R0
例如: MOV @R0,A ;内部RAM(R0)←A 其指令操作过程示意图如图(a)所示。 MOVX @DPTR,A;外部RAM(DPTR)←A 其指令操作过程示意图如图(b)所示。
第3章89C51的指令系统
MOV P1,R4 MOV P1,A MOV P1,@R0
往P1口传送数据的指令中,数据的来源不尽相 同。数据是指令的操作对象,叫做操作数 操作数。 操作数 指令必须给出操作数所在的地方,才能进行数 据传送。寻找操作数地址的方法,称为寻址方式 寻址方式。 寻址方式
寻找操作数到底有多 少种方式呢? 少种方式呢?
@R0, 例:MOV @R0,A
片内RAM
R0
30H 30H 34H
A
34H
结果: 34H存入片内RAM的30H单元 结果:将34H存入片内RAM的30H单元 存入片内RAM
@DPTR, 例:MOVX @DPTR,A
片 外 RAM DPTR 2000H
2000H
30H
A
30H
结果: 30H存入片外RAM2000H单元 结果:将30H存入片外RAM2000H单元 存入片外RAM2000H
4. 寄存器间接寻址
寄存器间接寻址是把指定寄存器的内容作为操作数地址, 该地址所指定的单元内容作为操作数。 为了区分寄存器寻址和寄存器间接寻址,在寄存器间接寻 址中,所用到的寄存器的前面要加间接寻址符“@”。 寄存器R0、R1和数据指针DPTR可以作为间接寻址寄存器。
例如:寄存器R 内容为30H 片内RAM 30H单元的内容为45 45H 例如:寄存器R0内容为30H,片内RAM 30H单元的内容为45H。 30 解:MOV A,R0 功能是将R 的内容30 传送给累加器A 指令执行结果是累 30H 功能是将R0的内容30H传送给累加器A,指令执行结果是累 加器A中的内容为30 30H 加器A中的内容为30H。 @R0 MOV A,@R0 功能是将R 的内容30 作为操作数的地址, 30H 功能是将R0的内容30H作为操作数的地址,根据这一地址找 到内部RAM 30H单元,将其内容45 传送至累加器A 45H 到内部RAM 30H单元,将其内容45H传送至累加器A,指令执 行结果是累加器 中内容为45 累加器A 45H 行结果是累加器A中内容为45H。
《单片机原理及应用》第3章 指令系统2012-2013
片内RAM单元 地址
R0
65H
┋
② A 47H
将片内RAM 65H单 元内容47H送A
65H ┋
47H
• 5、变址寻址(基址寄存器+变址寄存器间接寻址)
• 变址寻址:以某个寄存器的内容为基地址,在这个基地址的 基础上加上地址偏移量形成真正的操作数地址。
• 89C51中采用DPTR或PC为基址寄存器,A的内容为地址偏
也可以使用它们的名字。
• 例如: • MOV A,3AH;(3AH) →A • MOV A,P1;(P1口) →A • 或: MOV A,90H; 90H是P1口的地址
• 2、寄存器寻址
• 寄存器寻址:由指令指出寄存器组R0~R7中的某一个或其他寄存器 (A,B,DPTR等)的内容作为操作数。 • 其中B寄存器仅在乘法、除法指令中为寄存器寻址,在其它指令中为 直接寻址。 • A寄存器可以寄存器寻址,又可以直接寻址(此时写作ACC)。 • 直接寻址和寄存器寻址的差别在于,直接寻址是给出操作数所在的字
第3章 指令系统
3.1 3.2 3.3 3.4 汇编语言 寻址方式 89C51指令系统 程序设计举例
3.1
汇编语言
• 指令:是CPU根据人的意图来执行某种操作的命令。 • 程序设计语言:是实现人机交换信息的基本工具,分为机 器语言、汇编语言和高级语言。 • 机器语言:用二进制编码表示每条指令,是计算机能直接 识别和执行的语言。 • 汇编语言:是用助记符、符号和数字等来表示指令的程序 设计语言。它与机器语言指令是一一对应的。
(Ri)表示Ri中的内容为指定的RAM单元地址。 MOV指令在片内存储器的操作功能如下图:
@Ri
direct
Rn
#data
第3章 89C51指令系统
第3章 89C51指令系统
3.2.2 七种寻址方式
3.2.2.1 寄存器寻址方式:
指令操作数为寄存器名,数据在寄存器中。 如: MOV A, R5; A←(R5) 该指令是将R5的内容送累加器。
程序存储器 11101 101 操作码 R7 R6 R5 XX 内部RAM
PC
A
XX
第3章 89C51指令系统
第3章 89C51指令系统 3.2.2.6 相对寻址方式:
程序存储器
PC PC+1
0100H 0101H
60H 30H
操作码 偏移量
PC rel=30H 0102H 0132H
PC+2
0102H
ALU PC 0132H XX 0102H +30H= 0132H
在MCS-51的指令系统中,相对转移指令多为2字节指令,因此目的地址一般是 PC+2+rel;如果是3字节指令,目的地址是PC+3+rel。偏移量rel是一个8位带符 号数,因此程序转移的范围在PC当前值的+127—-128之间。
第3章 89C51指令系统
第3章 89C51指令系统
3.1 汇编语言 3.2 寻址方式 3.指令 3.3.2 算术运算指令 3.3.3 逻辑操作指令 返回主目录 3.3.4 控制程序转移类指令 3.3.5 位操作(布尔处理)类指令
练习
第3章 89C51指令系统
在指令中直接给出操作数的寻址方式,这个操作数叫立 即数。 如: MOV A, #3AH 该指令是将立即数3AH送累加器,由于MCS-51单片机的片 内存储器是8位存储器,因此立即数一般为8位二进制数。 在MCS-51的指令系统中,用#来识别立即数。
ATM89C51单片机简介(中英双语)
ATM89C51单⽚机简介(中英双语)原⽂:The Introduction of AT89C51DescriptionThe AT89C51 is a low-power, high-performance CMOS 8-bit microcomputer with 4K bytes of Flash programmable and erasable read only memory (PEROM). The device is manufactured using Atmel’s high-density nonvolatile memory technology and is compatible with the industry-standard MCS-51 instruction set and pinout. The on-chip Flash allows the program memory to be reprogrammed in-system or by a conventional nonvolatile memory programmer. By combining a versatile 8-bit CPU with Flash on a monolithic chip, the Atmel AT89C51 is a powerful microcomputer which provides a highly-flexible and cost-effective solution to many embedded control applications.Function characteristicThe AT89C51 provides the following standard features: 4K bytes of Flash, 128 bytes of RAM, 32 I/O lines, two 16-bittimer/counters, a five vector two-level interrupt architecture, a full duplex serial port, on-chip oscillator and clock circuitry. In addition, the AT89C51 is designed with static logic for operation down to zero frequency and supports two software selectable power saving modes. The Idle Mode stops the CPU while allowing the RAM, timer/counters, serial port and interrupt system to continue functioning. The Power-down Mode saves the RAM contents but freezes the oscillator disabling all other chip functions until the next hardware reset.Pin DescriptionVCC:Supply voltage.GND:Ground.Port 0Port 0 is an 8-bit open-drain bi-directional I/O port. As an output port, each pin can sink eight TTL inputs. When 1s are written to port 0 pins, the pins can be used as highimpedance inputs.Port 0 may also be configured to be the multiplexed loworder address/data bus during accesses to external program and data memory. In this mode P0 has internal pullups.Port 0 also receives the code bytes during Flash programming,and outputs the code bytes during programverification. External pullups are required during programverification.Port 1Port 1 is an 8-bit bi-directional I/O port with internal pullups.The Port 1 output buffers can sink/source four TTL inputs.When 1s are written to Port 1 pins they are pulled high by the internal pullups and can be used as inputs. As inputs,Port 1 pins that are externally being pulled low will source current (IIL) because of the internal pullups.Port 1 also receives the low-order address bytes during Flash programming and verification.Port 2Port 2 is an 8-bit bi-directional I/O port with internal pullups.The Port 2 output buffers can sink/source four TTL inputs.When 1s are written to Port 2 pins they are pulled high by the internal pullups and can be used as inputs. As inputs,Port 2 pins that are externally being pulled low will source current, because of the internal pullups.Port 2 emits the high-order address byte during fetches from external program memory and during accesses to external data memory that use 16-bit addresses. In this application, it uses strong internal pullupswhen emitting 1s. During accesses to external data memory that use 8-bit addresses, Port 2 emits the contents of the P2 Special Function Register.Port 2 also receives the high-order address bits and some control signals during Flash programming and verification.Port 3Port 3 is an 8-bit bi-directional I/O port with internal pullups.The Port 3 output buffers can sink/source four TTL inputs.When 1s are written to Port 3 pins they are pulled high by the internal pullups and can be used as inputs. As inputs,Port 3 pins that are externally being pulled low will source current (IIL) because of the pullups.Port 3 also serves the functions of various special features of the AT89C51 as listed below:Port 3 also receives some control signals for Flash programming and verification.RSTReset input. A high on this pin for two machine cycles while the oscillator is running resets the device.ALE/PROGAddress Latch Enable output pulse for latching the low byte of the address during accesses to external memory. This pin is also the program pulse input (PROG) during Flash programming.In normal operation ALE is emitted at a constant rate of 1/6 the oscillator frequency, and may be used for external timing or clocking purposes. Note, however, that one ALE pulse is skipped during each access to external Data Memory.If desired, ALE operation can be disabled by setting bit 0 of SFR location 8EH. With the bitset, ALE is active only during a MOVX or MOVC instruction. Otherwise, the pin is weakly pulled high. Setting the ALE-disable bit has no effect if the microcontroller is in external execution mode.PSENProgram Store Enable is the read strobe to external program memory.When the AT89C51 is executing code from external program memory, PSEN is activated twice each machine cycle, except that two PSEN activations are skipped during each access to external data memory.EA/VPPExternal Access Enable. EA must be strapped to GND in order to enable the device to fetch code from external program memory locations starting at 0000H up to FFFFH. Note, however, that if lock bit 1 is programmed, EA will be internally latched on reset.EA should be strapped to VCC for internal program executions.This pin also receives the 12-volt programming enable voltage(VPP) during Flash programming, for parts that require12-volt VPP.XTAL1Input to the inverting oscillator amplifier and input to the internal clock operating circuit.XTAL2Output from the inverting oscillator amplifier.Oscillator CharacteristicsXTAL1 and XTAL2 are the input and output, respectively,of an inverting amplifier which can be configured for use as an on-chip oscillator, as shown in Figure 1.Either aquartz crystal or ceramic resonator may be used. To drive the device from an external clock source, XTAL2 should be left unconnected while XTAL1 is driven as shown in Figure 2.There are no requirements on the duty cycle of the external clock signal, since the input to the internal clocking circuitry is through a divide-by-two flip-flop, but minimum and maximum voltage high and low time specifications must be observed.Figure 1. Oscillator Connections Figure 2. External Clock Drive ConfigurationIdle ModeIn idle mode, the CPU puts itself to sleep while all the onchip peripherals remain active. The mode is invoked by software. The content of the on-chip RAM and all the special functions registers remain unchanged during this mode. The idle mode can be terminated by any enabled interrupt or by a hardware reset.It should be noted that when idle is terminated by a hard ware reset, the device normally resumes program execution,from where it left off, up to two machine cycles before the internal reset algorithm takes control. On-chip hardware inhibits access to internal RAM in this event, but access to the port pins is not inhibited. To eliminate the possibility of an unexpected write to a port pin when Idle is terminated by reset, the instruction following the one that invokes Idle should not be one that writes to a port pin or to external memory.Power-down ModeIn the power-down mode, the oscillator is stopped, and the instruction that invokes power-down is the last instruction executed. The on-chip RAM and Special Function Registers retain their values until the power-down mode is terminated. The only exit from power-down is a hardware reset. Reset redefines the SFRs but does not change the on-chip RAM. The reset should not be activated before VCC is restored to its normal operating level and must be held active long enough to allow the oscillator to restart and stabilize.Program Memory Lock BitsOn the chip are three lock bits which can be left unprogrammed (U) or can be programmed (P) to obtain the additional features listed in the table below.When lock bit 1 is programmed, the logic level at the EA pin is sampled and latched during reset. If the device is powered up without a reset, the latch initializes to a random value, and holds that value until reset is activated. It is necessary that the latched value of EA be in agreement with the current logic level at that pin in order for the device to function properly.译⽂:AT89C51的介绍描述AT89C51是⼀个低电压,⾼性能CMOS 8位单⽚机带有4K字节的可反复擦写的程序存储器(PENROM)。
89C51单片机C语言编程
第三章单片机C语言程序设计一.C语言的特点1. 语言简洁、紧凑,使用方便、灵活。
2. 运算符丰富。
3. 数据结构丰富。
具有现代化语言的各种数据结构。
4. 可进行结构化程序设计。
5. 可以直接对计算机硬件进行操作。
6. 生成的目标代码质量高,程序执行效率高。
7. 可移植性好。
C语言程序采用函数结构,每个C语言程序由一个或多个函数组成,在这些函数中至少应包含一个主函数main(),也可以包含一个main()函数和若干个其它的功能函数。
不管main()函数放于何处,程序总是从main() 函数开始执行,执行到main()函数结束则结束。
在main()函数中调用其它函数,其它函数也可以相互调用, fimain()函数只能调用其它的功能函数,而不能被其它的函数所调用。
功能函数可以是C语言编译器提供的库函数,也可以是由用户定义的自定义函数。
在编制C程序时,程序的开始部分一般是预处理命令、函数说明和变量定义等。
用C 语言编写89C51单片机程序与用汇编语言编写 9C51单片机程序不一样。
用汇编语言编写89C51单片机程序必须要考虑其存储器结构,尤其必须考虑其片内数据存储器与特殊功能 寄存器的使用以及按实际地址处理端口数据o用C 语言编写的89C51单片机应用程序,则不用像 汇编语言那样须具体组织、分配存储器资源和处理端口必须要与单片机的存储结构相关联,否则编译器不能正 确地映射定位。
数据,但在C,C语言编写单片机应用程序时,需根据单片机存储结构及内部资源定义相应的数据类型和变量,而标准的C语言程序不需要考虑这些问题;C54包含的数据类型、变量存储模式、输入输出处理、函数等方面与标准的C语言有一定的区别。
其它的语法规则、程序结构及程序设计方法等与标准的C语言程序设计相同。
现在支持89C51系列单片机的C语言编译器有很多种,女0American Automation> Avocet、BSO/TASKING、DUNFIELD SHAREWARE>KEIL/Franklin等。
89C51单片机简介
89C51单片机简介1 89C51单片机简介 (1)2 时序 (2)3引脚及其功能 (2)4输入/输出(I/O)引脚P0口、P1口、P2口及P3口 (4)1 89C51单片机简介目前,89C51单片机在工业检测领域中得到了广泛的应用,因此我们可以在许多单片机应用领域中,配接各种类型的语音接口,构成具有合成语音输出能力的综合应用系统,以增强人机对话的功能。
89C51是Intel公司生产的一种单片机,在一小块芯片上集成了一个微型计算机的各个组成部分。
每一个单片机包括:一个8位的微型处理器CPU;一个256K的片内数据存储器RAM;片内程序存储器ROM;四个8位并行的I/O接口P0-P3,每个接口既可以输入,也可以输出;两个定时器/记数器;五个中断源的中断控制系统;一个全双工UART的串行I/O 口;片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。
最高允许振荡频率是12MHZ。
以上各个部分通过内部总线相连接。
下面简单介绍下其各个部分的功能。
中央处理器CPU是单片微型计算机的指挥、执行中心,由它读人用户程序,并逐条执行指令,它是由8位算术/逻辑运算部件(简称ALu)、定时/控制部件,若干寄存器A、B、B5w、5P以及16位程序计数器(Pc)和数据指针寄存器(DM)等主要部件组成。
算术逻辑单元的硬件结构与典型微型机相似。
它具有对8位信息进行+、-、x、/ 四则运算和逻辑与、或、异或、取反、清“0”等运算,并具有判跳、转移、数据传送等功能,此外还提供存放中间结果及常用数据寄存器。
控制器部件是由指令寄存器、程序计数器Pc、定时与控制电路等组成的。
指令寄存器中存放指令代码。
枷执行指令时,从程序存储器中取来经译码器译码后,根据不同指令由定时与控制电路发出相应的控制信号,送到存储器、运算器或I/O接口电路,完成指令功能。
程序计数器Pc 程序计数器Pc用来存放下一条将要执行的指令,共16位.可对以K字节的程序存储器直接寻址c指令执行结束后,Pc计数器自动增加,指向下一条要执行的指令地址。
第三章--89C51汇编语言指令系统
指令举例
MOV A,#05H MOV A,@R0 MOV R3,A MOV R5,33H MOV 22H,A MOV 40H,41H MOV 43H,#3AH MOV MOV A,R7 A,40H
A
(A=7CH)
3.3.5 控制转移类(使用较少但很重要)
共16种助记符:
无条件小类 JMP @A+DPTR 间接转移(散转) SJMP rel 一字节补码短跳转 AJMP 11位地址标号 2K空间 LJMP 16位地址标号 64K空间 条件转移小类 JZ rel / JNZ rel 为0/非0转 JC rel / JNC rel 有/无进位转 JB bit,rel / JNB bit,rel 置位/复位转 CJNE [x],[y],rel 比较不等转 DJNZ x, rel 减1不为0转 调用和返回小类 ACALL / LCALL 短调用/长调用 RET / RETI 子程序返回/中断返回
3.3.2 数据传送类
共8种助记符: MOV CPU与内部RAM和SFR之间传送 MOVX CPU与外部RAM和I/O之间传送 MOVC CPU对程序存储器ROM读操作 PUSH 压栈 POP 弹栈 XCH 字节交换 XCHD 半字节交换 SWAP 累加器自身半字节交换
MOV 指令详解(使用最频繁)
3.3 89C51单片机指令系统
要求:了解汇编指令按功能分类 能读懂简单程序片段
3.3.1 5种指令类别:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3章89C51单片机汇编语言简介教学目标本章主要介绍89C51单片机的寻址方式、指令系统、基本程序结构及汇编语言程序的编写,并给出了两个简单的应用实例。
通过本章节的学习,读者应初步掌握89C51单片机汇编语言的基本指令,并能够完成一些简单程序的编写和调试。
任务导入:基于汇编语言的静态LED显示系统的实现:利用89C51单片机的I/O端口驱动一个共阳极数码管,在数码管上循环显示0-9数字,时间间隔0.5秒。
任务分析要实现用一个数码管循环显示数字0~9的功能,我们可把数码管的段选线连接到单片的I/O口上,再通过程序让单片机的I/O口分时输出0~9对应的段码就可以了。
单片机的程序又如何编写呢?通过本章的学习,就可以用单片机的汇编语言让数码管按照要求进行显示。
任务必备知识3.1 89C51单片机指令系统3.1.1 89C51单片机指令分类89C51单片机指令系统共有111条指令。
这些指令可按不同方法进行分类:1.按字节数分单字节指令(49条)、双字节指令(45条)、三字节指令(17条)。
2.按指令的执行时间分单机器周期指令(64条)、双机器周期指令(45条)、四机器周期指令(2条)。
3.按指令的功能分数据传送指令(28条)、算术运算指令(24条)、逻辑运算指令(25条)、控制转移指令(17条)、位操作指令(17条)。
指令一般由两部分组成,即操作码和操作数。
在介绍指令系统前,我们先了解一些特殊符号的意义,这对今后程序的编写是相当有用的。
Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。
Ri——当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1)direct—内部数据存储单元的8位地址。
包含0—127(255)内部存储单元地址和特殊功能寄存地址。
#data—指令中的8位常数。
#data16—指令中的16位常数。
addr16—用于LCALL和LJMP指令中的16目的地地址,目的地址的空间为64kB程序存储器地址。
#addr11—用于ACALL和AJMP指令中的11目的地地址,目的地址必须放在与下条指令第一个字节同一个2kB程序存储器空间之中。
rel—8位带符号的偏移字节,用于所有的条件转移和SJMP等指令中,偏移字节对于下条指令的第一个字节开始的-128——+127范围内。
@—间接寄存器寻址或基址寄存器的前缀。
/—为操作的前缀,声明对该位操作数取反。
DPTR—数据指针。
bit—内部RAM和特殊功能寄存器的直接寻址位。
A—累加器。
B—累加器B,用于乘法和除法指令中。
C—进位标志位。
(x)—某地址单元中的内容。
((x))—由X寻址单元中的内容。
3.1.2 汇编指令格式各种汇编语言的语句格式是基本相同的,表示如下:[标号:] 操作码助记符[第一操作数] [,第二操作数] [,第三操作数] [;注释]即一条汇编语句是由标号、操作码、操作数和注释四个都分所组成。
其中方括号括起来的是可选择部分,可有可无,视需要而定。
1.标号标号是表示指令位置的符号地址,它是以英文字母开始的字母或数字组成的字符串,并以“:”结尾。
通常在子程序入口或转移指令的目标地址处才赋予标号。
有了标号,程序中的其它语句才能访问该语句。
89C51汇编语言有关标号的规定如下:1)标号是由ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
2)不能使用本汇编语言已经定义了的符号作为标号,如指令助记符,伪指令助记符以及寄存器的符号名称等。
3)标号后边必须跟以冒号。
4)同一标号在一个程序中只能定义一次,不能重复定义。
5)一条语句可以有标号,也可以没有标号,标号的有无决定着本程序中的其它语句是否需要访问这条语句。
下面例举一些例子,以加深了解。
错误的标号正确的标号2BT:(以数字开头)LOOP4:BEGIN(无冒号)STABL:TB+5T:(“+”号不能在标号中出现)TABLE:ADD:(用了指令助记符)Q¥:2.操作码操作码助记符是表示指令操作功能的英文缩写。
每条指令都有操作码,它是指令的核心部分。
操作码用于规定本语句执行的操作,操作码可为指令的助记符或伪指令的助记符,操作码是汇编指令中唯一不能空缺的部分。
3.操作数操作数用于给指令的操作提供数据或地址。
在一条指令中,可能没有操作数,也可能只包括一项,也可能包括二项、三项。
各操作数之间以逗号分隔,操作码与操作数之间以空格分隔。
操作数可以是立即数,如果立即数是二进制数,则最低位之后加“B”;如果立即数是十六进制数,则最低位之后加“H”;如果立即数是十进制数,则数字后面不加任何标记。
操作数可以是本程序中已经定义过的标号或标号表达式,例如MOON是一个已经定义的标号,则表达式MOON+1或MOON-1都可以作为地址来使用。
操作数也可以是寄存器名。
此外,操作数还可以是位符号或表示偏移量的操作数。
相对转移指令中的操作数还可使用一个特殊的符号“$”,它表示本相对转移指令所在的地址,例如:JNB TF0,$ 表示当TF0位不为0时,就转移到该指令本身,以达到程序在“原地踏步”等待的目的。
4.注释注释不属于语句的功能部分,它只是对每条语句的解释说明,它可使程序的文件编制显得更加清楚,是为了方便阅读程序的一种标注。
只要用“;”开头,即表明后面为注释内容,注释的长度不限,一行不够时,可以换行接着写,但换行时应注意在开头使用“;”号。
5.分界符(分隔符)分界符可以是空格、冒号、分号和逗号等。
这些分界符的使用情况如下:1)冒号(:)用于标号之后。
2)空格()用于操作码和操作数之间。
3)逗号(,)用于操作数之间。
4)分号(;)用于注释之前。
例如MOV A,#0AH表示取一个立即数0AH(十六进制,如转换成二进制为00001010B)传送到A累加器。
3.1.3 寻址方式寻址的“地址”即为操作数所在单元的地址,绝大部分指令执行时都需要用到操作数,那么到哪里去取得操作数呢?最易想到的就是告诉CPU操作数所在的地址单元,从那里可取得响应的操作数,这便是“寻址”之意。
89C51的寻址方式很多,使用起来也相当方便,功能也很强大,灵活性强。
下面我们分别讨论几种寻址方式的原理。
1.直接寻址方式指令中操作数直接以单元地址形式出现,例如:MOV A,35H这条指令的意义是把内部RAM中的35H单元中的数据内容传送到累加器A中。
值得注意的是直接寻址方式只能使用8位二进制地址,因此这种寻址方式仅限于内部RAM进行寻址。
低128位单元在指令中直接以单元地址的形式给出。
对于特殊功能寄存器可以使用其直接地址(MOV A,80H)进行访问,还可以以它们的符号形式(MOV A,P0)给出,但是特殊功能寄存器只能用直接寻址方式访问,而无其它方法。
2.寄存器寻址方式寄存器寻址对选定的8个工作寄存器R0-R7进行操作,即操作数在寄存器中,因此指定了寄存器就得到了操作数,寄存器寻址的指令中以寄存器的符号来表示寄存器,例如:MOV A,R3这条指令的意义是把所用的工作寄存器组中的R3的内容送到累加器A中。
需要注意的是工作状态寄存器的选择是通过程序状态字寄存器来控制的,在这条指令前,应通过PSW设定当前工作寄存器组。
3.寄存器间接寻址寄存器寻址方式在寄存器中存放的是操作数,而寄存器间接寻址方式在寄存器中存放的则为操作数的地址,也即操作数是通过寄存器所指向的地址单元得到的,这便是寄存器间接寻址名称的由来。
例如:MOV A,@R1这条指令的意义是R0寄存器指向地址单元中的内容送到累加器A中。
假如R1=#67H,那么是将67H单元中的数据送到累加器A中。
寄存器间接寻址方式可用于访问内部RAM或外部数据存储器。
访问内部RAM或外部数据存储器的低256字节时,只通过R0和R1作为间接寄存器。
然而内部RAM的高128字节地址与专用寄存器的地址是重叠的,所以这种寻址方式不能用于访问特殊功能寄存器。
外部数据存储器的存储空间为64KB,可采用DPTR作为间址寄存器进行访问,例如:MOVX A,@DPTR这条指令的意义是与上述类似,不再赘述。
4.立即寻址立即寻址就是把操作数直接在指令中给出,即操作数包含在指令中,指令操作码的后面紧跟着操作数,一般把指令中的操作数称为立即数。
为了与直接寻址方式相区别,在立即数前加上“#”符号,例如:MOV A,#0CH这条指令的意义是将0CH这个操作数送到累加器A中。
立即数存放在程序存储器中。
5.变址寻址变址寻址是以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,将两寄存器的内容相加形成16位地址作为操作数的实际地址。
例如:MOV A,@A+DPTRMOVX A,@A+PCJMP@A+DPTR在这三条指令中,A作为偏移量寄存器,DPTR或PC作为变址寄存器,A作为无符号数与DPTR或PC的内容相加,得到访问的实际地址。
其中前两条是程序存储器读指令,后一条是无条件转移指令。
6.位寻址在89C51单片机中,RAM中的20H—2FH字节单元对应的位地址为00H—7FH,特殊功能寄存器中的某些位也可进行位寻址,这些单元既可以采用字节方式访问它们,也可采用位寻址的方式访问它们。
7.相对寻址相对寻址方式是为了程序的相对转移而设计的,以PC的内容为基址,加上给出的偏移量作为转移地址,从而实现程序的转移。
转移的目的地址可参见如下表达式:目的地址=转移指令所在地址+转移指令字接数+偏移量值得注意的是,偏移量是有正负号之分的,偏移量的取值范围是当前PC值的-128—+127之间。
偏移量是以补码形式给出的。
3.1.4 数据传送类指令数据传送指令共有28条,数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。
如果要求在进行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令,数据传送指令不影响标志CY,AC和OV,但可能会对奇偶标志P有影响。
1.以累加器A为目的操作数类指令(4条)这4条指令的作用是把源操作数指向的内容送到累加器A。
有直接、立即数、寄存器和寄存器间接寻址方式:MOV A, data ;(data)→(A) 直接单元地址中的内容送到累加器A。
MOV A, #data ; #data→(A) 立即数送到累加器A。
MOV A, Rn ;(Rn)→(A) Rn中的内容送到累加器A。
MOV A, @Ri ;((Ri))→(A) Ri内容指向的地址单元中的内容送到累加器A。
2.以寄存器Rn为目的操作数的指令(3条)这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。
有直接、立即和寄存器寻址方式:MOV Rn, data ;(data)→(Rn) 直接寻址单元中的内容送到寄存器Rn。