#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//延时
void DelayMS(uint x)
{
uchar i
while(x--)
{
for(i=0i<120i++)
}
}
//主程序
void main()
{
uint s
while(1)
{
P0=0xfe
DelayMS(150)
for(s=8s>1s--)
{
P0=_crol_(P0,1) //P0 的值向左循环移动
DelayMS(150)
}
P0=0x00
DelayMS(150)
p0=0xff
DelayMS(150)
扩展资料:
常用单片机汇编指令:
1 .MOV A,Rn 寄存器内容送入累加器
2 .MOV A,direct 直接地址单元中的数据送入累加器
3 .MOV A,@Ri (i=0,1)间接RAM 中的数据送入累加器
4 .MOV A,#data 立即数送入累加器
5 .MOV Rn,A 累加器内容送入寄存器
6 .MOV Rn,direct 直接地址单元中的数据送入寄存器
7 .MOV Rn,#data 立即数送入寄存器
8 .MOV direct,A 累加器内容送入直接地址单元
9 .MOV direct,Rn 寄存器内容送入直接地址单元
10. MOV direct,direct 直接地址单元中的数据送入另一个直接地址单元
11 .MOV direct,@Ri (i=0,1)间接RAM 中的数据送入直接地址单元
12 MOV direct,#data 立即数送入直接地址单元
13 .MOV @Ri,A (i=0,1)累加器内容送间接RAM 单元
14 .MOV @Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元
15 .MOV @Ri,#data (i=0,1)立即数送入间接RAM 单元
16 .MOV DPTR,#data16 16 位立即数送入地址寄存器
17 .MOVC A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器
18 .MOVC A,@A+PC 以PC 为基地址变址寻址单元中的数据送入累加器
19 .MOVX A,@Ri (i=0,1)外部RAM(8 位地址)送入累加器
20 .MOVX A,@DPTR 外部RAM(16 位地址)送入累加器
21 .MOVX @Ri,A (i=0,1)累计器送外部RAM(8 位地址)
22 .MOVX @DPTR,A 累计器送外部RAM(16 位地址)
23 .PUSH direct 直接地址单元中的数据压入堆栈
24 .POP direct d栈送直接地址单元
25 .XCH A,Rn 寄存器与累加器交换
26 .XCH A,direct 直接地址单元与累加器交换
27 .XCH A,@Ri (i=0,1)间接RAM 与累加器交换
28 .XCHD A,@Ri (i=0,1)间接RAM 的低半字节与累加器交换
参考资料来源:百度百科-单片机汇编指令
SUBS Rn,Rn,#1意思是 Rn 自身减 1 并设置标志位
BCC LPM
意思是如果 C 标志为 0 (无借位)则跳转到标号 LPM(C 标志是上句的 SUBS 来设置的)。
@ 无条件转移bai指令(共4条)LJMP addr16 ; PC〈—du— addr16
AJMP addr11 ; PC〈—— PC+2 , PC10-0〈—— addr11
SJMP rel ; PC〈—— PC+2 , PC 〈—— PC+rel
JMP @A+DPTR ; PC〈—— A+DPTR
第一条指zhi令称为长转移指令(Long Jump);
第二条指令叫作绝对转移指令(Absolute Jump);
第三条指令称作短转移指令(Short Jump);
第四条指令是变址寻址转移指令(散转指令)。
显然,每条指令均以改变程序计数器PC(Program Counter)中的内容为宗旨。
#(1)长转移指令(64KB范围内转移指令)
长转移指令的功能是:把指令码中的目标地址addr16装入程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序,不影响任何标志。由于addr16是一个16位二进制地址(地址范围为0000H—FFFFH),因此长转移指令一条可以在64KB范围内转移的指令。为了使程序设计方便易编,addr16常采用标号地址(如:LOOP、LOOP1、MAIN、START、DONE、NEXT1……)表示,只有在上机执行前才被汇编(或代真)为16位二进制地址。
长转移指令为三字节,双周期指令。
#(2)绝对转移指令(2KB范围内的转移指令)
绝对转移指令是一条双字节双周期指令,11位地址addr11(a10—a0)在指令中的分布是:
a10 a9 a8 0 0 0 1|a7 a6 a5 a4 a3 a2 a1 a0,其中,00001B是 *** 作码。在程序设计中,11位地址也可以用符号表示,但在上机执行前必须按照上述指令格式加以代真。
绝对转移指令执行时分为两步:
第一步是取指令 *** 作,程序计数器PC中内容被加1两次;
第二步是把PC加2后的高5为地址PC15—PC11和指令代码中低11位构成目标转移地址:PC15—PC11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
其中,a10—a0的地址范围是全“0”——全“1”。因此,绝对转移指令可以在2KB范围内向前或向后跳转。
如果把单片机64KB寻址区分成32页(每页2KB),则PC15—PC11(00000B—11111B)称为页面地址(即:0页—31页),a10—a0称为页内地址,但应注意:AJMP指令的目标转移地址不是和AJMP指令地址在同一个2KB区域,而是应和AJMP指令取出后的PC地址(即:PC+2)在同一个2KB区域。例如:若AJMP指令地址为2FFEH,则PC+2=3000H,故目标转移地址必在3000H—37FFH这2KB区域中。
#(3)短转移指令(-126—+129范围内的转移指令)
短转移指令的功能是先使程序计数器PC加1两次(即:取出指令码),然后把加2后的地址和rel相加作为目标转移地址。因此,短转移指令是一条相对转移指令,是一条双字节双周期指令,指令码格式为:80H rel( *** 作码 地址偏移量),这里,80H是SJMP指令的 *** 作码;rel是地址偏移量,在程序中也常采用符号地址,上机运行前才被代真成二进制形式。
遇到具体问题时,头脑中一定要清楚一个关系式:目标转移地址=源地址+2+rel
#(4)变址寻址转移指令(只能在256个存储器单元内转移)
这是一条单字节双周期无条件转移指令。
在指令执行之前,用户应预先把目标转移地址的基地址送入DPTR,目标转移地址对基地址的偏移量放在累加器A中。在指令执行时,MCS-51单片机把DPTR中基地址和累加器A中地址偏移量相加,以形成目标转移地址送入程序计数器PC中。
通常,DPTR中基地址是一个确定的值,常常是一张转移指令表的起始地址,累加器A中之值为表的偏移量地址,机器通过变址寻址转移指令便可实现程序的分支转移
原文链接:https://zhidao.baidu.com/question/391202121358751485.html
打开CSDN,阅读体验更佳
51单片机汇编语言指令汇总_C.L.R的博客_51汇编
一、数据传送类指令 1.以累加器为目的 *** 作数指令 MOV A,Rn MOV A,@Ri MOV A,direct MOV A,#data 2.以Rn为目的 *** 作数的指令 MOV Rn,A MOV Rn,direct MOV Rn,#data 3.以直接地址为目的 *** 作数指令 MOV direct,A MOV direc...
51单片机汇编入门基础代码-流水灯_TC肖的博客
2、跳转指令 1.短转移类指令AJMP addr11 2.长转移类指令LJMP addr16 3.相对转移指令SJMP rel 它们都用于指令跳转,从当前位置跳转到后面的地址位(一般为自己拟了名字的地址如DELAY:)。(它们的差别在于跳转的范围:LJMP一下能跳64Kb。...
单片机跳转指令学习
基于pic16f87x单片机的跳转指令学习
51单片机的汇编语言
51单片机的汇编语言 *** 作指令总结 1.指令格式 【标号:】 *** 作码 目的 *** 作数 ,源 *** 作数;注释 如:LOOP:MOV A, 33H将33H输入到累加器A中 2.ORG xxxxH命令 是指向程序不同功能固定入口,如: 0000H----系统复位入口 0013H—外中断1入口 0003H—外部中断0入口 001BH—T1溢出中断入口 000BH—T0溢出中断入口 0023H串口中断入口 3.控制转移类指令 (1)无条件转移指令—执行到该指令时无条件跳转 LJMP长转移指令:三字节指令提供16位目
继续访问
51单片机指令详解_凌烟慕鱼的博客
51单片机指令详解 数据传递类指令 1 以累加器为目的 *** 作数的指令 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data 第一条指令中,Rn代表的是R0-R7。第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的...
第3 章 MCS-51 单片机指令系统_杨丙寅的博客
寻址方式——计算机指令中说明 *** 作数所在地址的方法。MCS-51 单片机的指令系统有 7 种寻址方式,分别为立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址、基址加变址寻址、相对寻址和位寻址。
编程 ul 不能一行显示 跳到下行_数控编程代码及其使用方法—「UG编程」
G代码代码名称-功能简述G00------快速定位G01------直线插补G02------顺时针方向圆弧插补G03------逆时针方向圆弧插补G04------定时暂停G05------通过中间点圆弧插补G07------Z 样条曲线插补G08------进给加速G09------进给减速G20------子程序调用G22------半径尺寸编程方式G220-----系统 *** 作界面上使用G2...
继续访问
最新发布 51的指令系统
51单片机共有111条指令。可以大致分为以下五类: (1)数据传送类(29条) (2)算术 *** 作类(24条) (3)逻辑运算类(25条) (4)控制转移类(17条) (5)位 *** 作类(17条) 可用的指令是固定的、每种指令对应一个物理电路的实际运行过程,如果指令是指令集中不存在的,电路内部无法实现,指令就会出错。 数据传送类指令 一般形式为 MOV <目的 *** 作数>, <源 *** 作数> *** 作码包括MOV、MOVC、MOVX、PUSH、POP、XCH、XCHD、SWAP。 (1)首先是MOV
继续访问
51单片机原理及汇编教程(二)之汇编常用指令数,数据传输指令及寻址方式...
1、MOV指令 ① MOV R0 , #20H #后面是立即数,要和地址区分开,20H是一个16进制的数。这句话的意思是将20H这个数送入寄存器R0中。直接寻址 ② MOV 30H , @R0 R0里面放的数,以这个数位地址,将这个地址里面的数...
51单片机学习__X2的博客
51单片机指令集 *51指令不区分大小写 1个机器周期=12个时钟振荡周期 只有乘除两条指令的执行时间为4个机器周期 指令由两部分组成: *** 作码+ *** 作数 指令系统的寻址方式 共7种寻址方式 寄存器寻址方式 ...
条件跳转指令总结
指令 全称 cmp a,b flag条件 jz/je jump if zero/equal a=b ZF=1 jnz/jne jump if not zero/equal a!=b ZF=0 jb/jnae/jc jump if below/not above or equal/carry a<b,无符号数 CF=1 ja/jnbe jump if above/not below or equal a>b,无符号数 jna/jbe jump if not ab...
继续访问
条件跳转指令
条件跳转指令 指令 条件 指令 条件 ja CF=0 AND ZF=0 jnc CF=0 jab CF=0 jne ZF=0 jb CF=1 jng ZF=1 OR SF!=OF jbe CF=1 OR ZF=1 jnge SF=OS jc CF=1 jnl SF=OF jcxz CX=0 jn
继续访问
单片机c语言有没有跳转指令,51单片机跳转指令
@ 无条件转移bai指令(共4条)LJMP addr16 ; PC〈—du— addr16AJMP addr11 ; PC〈—— PC+2 , PC10-0〈—— addr11SJMP rel ; PC〈—— PC+2 , PC 〈—— PC+relJMP @A+DPTR ; PC〈—— A+DPTR第一条指zhi令称为长转移指令(Long Jump);第二条指令叫作绝对转移指令(Absolute...
继续访问
51单片机汇编指令
注: Rn与Ri中n=0 ~ 7,i=0 ~ 1 内部数据传送指令 助记符 作用 寻址方式 机器周期 字节数 MOV A,Rn 将Rn的内容传送给A 寄存器 1 1 MOV A,direct direct是一个地址单元,将该地址的内容传送给A 直接 1 2 MOV A @Ri Ri中存储了一个地址,将该地址的内容传送给A 寄存器间接 1 1 MOV A #data 将data传送到A 立即数 1 2 ...
继续访问
汇编指令长度计算
指令长度与寻址方式有关系,规律或原则如下: 一、没有 *** 作数的指令,指令长度为1字节。如 es: ds: cbw xlat 等。 二、 *** 作数只涉及寄存器的指令,指令长度为2字节。如 mov al,[si] mov ax,[bx+si] mov ds,ax 等。 三、 *** 作数涉及内存地址的指令,指令长度为3字节。如 mov al,[bx+1] mov ax,[bx+si+3] lea di,[1234] mov [2345],ax 等。 四、 *** 作数涉及立即数的指令,指令长度为:寄存器类型+2。 8位寄存器,寄存器
继续访问
C51单片机汇编程序问题解决:
C51汇编程序出错解决最近开始学习了一点汇编语言,刚好应课程要求,就来编一些简单的C51程序,结果在定时器中断跳转的时候出错了,错误截图如下:demo.asm(8): error A51: TARGET OUT OF RANGE源程序代码块是报错在CJNE指令这里ORG 000BH INC R1 CJNE R1,#4000,MAINLOOP
继续访问
单片机iap跳转(超详细教程,简单好学,看了秒懂)
iap跳转的作用:使用boot作为app升级,通常使用串口ymodem协议进行更新app,boot一般是占用很小的flash 大约可以设置16kb,然后设置app的地址,设置相对的偏移地址后跳转到app ymodem协议:https://mp.csdn.net/mp_blog/creation/editor/122768524 几个注意的点: 1.关闭中断之后,进入app要开启中断 2.看门狗被开启之后,将永远不会被关闭,所以要做好喂狗的处理 3.一般存在设置向量表的函数,跳转之后要设置相关的向
继续访问
51单片机c语言访问外部rom,51单片机资源扩展:从片内ROM跳转到片外ROM
源于一年前想自己动手给51写个OS,编译选Large模式,调试时整个流程都跑的好好的,可是烧写到片上后得不到预期的效果,后来查书才知道51单片机片上只有4KRom,如果没有扩展片外Rom,当访问4K以外的程序空间,程序指针又会回到最开始执行。参考手册扩展片外Rom后,能访问达64K的程序空间。网上能搜索到的扩展方式都是将EA引脚接地,让MCU上电后从外部ROM开始执行。但查看芯片手册,明明说EA为...
继续访问
c语言的程序跳转,单片机中用c语言如何编写跳转程序
这个要用到软件的pwm,因为51的没有硬件的pwm所以只好自己写软件的了。首先,要做一个软件三角波发生器子程序,频率自己定,就是变亮变暗的周期。此函数的返回值作为pwm的输入值。再做一个pwm的模拟程序,占空比(0-100)是三角波发生器的输出,pwm模拟程序控制某个端口输出1和0的占空比来控制灯 的明暗。pwm的思路是:检查设置值是否不等于0,是则端口置1,程序开始加1计数,计数后检查计数值是否...
继续访问
C51 main 函数学习以及函数跳转
1.C51main函数深入学习,有如下代码: #include "reg52.h" /************* 本地变量声明 **************/ typedef void (*pFunction)(void)pFunction Jump_To_Applicationunsigned int JumpAddressunsigned int a=0char iv
继续访问
热门推荐 51单片机之控制转移指令SJMP、LJMP等
文章目录前言一、无条件转移指令LJMP addr16AJMP addr11SJMP relJMP @A + DPTR关于SJMP、AJMP、LJMP的选择二、条件转移指令JZ rel 前言 控制指令是将程序跳转到某个指定的地址,在顺序执行 控制指令是通过修改PC的内容来实现跳转的功能 PC的内容是将要执行的下一跳指令的地址 一、无条件转移指令 LJMP英文全称:Absolute Jump AJ...
继续访问
8051单片机原理学习
8051单片机原理学习单片机结构框图参考 单片机结构框图 51单片机的结构框图如下所示 51单片机主要组成部件有: 8bit微处理器(CPU): 主要进行算术运行和逻辑控制 片内4KB程序存储器(4KB ROM): 用以可执行程序,只读数据和表格 片内256B数据存储器(256B RAM): 用于存放可读写数据,如算术运行的中间值和最终值等 4个8位并行I/O口(输入/输出口) P0 ~ P3: 每个并口可以用作输入,也可以用作输出 2个定时/计数器:每个定时/计数器可以设置为计数方式,也可以设置为定时
继续访问
c51语言主函数,C51 main 函数学习以及函数跳转
C51main函数深入学习,有如下代码:#include "reg52.h"/*************本地变量声明**************/typedefvoid (*pFunction)(void)pFunctionJump_To_Applicationunsigned int JumpAddressunsigned int a=0char ivoid test(){while(...
继续访问
学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等...
跳转指令分三类: 一、无条件跳转: JMP二、根据 CX、ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转)三、根据 EFLAGS 寄存器的标志位跳转, 这个太多了. 根据标志位跳转的指令: JE 等于则跳转 JNE 不等于则跳转 JZ 为 0 则跳转 JNZ 不为 0 则跳转 JS...
继续访问
汇编语言转换c51语言,51单片机汇编语言:控制转移指令有哪些?
跳转指令短跳指令 AJMP addr11PC←addr11,跳转范围2k长跳指令 LJMP addr16PC←addr16,跳转范围64k间接跳转指令 JMP @A+DPTRPC←(A)+(DPTR)相对转移指令 SJMP rel条件转移指令JZ rel ;(A)=0,转移JNZ rel ;(A)≠0,转移JC rel ;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)