单片机89c51指令及操作汇总
数据传送指令以累加器A为目的操作数的指令:MOV A,Rn (Rn)→AMOV A,direct (direct)→A MOV A,@Ri (Ri)→AMOV A,#data (#data)→A以寄存器Rn为目的操作数的指令:MOV Rn,A (A)→Rn MOV Rn,direct (direct)→Rn MOV Rn,#data (#data)→Rn 以直接地址为目的操作数的指令:MOV direct,A (A)→direct MOV direct,Rn (Rn)→direct MOV direct,direct(direct)→direct MOV direct,@Ri (Ri)→direct MOV direct,#data(#data)→direct 以间接地址为目的操作数的指令:MOV @Ri,A (A)→RiMOV @Ri,direct (direct)→Ri MOV @Ri,#data (data)→Ri16位数据传送指令:MOV DPTR,#data16dataH→DPH,dataL→DPL 查表指令:MOVC A,@A+DPTR 先pc+1→pc,后A+DPTR→A,一字节MOVC A,@A+PC 先pc+1→pc,后A+PC →A,一字节累加器A与片外RAM传送指令:MOVX A,@Ri Ri→A,且使=0MOVX A,@DPTR DPTR→A, 且使=0 MOVX @Ri,A A→Ri, 且使=0MOVX @DPTR,A A→DPTR,且使=0栈操作指令:入栈 PUSH direct 先SP+1→SP,后direct→SP出栈 POP direct先SP→direct,后SP-1→SP交换指令:1)字节交换指令XCH A,Rn A←→RnXCH A,direct .XCH A,@Ri .2)低半字节交换指令XCHD A,@Ri A0~3←→Ri0~33)累加器A中高4位和低4位交换SWAP A A0~3←→A4~7算术运算指令加法类指令ADD A ,# data A ←(A)+data ADD A ,directA ←(A)+(direct)ADD A ,Rn A ←(A)+(Rn)ADD A ,@Ri A ←(A)+((Ri))带进位加法指令ADDC A ,# dataA ←(A)+ data +(CY)ADDC A ,directA ←(A)+(direct)+(CY)ADDC A ,RnA ←(A)+(Rn)+(CY)ADDC A ,@RiA ←(A)+((Ri))+(CY)带借位减法指令SUBB A ,# dataA ←(A) - data -(CY)SUBB A ,directA ←(A) -(direct)-(CY)SUBB A ,RnA ←(A) –(Rn)-(CY)SUBB A ,@RiA ←(A) -((Ri))-(CY)乘法指令MUL AB BA←(A)×(B)除法指令DIV AB A←(A)÷(B)之商,B←(A)÷(B)之余数加1指令INC A A ←(A)+ 1 INC directdirect ←(direct)+ 1 INC Rn Rn ←(Rn)+ 1 INC @Ri Ri ←((Ri))+ 1 INC DPTR DPTR ←(DPTR)+ 1 减1指令DEC A A ←(A)-1DEC direct direct ←(direct)-1 DEC Rn Rn ←(Rn)-1DEC @Ri Ri ←((Ri))-1十进制调整指令DA A 调整累加器内容为BCD数逻辑操作指令累加器清零指令:CLR A A ←0 累加器按位取反指令:CPL A循环左移 RL A循环右移 RR A带进位循环左移 RLC A带进位循环右移 RRC A逻辑与运算指令ANL A ,#data A ←(A)∧data ANL A ,directA ←(A)∧(direct) ANL A ,Rn A ←(A)∧(Rn)ANL A ,@Ri A ←(A)∧((Ri)) ANL direct ,Adirect ←(direct)∧(A) ANL direct ,#datadirect ←(direct)∧data逻辑或运算指令ORL A ,#data A ←(A)∨data ORL A ,directA ←(A) ∨(direct) ORL A ,Rn A ←(A) ∨(Rn) ORL A ,@Ri A ←(A) ∨((Ri))ORL direct ,Adirect ←(direct) ∨(A) ORL direct ,#datadirect ←(direct) ∨data逻辑异或运算指令XRL A ,#data A ←(A)dataXRL A ,direct A ←(A) ( direct) XRL A ,Rn A ←(A) (Rn) XRL A ,@Ri A ←(A) ((Ri))XRL direct ,Adirect ←(direct) (A) XRL direct ,#datadirect ←(direct) data控制转移类指令长转移指令 LJMP addr16PC ← addr16 短转移指令AJMP addr11;PC←(PC)+2,PC10~0←addr11,PC15~11不变相对转移指令SJMP rel ;PC ←(PC) + 2,PC ←(PC) + rel间接转移指令JMP @A+DPTR ; PC ←(A)+(DPTR)空操作指令NOP PC+1→PC判零转移指令JZ rel;PC+2→PC当A全为0时,PC=PC+rel,当A不为全0时,程序顺序执行。
JNZ relPC+2→PC当A不全为0时, PC+rel→PC,当A为全0时,程序顺序执行。
比较条件转移指令CJNE A ,# data ,relPC+3→PC;若# data <A,则PC+rel→PC,且0→CY;若# data >A,则PC+rel→PC,且1→CY;若# data =A,则顺序执行,且0→CY。
CJNE A ,direct ,relPC+3→PC;若direct<A,则PC+rel→PC,且0→CY;若direct>A,则PC+rel→PC,且1→CY;若direct=A,则顺序执行,且0→CY。
CJNE Rn ,#data ,relPC+3→PC;若#data < Rn,则PC+rel→PC,且0→CY;若#data > Rn,则PC+rel→PC,且1→CY;若#data = Rn,则顺序执行,且0→CY。
CJNE @Ri ,# data ,relPC+3→PC;若# data < Ri,则PC+rel→PC,且0→CY;若# data > Ri,则PC+rel→PC,且1→CY;若# data = Ri,则顺序执行,且0→CY。
循环转移指令DJNZ Rn ,relPC+2→PC,Rn-1→Rn;当Rn≠0时,则PC+rel→PC;当Rn=0时,则结束循环,程序往下执行。
DJNZ direct ,relPC+3→PC, direct -1→direct;当direct≠0时,则PC+rel→PC;当direct =0时,则结束循环,程序往下执行。
长调用指令LCALL addr16PC+3→PCSP+1→SPPC7~0→SPSP+1→SPPC15~8→SPaddr15~0→PC返回指令RET SP→PC15~8,弹出断点高8位SP-1→SPSP→PC7~0,弹出断点低8位SP-1→SPRETI SP→PC15~8,,SP-1→SPSP→PC7~0,SP-1→SP位操作类指令1、位数据传送指令MOV C , bit CY←(bit)MOV bit , C bit←(CY)2、位修正指令1)位请0指令CLR C CY← 0CLR bit bit ← 02)位置1指令SETB C CY← 1SETB bit bit ← 13)位取反指令CPL C C←CPL bit bit ←位逻辑“与”运算指令(斜杠“/”表示将该位值取出后,先求反、再参加运算,不改变位地址中原来的值。
)ANL C ,bit CY←(CY)∧(bit)ANL C ,/bit CY←(CY)∧()位逻辑“或”运算指令ORL C ,bit CY←(CY)∨(bit)ORL C ,/bit CY←(CY)∨()判布尔累加器C转移指令JC relPC+2→PC;若C=1,则PC+rel→PC;若C=0,则顺序往下执行。
JNC relPC+2→PC;若C=0,则PC+rel→PC;若C=1,则顺序往下执行。
判位变量转移指令JB bit ,relPC+3→PC;若bit =1,则PC+rel→PC;若bit =0,则顺序往下执行。
JNB bit ,relPC+3→PC;若bit =0,则PC+rel→PC;若bit =1,则顺序往下执行。
JBC bit ,relPC+3→PC;若bit =1,则PC+rel→PC,0→bit若bit =0,则顺序往下执行。
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时停止循环。
在循环内部,您可以添加其他要执行的指令来实现更复杂的功能。
单片机89C51精确延时
单片机89C51精确延时高手从菜鸟忽略作起之(六)一,晶振与周期:89C51晶振频率约为12MHZ。
在此基础上,计论几个与单片机相关的周期概念:时钟周期,状态周期,机器周期,指令周期。
晶振12MHZ,表示1US振动12次,此基础上计算各周期长度。
时钟周期(W sz):Wsz=1/12=0.083us状态周期(W zt) Wzt=2*Wsz=0.167us机器周期(W jq): Wjq=6*Wzt=1us指令周期(W zl): W zl=n*Wjq(n=1,2,4)二,指令周期汇编指令有单周期指令,双周期指令,四周期指令。
指令时长分别是1US,2US,4US.指令的周期可以查询绘编指令获得,用下面方法进行记忆。
1.四周期指令:MUL,DIV2.双周期指令:与SP,PC相关(见汇编指令周期表)3.单周期指令:其他(见汇编指令周期表)三,单片机时间换算单位1.1秒(S)=1000毫秒(ms)2.1毫秒(ms)=1000微秒(us)3.1微秒(us)=1000纳秒(ns)单片机指令周期是以微秒(US)为基本单位。
四,单片机延时方式1.计时器延时方式:用C/T0,C/T1进行延时。
2.指令消耗延时方式:本篇单片机精确延时主要用第2种方式。
五,纳秒(ns)级延时:由于单片机指令同期是以微秒(US)为基本单位,因此,纳秒级延时,全部不用写延时。
六,微秒(US)级延时:1.单级循环模式:delay_us_1最小值:1+2+2+0+2+1+2+2=12(US),运行此模式最少需12US,因此12US以下,只能在代码中用指定数目的NOP来精确延时。
最大值:256*2+12-2=522(US),256最大循环次数,2是指令周期,12是模式耗时,-2是模式耗时中计1个时钟周期。
延时范围:值域F(X)[12,522],变量取值范围[0,255].函数关系:Y=F(x):y=2x+12,由输入参数得出延时时间。
反函数:Y=F(x):y=1/2x-6:由延时时间,计算输入参数。
教学课件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个有符号 数逐一取出,若为正数则放回原单元,若为负数则求补后放回。
单片机实用教程_8 89C51单片机并行输入输出
P3 口的第二功能
口线 P3.0 P3.1 信号 RXD TXD 功 能 串行口数据输入(接收数据) 串行口数据输出(发3.5
P3.6 P3.7
INT0 INT1 T0 T1
WR RD
外部中断0输入 外部中断1输入 定时器0的外部输入(计数输入) 定时器1的外部输入(计数输入)
外部数据存储器写选通控制输出 外部数据存储器读选通输出控制
8.2 并行输入/输出端口P0、P1、P1和P3 8.2.1 P0端口 ⑴ P0口的结构: P0口有8位, 每一位由一个输出锁存器、两个三态 输入缓冲器和输出驱动电路及控制电路组成。
⑵ P0口作通用的I/O口使用
P0口是漏极开路的8位准双向I/O口. P0口为特殊功能寄存器, 既可以用直接寻址方式对P0口进行字节操作, 也可以按按位寻址方式,进行位操作。
P2端口及其各位的地址
位地址/位定义 A5H P2.5 A4H P2.4 A3H P2.3 A2H P2.2 A1H P2.1 LSB A0H P2.0 字节地址 A0H
P2口作输出时,直接用传送指令进行操作。 例如: MOV P2 ,A P2口作输入时, 要先写“1”, 然后读入(准双向口)。 例如: MOV P2 ,#0FFH MOV A ,P2
表8.1 P0端口及其各位的地址
SFR MSB 位地址/位定义 LSB 字节地址
P0
87H
P0.7
86H
P0.6
85H
P0.5
84H
P0.4
83H
P0.3
82H
P0.2
81H
P0.1
80H
P0.0
80H
P0口作输出时,直接用传送指令进行操作。 例如: MOV P0 ,A P0口作输入时,要先写“1”,然后读入(准双向口)。 例如: MOV P0 ,#0FFH MOV A ,P0
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计数器自动增加,指向下一条要执行的指令地址。
B89C51产品使用手册
B89C51 高可靠8位微控制器1.B89C51简介B89C51是一种高速低功耗的8位微控制器。
B89C51指令系统同80C51完全兼容。
它包括一个128 Bytes的RAM、4个8- bit的控制双向口、两个16-bit的定时/计数器、一个串行通信口。
它具有 5 个中断源,分为两个优先级。
B89C51有两种低功耗方式:待机方式和掉电方式。
具体采用哪种方式可以由软件设定。
待机方式下,内部处理器的时钟关掉,但外围电路可以继续工作;在掉电方式下,振荡器被停振。
外部时钟可以在任何情况或任何时间停下来,它不会影响内部处理器。
2.主要特征• 全静态设计8位 CMOS 微控制器• 电压范围 4 .5V~5.5V• 128 bytes 的 SRAM• 64KB 的程序存储地址空间• 64KB 的数据存储地址空间• 四组八位双向口• 两个16位定时/计数器• 一个全双工的串行口• 具有5个中断源,两级中断处理能力• 封装形式- DIP40:B89C51-24/43.管脚图40- PIN DIP B89C514.引脚描述5.总体结构框图6.功能描述B89C51的结构包括:一个核控制器、周边各种寄存器组成。
四个通用 I/O 口,128Bytes 的RAM , 两个定时计数器,一个串行口组成。
此处理器支持111种不同的操作码,可寻址64KB 的程序存储地址空间和64KB 的数据存储地址空间。
新增加的外围管脚为了更好的增加I/O 口的功能 ,新增加了 P4口。
它具有4位可位寻址的I/O 口和2个外部中断2INT ,3INT 。
它的封装为44引脚的 PLCC 封装。
6.1.2INT / 3INT两个新增加的外部中断2INT 和3INT 的功能和标准的80C52的外部中断0和1的功能相类似的。
它的功能由外部中断寄存器 XICON 的位来决定。
在80C52中的XICON 寄存器不是标准的寄存器而是位寻址的。
它的地址为0 C0H 。
第3章_89C51的指令系统
⑤ 操作数与操作码之间用空格分隔,操作数与 操作数之间用逗号“,”分隔。
⑷ 注释:指令功能说明。
① 注释属于非必需项,是为便于阅读, 对指令功能作的说明和注解。 ② 注释必须以“;”开始。
指令有单字节指令、双字节指令、三字节不同长 度的指令,格式不同: (1)单字节指令:操作码、操作数 同在一个字 节中。
方括符[ ]表示可选项 标号代表指令所在地址,1-8个字母/数字,“:‖结尾
⑴
标号:指令的符号地址。
① 用于一段功能程序的识别标记或控制 转移地址。 ② 指令前的标号代表该指令的地址, 是用符号表示的地址。 ③ 一般用英文字母和数字组成。
④
标号必须用冒号“ :”与操作码分隔。
⑵
操作码:表示指令的操作功能。
MOV A,3AH ;将内RAM 3AH单元中的数据传送至A中
MOV A,P0 ;将特殊功能寄存器P0口中的数据传送至A中 说明:3AH和P0是以direct形式出现的直接地址 访问特殊功能寄存器SFR只能采用直接寻址方式。
直接寻址是给出操作数的直接地址。
3. 寄存器间接寻址方式 寄存器中存放的是操作数的地址,在寄存器前加前缀标志“@‖ 。 访问内部RAM或外部RAM的低256个字节时,只能采用R0或R1作 为间址寄存器。例如: MOV A,@Ri ;i=0或1 其中Ri中的内容为40H,把内部RAM40H单元内容送A。 寻址范围: (1)访问内部RAM低128个单元,其通用形式为@Ri (2)对外部RAM的64K字节的间接寻址,例如: MOVX A,@DPTR (3)片外数据存储器的低256字节 例如:MOVX A,@Ri (4)堆栈区 堆栈操作指令PUSH(压栈)和POP(出栈)使用堆栈指针 (SP)作间址寄存器
STC_89C51单片机学习手册
S7通讯的编程步骤-----自由口通讯 S7-200 通讯的编程步骤---自由口通讯S7-200 自由口通讯是基于 RS485 通讯基础的半双工通讯, 因此, 发送和接收指令不能同时执行。
自由口通讯使用 SMB30(口 0)和 SMB130(口 1)来定义通讯口 的工作模式。
SMB30/SMB130 各位的定义如下:图 1:通讯口工作模式寄存器使用自有口通讯,SM30.0 和 SM30.1(SM130.0 和 SM130.1=0) 必须分别为 1 和 0。
发送指令(XMT) 一、 发送指令(XMT) 使用 XMT 发送指令可以把存于缓冲区中的数据, 一次发送一个或1多个字节的数据,最多为 255 个。
发送完最后一个字符后还可以连接 到一个发送完中断(端口 0 为 9,端口 1 位 26,见下表) 。
图 2:中断事件表2发送缓冲区的格式如下表所示:图 3:发送缓冲区的格式 说明: T+0:发送信息的字节个数需要提前定义。
T+1~T+255:要发送的数据字节和 XMT 有关的寄存器:SMB4 的 SM4.5 和 SM4.6。
SM4.5=1 时,口 0 发送完毕;SM4.6=1 时,口 1 发送完毕。
由以上可以看出,有两种方法可以检测端口 0 或 1 的数据发送 状态:一种是利用中断,一种是利用寄存器 SMB4 的第 5 位(口 0) 和第 6 位(口 1) 。
接收指令(RCV) 二、 接收指令(RCV) 使用接收指令(RCV)可以从端口 0 或 1 接收一个或多个字节的 数据(最多 255 个) ,并存于数据缓冲区。
接收完最后一个字节后可 以连接到一个接收完中断(口 0 是 23,口 1 是 24,见图 2 所示) 。
接收缓冲区的格式如下表所示:3图 4:接收缓冲区的格式 说明: 说明: T+0:接收字符计数,在接收到结束字符时自动清零 T+1:起始字符,在 SMB88(口 0)或 SMB188(口 1)中定义 T+2~T+244:接收到的数据字节 T+255:结束字符,在 SMB89(口 0)或 SMB189(口 1)中定义和接收有关的寄存器及定义如下表所示:45图 5:接收有关寄存器 说明: 说明: 1、SMB86/SMB186:接收终止状态信息寄存器,含有接收终止原因的信息; 2、SMB88/SMB188:信息起始位字节(如发送的信息有起始位,将把此寄存 器的内容和接受信息的每一字节相比较来, 检测确认后续字节是否是信息。
P89C51RC+_RD+中文使用指南
3.4 片脚定义一览表 ............................................................................................................... 6
89C51总汇编指令集
数据传送指令(28 条) ;
算术运算指令(24 条) ;
逻辑运算及移位指令(25 条) ; 控制转移指令(17 条) ;
位操作指令或布尔操作(17 条)。
图1-1间接寻址
图1-2查找表
图1-3逻辑操作
图1-4 比较转移
图1-5 循环转移
图1-6 调用返回指令示意图
注意:1.位累加器C就是进位标志位CY。
2.位地址是片内RAM字节地址20H~2FH,一共128个位,地址为00H~7FH。
还有单元地址可被8整除的SFR。
3.ACC(E0H~E7H)、B(F0H~F7H)和片内RAM的128个位可做软件标志或存储位变量
4.位表达方式:(1)直接位地址,如D4H(2)点操作符号方式,如PSW.4(3)位名称方式,如RS1(4)用户自定义,用伪指令bit
摘入于北京航空航天大学出版社李朝青的《单片机原理及接口技术》(第3版)对89C51的汇编语言进行整理,以备初期使用
有不对的地方请大家指出,邮箱whx_cb@。
