单片机汇编语言查表实例
单片机汇编语言举例
动态显示字符"8051AF";============================== ;定义显示缓冲区DISP1 EQU 40HDISP2 EQU 41HDISP3 EQU 42HDISP4 EQU 43HDISP5 EQU 44HDISP6 EQU 45H;============================== ORG 0000HLJMP START;============================== ORG 0050HSTART:MOV SP,#060H ;初始化堆栈指针;初始化显示缓冲区MOV DISP1,#0FhMOV DISP2,#0AhMOV DISP3,#01hMOV DISP4,#05hMOV DISP5,#00h;MOV A,#80H ;8255方式控制字MOV DPTR,#0FF23H ;8255控制口地址MOVX @DPTR,A ;初始化8255 MAIN:ACALL DISPLAYSJMP MAIN;============================== DISPLAY:MOV R0,#DISP1MOV R2,#0FEH ;字控制MOV R3,#06HDLOOP:MOV A,@R0MOV DPTR,#LEDMAP ;取七段码表首地址MOVC A,@A+DPTRCPL AMOV DPTR,#0FF21H ;8255 PB口地址MOVX @DPTR,AMOV A,R2MOV DPTR,#0FF20H ;8255 PA口地址RL A ;显示位左移MOV R2,AINC R0ACALL DLYDJNZ R3,DLOOPRET;==============================DLY: ;延时子程序MOV R7,#02HDLY1: MOV R6,#0F0HDJNZ R6,$DJNZ R7,DLY1RET;==============================LEDMAP: ; 数码管七段显示码表(共阴)db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h db 00H;==============================END1到100数码管显示ORG 0000HABIT EQU 20H ;个位数存放处BBIT EQU 21H ;十位数存放处TEMP EQU 22H ;计数器寄存器START:MOV P2,#0FFHMOV TEMP,#0 ;初始化计数器STLOP:ACALL DISPLAYINC TEMPMOV A,TEMPCJNE A,#100,NEXT ;=100重来MOV TEMP,#0NEXT:LJMP STLOP;显示子程序DISPLAY: mov p0,0ffhMOV A,TEMP ;将temp中的十六进制数转换成10进制 MOV B,#10 ;10进制/10=10进制DIV ABMOV BBIT,A ;十位在aMOV ABIT,B ;个位在b;p0口接段码a,b,c,d,e,f,g, p2口接位码,选哪个数码管显示 MOV DPTR,#TAB ;指定查表启始地址MOV R0,#4DPL1:MOV R1,#250 ;显示1000次DPLOP:MOV A,ABIT ;取个位数MOVC A,@A+DPTR ;查个位数的7段代码MOV P1,A ;送出个位的7段代码CLR P2.0 ;开个位显示ACALL D1MS ;显示1msSETB P2.0MOV A,BBIT ;取十位数MOVC A,@A+DPTR ;查十位数的7段代码MOV P1,A ;送出十位的7段代码CLR P2.1 ;开十位显示ACALL D1MS ;显示1msSETB P2.1DJNZ R1,DPLOP ;100次没完循环DJNZ R0,DPL1 ;4个100次没完循环RET;1MS延时(按12MHZ算);====================================================D1MS:MOV R7,#80DJNZ R7,$RET;7段数码管各划的数字排列表TAB:DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0F8h,80h,90h ;不带小数点0 1 2 3 4 5 6 7 8 9END步进电机驱动,按键改变转动方向;==============================; 1 2 3 4 5 6 7 8;P1.0: H H H L L L L L;P1.1: L L H H H L L L;P1.2: L L L L H H H L;P1.3: H L L L L L H H; 9 1 3 2 6 4 C 8KEYIN BIT P3.4 ;定义按键输入FLAG BIT 00H;==============================ORG 0000HLJMP START;==============================ORG 0050HSTART:MOV SP,#060H ;初始化堆栈指针MOV P1,#08HMOV R2,#00HCLR FLAGMOV DPTR,#MOV_TABLEMAIN:ACALL KEYPROCJB FLAG,MAIN1INC R2ACALL MOVESJMP MAINMAIN1:DEC R2ACALL MOVESJMP MAIN;============================== MOVE: ;运转控制MOV A,R2ANL A,#07HMOVC A,@A+DPTRMOV P1,AACALL DLYRET;===========MOV_TABLE:DB 09H,01H,03H,02H,06H,04H,0CH,08H ;============================== KEYPROC:JB KEYIN,KEY_DONEACALL DLYACALL DLYJB KEYIN,KEY_DONECPL FLAGJNB KEYIN,$KEY_DONE:RET;============================== DLY: ;延时子程序MOV R7,#0AHDLY1: MOV R6,#0F0HDJNZ R6,$DJNZ R7,DLY1RET;==============================END左右循环点亮ORG 0000HLJMP STARTORG 0030HSTART: MOV R1,#00HDJNZ R1,$MOV SP,#60HLOOP: MOV A,#0FEHLOOP_1: MOV P1,ACALL DELAYRL ACJNE A,#7FH,LOOP_1 ;0111 1111 LOOP_2: MOV P1,ACALL DELAYRR ACJNE A,#0FEH,LOOP_2 ; 1111 1110 SJMP LOOPDELAY: MOV R0,#00HL1: MOV R1,#00H L2: DJNZ R1,L2 DJNZ R0,L1 RETEND所有灯循环点亮ORG 0000HLJMP MAINORG 0100HMAIN:MOV P1,#0FFHLCALL DELAYMOV P1,#00HLCALL DELAYLJMP MAINDELAY:MOV R7,#0D1:MOV R6,#0D2:DJNZ R6,D2DJNZ R7,D1RETEND产生方波/*用定时器T0产生50HZ的方波。
单片机c51汇编语言51单片机汇编语言
单片机c51汇编语言51单片机汇编语言单片机C51汇编语言单片机(C51)是指一种集成电路上只包含一个集中式控制器的微处理器,具有完整的CPU指令集、RAM、ROM、I/O接口等功能。
汇编语言是一种低级语言,是用于编写单片机指令的一种语言。
汇编语言能够直接操作单片机的寄存器和输入/输出端口,因此在嵌入式系统的开发中非常重要。
本文将介绍单片机C51的汇编语言编程。
一、了解单片机C51单片机C51是目前应用最广泛的一种单片机系列,广泛用于各种电子设备和嵌入式系统的开发。
C51指的是Intel公司推出的一种基于MCS-51架构的单片机。
该系列单片机具有较高的性能和低功耗的特点,可用于各种控制和通信应用。
二、汇编语言的基本概念汇编语言是一种低级语言,与机器语言紧密相关。
它使用助记符来代替机器指令的二进制表示,使程序的编写更加易读。
在单片机C51汇编语言中,每一条汇编指令都对应着特定的机器指令,可以直接在单片机上执行。
三、汇编语言的基本指令在单片机C51汇编语言中,有一些基本的指令用于控制程序的执行和操作寄存器。
以下是一些常用的指令:1. MOV指令:用于将数据从一个寄存器或内存单元复制到另一个寄存器或内存单元。
2. ADD指令:用于将两个操作数相加,并将结果存储到目的寄存器中。
3. SUB指令:用于将第一个操作数减去第二个操作数,并将结果存储到目的寄存器中。
4. JMP指令:用于无条件跳转到指定的地址。
5. JZ指令:用于在条件为零时跳转到指定的地址。
6. DJNZ指令:用于将指定寄存器的值减一,并根据结果进行跳转。
四、编写单片机C51汇编程序的步骤编写单片机C51汇编程序需要按照以下步骤进行:1. 确定程序的功能和目标。
2. 分析程序的控制流程和数据流程。
3. 设计算法和数据结构。
4. 编写汇编指令,实现程序的功能。
5. 调试程序,并进行测试。
六、实例演示以下是一个简单的单片机C51汇编程序的示例,用于实现两个数的相加,并将结果输出到LED灯上:org 0H ; 程序的起始地址为0mov a, 05H ; 将05H赋值给累加器mov b, 07H ; 将07H赋值给B寄存器add a, b ; 将A寄存器和B寄存器的值相加mov P1, a ; 将相加结果输出到P1口end ; 程序结束在这个例子中,首先将05H赋值给累加器A,然后将07H赋值给B寄存器,接着使用ADD指令将A和B的值相加,将结果存储到累加器A中,最后将累加器A的值输出到P1口。
单片机汇编语言指令查表
目录表1 寻址方式与相应的寻址空间 (2)1.1数据传送指令MOV (2)1.2程序存储器取数据指令MOVX,MOVC (3)1.3 数据交换指令XCH,XCHD,SWAP (3)1.4 逻辑运算指令ANL,ORL(按位进行) (4)续表1.4 逻辑运算指令XRL CLR CPL RL RLC RR RRC(按位进行) (5)1.5 控制转移指令LJMP AJMP SJMP JMP JZ JNZ CJNE (6)续表1.5 控制转移指令DJNZ LCALL ACALL RET RETI NOP (7)1.6 布尔处理(位操作)指令CLR SETB CPL ANL ORL (8)续表1.6 布尔处理(位操作)指令JC JNC JB JNB JBC (9)1.7堆栈操作指令PUSH POP (10)2.MCS-51系列单片机算术运算指令表ADD ADDC SUBB INC DEC MUL DIV DA (10)表1 寻址方式与相应的寻址空间1.1数据传送指令MOV方式 利用的变量 使用的空间寄存器 R0∽R7,A ,B ,CY ,DPTR直接寻址 direct片内RAM 低128字节特殊功能寄存器SFR寄存器间址 @Ro ,@R1 SP @R0,@R1,@DPTR片内RAM 片外RAM立即数 #data程序存储器 基址加变址 @A+PC @A+DPTR程序存储器 相对寻址 PC+rel程序存储器位寻址bit片内RAM 的20H ∽2FH 部分SFR目的操作数汇编指令机器码功能字节数 机器周期A 累加器 立即数送AMOV A ,#data 74H data data 传至A 2 1 内部RAM 或SFR 内容送AMOV A ,direct E5H direct(direct)传至A2 1 寄存器内容送AMOV A ,Rn (n=0∽7) E8H ∽EFH 11101rrr (Rn)传至A 1 1 内部RAM 内容送A MOV A ,@Ri (i=0,1) 1110011i((Ri))传至A 1 1 Direct内部RAM 或SFR立即数送内部RAM 或SFR MOV direct ,#data 75H direct data data 传至direct 3 2 内部RAM 和SFR 直接直接传送 MOV direct ,direct 85H direct direct (direct)传至direct 3 2 累加器内容送内部RAM 或SFR MOV direct ,AF5H direct(A)传至direct 2 1 寄存器内容送内部RAM 或SFR MOV direct ,Rn (n=0∽7) 10001rrr direct (Rn)传至direct 2 2 内部RAM 内容送内部RAM 或SFRMOV direct ,@Ri (i=0,1) 1000011i direct ((Ri))传至direct 2 2 Rn 寄存器立即数送寄存器 MOV Rn,#data (n=0∽7) 01111rrr data data 传至Rn 2 1 内部RAM 或SFR 内容送寄存器MOV Rn,direct (n=0∽7) 10101rrr direct (direct)传至Rn 2 2 累加器内容送寄存器MOV Rn,A (n=0∽7) 11111rrr (A)传至Rn 1 2 @Ri 内部RAM立即数送内部RAMMOV @Ri,#data (i=0,1) 0111011i data data 传至(Ri) 2 1 内部RAM 或SFR 内容送内部RAMMOV @Ri,direct (i=0,1) 1010011i direct (direct)传至(Ri) 2 2 累加器内容送内部RAM MOV @Ri,A (i=0,1) 1111011i(A)传至(Ri) 1 1 DPTR 16位立即数传送指令MOV DPTR,#data1690H dataH dataLdata16传至DPTR321.2程序存储器取数据指令MOVX ,MOVC1.3 数据交换指令XCH ,XCHD ,SWAP目的操作数汇编指令机器码功能字节数 机器周期A 外部数据存储器内容送A MOVX A ,@Ri (i=0,1) E2H E3H ((Ri))传至A 1 2 A 外部数据存储器内容送A MOVX A ,@DPTR E0H ((DPTR))传至A 1 2 @Ri 累加器内容送外部数据存储器 MOVX @Ri,A (i=0,1) F2H ,F3H A 传至(Ri) 1 2 DPTR 累加器内容送外部数据存储器 MOVX @DPTR,A F0H A 传至(DPTR) 1 2 A 以PC 为基址寄存器加变址寻址 MOVC A,@A+PC 83H ((A)+(PC))传至A 1 2 A以DPTR 为基址寄存器加变址寻址MOVC A,@A+DPTR93H((A)+(DPTR))传至A12目的操作数指令机器码 功能字节数 机器周期 A 内部RAM 或SFR 内容与累加器内容互换 XCH A,directC5H direct (A)←(direct) 2 1 A 寄存器内容与累加器内容互换 XCH A,Rn (n=1-7) 11001rrr (A)←(Rn) 1 1 A 内部RAM 内容与累加器内容互换XCH A,@Ri (i=0,1) 1100011i (A)←((Ri))1 1 A 内部RAM 低4位内容与累加器低4位内容互换XCHD A,@Ri (i=0,1) 1101011i (A)0∽3←((Ri))0∽3 1 1 A累加器高4位与低4位交换SWAP AC4H(A)0∽3←(A)4∽7111.4 逻辑运算指令ANL,ORL(按位进行)目的操作数指令机器码功能字节数机器周期逻辑与ANLA内容∧立即数ANL A ,#data54H A←(A)∧#data 2 1 A内容∧内部RAM或SFR当direct为端口地址P0∽P3时,操作数由端口锁存器读入。
51单片机汇编指令速查表
51单片机汇编指令速查表指令格式功能简述字节数周期一、数据传送类指令MOV A,Rn 寄存器送累加器1 1MOV Rn,A 累加器送寄存器1 1MOV A ,@Ri 内部RAM单元送累加器1 1MOV @Ri ,A 累加器送内部RAM单元1 1MOV A ,#data 立即数送累加器2 1MOV A ,direct 直接寻址单元送累加器2 1MOV direct ,A 累加器送直接寻址单元2 1MOV Rn,#data 立即数送寄存器2 1MOV direct ,#data 立即数送直接寻址单元3 2MOV @Ri ,#data 立即数送内部RAM单元2 1MOV direct ,Rn 寄存器送直接寻址单元2 2MOV Rn ,direct 直接寻址单元送寄存器2 2MOV direct ,@Ri 内部RAM单元送直接寻址单元2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元3 2 MOV DPTR ,#data16 16位立即数送数据指针3 2MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2XCH A ,Rn 累加器与寄存器交换1 1XCH A ,@Ri 累加器与内部RAM单元交换1 1XCHD A ,direct 累加器与直接寻址单元交换2 1XCHD A ,@Ri 累加器与内部RAM单元低4位交换1 1 SWAP A 累加器高4位与低4位交换1 1POP direct 栈顶弹出指令直接寻址单元2 2PUSH direct 直接寻址单元压入栈顶2 2二、算术运算类指令ADD A,Rn 累加器加寄存器1 1ADD A,@Ri 累加器加内部RAM单元1 1ADD A,direct 累加器加直接寻址单元2 1ADD A,#data 累加器加立即数2 1ADDC A,Rn 累加器加寄存器和进位标志1 1ADDC A,@Ri 累加器加内部RAM单元和进位标志1 1 ADDC A,#data 累加器加立即数和进位标志2 1ADDC A,direct 累加器加直接寻址单元和进位标志2 1INC A 累加器加1 1 1INC Rn 寄存器加1 1 1INC direct 直接寻址单元加1 2 1INC @Ri 内部RAM单元加1 1 1INC DPTR 数据指针加1 1 2DA A 十进制调整1 1SUBB A,Rn 累加器减寄存器和进位标志1 1SUBB A,@Ri 累加器减内部RAM单元和进位标志1 1 SUBB A,#data 累加器减立即数和进位标志2 1SUBB A,direct 累加器减直接寻址单元和进位标志2 1 DEC A 累加器减1 1 1DEC Rn 寄存器减1 1 1DEC @Ri 内部RAM单元减1 1 1DEC direct 直接寻址单元减1 2 1MUL AB 累加器乘寄存器B 1 4DIV AB 累加器除以寄存器B 1 4三、逻辑运算类指令ANL A,Rn 累加器与寄存器1 1ANL A,@Ri 累加器与内部RAM单元1 1ANL A,#data 累加器与立即数2 1ANL A,direct 累加器与直接寻址单元2 1ANL direct,A 直接寻址单元与累加器2 1ANL direct,#data 直接寻址单元与立即数3 1ORL A,Rn 累加器或寄存器1 1ORL A,@Ri 累加器或内部RAM单元1 1ORL A,#data 累加器或立即数2 1ORL A,direct 累加器或直接寻址单元2 1ORL direct,A 直接寻址单元或累加器2 1ORL direct,#data 直接寻址单元或立即数3 1XRL A,Rn 累加器异或寄存器1 1XRL A,@Ri 累加器异或内部RAM单元1 1XRL A,#data 累加器异或立即数2 1XRL A,direct 累加器异或直接寻址单元2 1XRL direct,A 直接寻址单元异或累加器2 1XRL direct,#data 直接寻址单元异或立即数3 2RL A 累加器左循环移位1 1RLC A 累加器连进位标志左循环移位1 1RR A 累加器右循环移位1 1RRC A 累加器连进位标志右循环移位1 1CPL A 累加器取反1 1CLR A 累加器清零1 1四、控制转移类指令类ACCALL addr11 2KB范围内绝对调用2 2AJMP addr11 2KB范围内绝对转移2 2LCALL addr16 2KB范围内长调用3 2LJMP addr16 2KB范围内长转移3 2SJMP rel 相对短转移2 2JMP @A+DPTR 相对长转移1 2RET 子程序返回1 2RET1 中断返回1 2JZ rel 累加器为零转移2 2JNZ rel 累加器非零转移2 2CJNE A ,#data ,rel 累加器与立即数不等转移3 2 CJNE A ,direct ,rel 累加器与直接寻址单元不等转移3 2 CJNE Rn,#data ,rel 寄存器与立即数不等转移3 2 CJNE @Ri ,#data,rel RAM单元与立即数不等转移3 2 DJNZ Rn ,rel 寄存器减1不为零转移2 2DJNZ direct ,rel 直接寻址单元减1不为零转移3 2NOP 空操作1 1五、布尔操作类指令(C表示进位标识)MOV C,bit 直接寻址位送C 2 1MOV bit,C C送直接寻址位2 1CLR C C清零1 1CLR bit 直接寻址位清零2 1CPL C C取反1 1CPL bit 直接寻址位取反2 1SETB C C置位1 1SETB bit 直接寻址位置位2 1ANL C,bit C逻辑与直接寻址位2 2ANL C,/bit C逻辑与直接寻址位的反2 2ORL C,bit C逻辑或直接寻址位2 2ORL C,/bit C逻辑或直接寻址位的反2 2JC rel C为1转移2 2JNC rel C为零转移2 2JB bit,rel 直接寻址位为1转移3 2JNB bit,rel 直接寻址为0转移本文来自CSDN博客,转载请标明出处:2009/05/24。
单片机汇编语言入门实例
一、用单片机控制发光二极管图1为单片机控制发光二极管的实验电路图。
图中用P1口作为输出端,P1口的P1.0~P1.7引脚分别接了8个LED。
实例1:用单片机控制LED闪烁发光源程序如下:MAIN:SETB P1.0LCALL DELAYCLR P1.0LCALL DELAYLJMP MAINDELAY:MOV R7,#250D1:MOV R6,#250D2:DJNZ R6,D2DJNZ R7,D1RETEND程序说明:1、SETB P1.0:将P1.0口置“1”,既让P1.0输出高电平,让LED 熄灭。
2、LCALL DELAY:LCALL称为子程序调用指令,指令后面的参数DELAY是一个标号,用于标识第6行程序,执行LCALL指令时,程序转到LCALL后面的标号所指示的程序行处执行,如果执行指令过程中遇到RET指令,则程序就返回到LCALL指令下面的一条指令继续执行。
3、CLR P1.0:将P1.0口置“0”,既让P1.0输出低电平,让LED 亮。
4、LCALL DELAY:调用延时子程序DELAY。
5、LJMP MAIN:跳转到第1条指令处执行第1条指令。
6、第6~10条指令是一段延时子程序,子程序只能在被调用时运行,并有固定的结束指令RET。
7、END:不是S51单片机的指令,不会产生单片机可执行的代码,而是用于告诉汇编软件“程序到此结束”,这类用于汇编软件控制的指令称为“伪指令”。
延时程序说明:1、程序中的R6、R7代表工作寄存器的单元,用来暂时存放一些数据。
2、MOV指令的含义是传递数据。
指令“MOV R7,#250”的含义是:将数据250送到R7中。
250前面的“#”号表示250是一个数,而不是一个地址,“#”号后面的数称为立即数。
3、DJNZ指令后面有两个符号,一个是R6,一个是D2。
R6是寄存器,D2是标号。
DJNZ指令的执行过程是:将其后面第一个参数中的值减1,然后看这个值是否等于0,如果等于0,往下执行,如果不等于0,则转移到第二个参数所指定的位置去执行,这里是转移到由D2所标识的这条语句去执行。
pic单片机汇编语言程序设计实例
pic单片机汇编语言程序设计实例一、前言单片机是现代电子技术中的重要组成部分,而汇编语言则是单片机编程中最基础的语言。
本文将以PIC单片机为例,介绍汇编语言程序设计实例。
二、PIC单片机简介PIC(Peripheral Interface Controller)是一种微控制器,由美国Microchip Technology公司开发。
PIC单片机具有体积小、功耗低、价格便宜等优点,广泛应用于各种电子设备中。
三、汇编语言基础1. 寄存器PIC单片机有许多寄存器,其中最常用的有W寄存器和F寄存器。
W 寄存器是一个8位的通用寄存器,可用于存储临时数据;F寄存器则是一个8位的特殊功能寄存器,可用于控制各种外设。
2. 指令集PIC单片机的指令集非常丰富,涵盖了各种数据操作、逻辑运算、跳转等指令。
例如:- MOVF:将指定地址中的数据移动到W寄存器中;- ADDWF:将指定地址中的数据与W寄存器中的数据相加,并将结果保存到指定地址中;- BTFSS:测试指定地址中某一位是否为0,并跳过下一条指令。
3. 标志位PIC单片机还有一些标志位,用于记录各种状态信息。
其中最常用的有C(进位标志位)、Z(零标志位)和DC(半进位标志位)。
四、汇编语言程序设计实例下面以一个简单的LED闪烁程序为例,介绍PIC单片机汇编语言程序设计。
1. 硬件连接将一个LED连接到PIC单片机的RA0口,通过一个220欧姆电阻限流。
将VDD和VSS分别连接到5V和地。
2. 程序设计首先定义RA0口为输出口,并将其置为低电平。
然后进入一个死循环,在循环中将RA0口置为高电平、延时一段时间、再将RA0口置为低电平、再延时一段时间。
程序如下:LIST P=16F84AINCLUDE "P16F84A.INC"__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON &_HS_OSCORG 0x00GOTO MAINORG 0x04MAIN:MOVLW 0x00 ; 将W寄存器清零TRIS PORTA ; 将PORTA定义为输出口LOOP:BSF PORTA, 0 ; 将PORTA.0置为高电平CALL DELAY ; 延时BCF PORTA, 0 ; 将PORTA.0置为低电平CALL DELAY ; 延时GOTO LOOPDELAY:MOVLW 0x64 ; 将W寄存器设置为100(十进制)DELAY_LOOP:NOP ; 空操作,延时1个指令周期DECFSZ W, F ; 将W寄存器减1,如果不为0则跳转到DELAY_LOOPGOTO DELAY_LOOP ; 否则跳出循环RETURN ; 返回主程序3. 编译和烧录将程序保存为.asm文件,使用MPLAB IDE进行编译和烧录。
51单片机汇编语言及C语言经典实例解析
51单片机汇编语言及C语言经典实例实验及课程设计一、闪烁灯如图1 所示为一简单单片机系统原理图:在P1.0 端口上接一个发光二极管L1,使L1 在不停地一亮一灭,一亮一灭的时间间隔为0.2 秒。
延时程序的设计方法,作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2 秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图4.1.1 所示的石英晶体为12MHz,因此,1 个机器周期为 1 微秒,机器周期微秒如图 1 所示,当P1.0 端口输出高电平,即P1.0=1 时,根据发光二极管的单向导电性可知,这时发光二极管L1 熄灭;当P1.0 端口输出低电平,即P1.0=0 时,发光二极管L1 亮;我们可以使用SETB P1.0 指令使P1.0端口输出高电平,使用CLR P1.0 指令使P1.0 端口输出低电平。
C 语言源程序#include <AT89X51.H>sbit L1=P1^0;void delay02s(void) //延时0.2 秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}void main(void){while(1){L1=0;delay02s();L1=1;delay02s();}汇编源程序ORG 0START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP START DELAY: MOV R5,#20 ;延时子程序,延时0.2 秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND图2 程序设计流程图图1 单片机原理图二、多路开关状态指示如图 3 所示,AT89S51 单片机的 P1.0-P1.3 接四个发光二极管 L1-L4,P1.4-P1.7 接了四个开关 K1-K4,编程将开关的状态反映到发光二极管上。
单片机汇编语言指令查表
1.片内ram 数据传送指令表2.程序调用及返回指令表 类型 指令机器码 功能字节数 机器周期 长调用 Lcall addr16 12H addr16 (PC )+3传至PC ;(SP)+1传至SP ;PC7~0传至(SP ) 32 绝对调用 Acall addr11 Addr10~810001,addr7~0(SP)+1传至SP,PC15~8传至(SP);addr15~0传至PC 2 2 子程序返回 ret 22H (PC )+2传至PC;SP)+1传至SP,PC7~0传至(SP )1 2 中断返回reti32H(SP)+1传至SP,PC15~8传至(SP);addr10~0传至PC.(SP)传至PC15~8,SP-1传至SP. (SP)传至PC7~0,SP-1传至SP. (SP)传至PC15~8,SP-1传至SP. (SP)传至PC7~0,SP-1传至SP.1 23.无条件转移指令表目的操作数 汇编指令机器码功能机器周期 字节数 A mov A ,#data 74H data data 传至A 1 2 A mov A ,direct E5H direct (direct)传至A 1 2 A mov A ,Rn 11101rrr (Rn)传至A 1 1 Amov A ,@Ri1110011i((Ri))传至A 1 1 direct mov direct ,#data 75H direct data data 传至direct 2 3 direct mov direct ,direct 85H direct direct (direct)传至direct2 3 direct mov direct ,A F5H direct(A)传至direct 1 2 direct mov direct ,Rn 10001rrr direct (Rn)传至direct 2 2 direct mov direct ,@Ri 1000011i direct ((Ri))传至direct 2 2 Rn mov Rn,#data 01111rrr data data 传至Rn 1 2 Rn mov Rn,direct 10101rrr direct (direct)传至Rn 2 2 Rn mov Rn,A11111rrr(A)传至Rn 2 1 @Ri mov @Ri,#data 0111011i data data 传至(Ri) 1 2 @Ri mov @Ri,direct 1010011i direct (direct)传至(Ri) 2 2 @Ri mov @Ri,A1111011i(A)传至(Ri) 1 1 dptrmov dptr,#data1690H dataH dataLdata16传至dptr23类型指令操作码功能字节数机器周期长转移Ljmp addr16 02H addr16 Addr15~0 3 2绝对转移Ajmp addr11 Addr10~800001,addr7~0 (PC)+2传至PC;addr10~0传至PC;PC15~11不变2 2相对转移Sjmp rel 80H rel (PC)+2+rel传至PC 2 2 间接转移jmp@A+dptr 73H (A)+(dptr)传至PC 1 24.条件转移指令类型汇编指令操作码功能字节数机器周期A为零转移Jz rel 60H rel (PC)+2传至PC;(A)=0,则(PC)+rel传至PC2 2A非零转移Jnz rel 70H rel (PC)+2传至PC;(A)≠0,则(PC)+rel传至PC2 2比较转移CjneA,#data,relB4H data rel (A)≠data,转移 3 2CjneA,direct,rel B5H directrel(A)≠direct,转移 3 2CjneRn,#data,rel 10111rrrdata rel(Rn)≠data,转移 3 2Cjne@Ri,#data,re l 1011011idata rel((Ri))≠data,转移 3 2减1不为零转移Djnz Rn,rel 11011rrr rel (Rn)-1≠0,转移 2 2 Djnzdirect,relD5H directrel(direct)-1≠0,转移 3 25.位操作指令类型汇编指令机器码功能字节数机器周期位传送Mov C,bit A2H bit (bit)传至C 2 1 Mov bit,C 92H bit (C)传至bit 2 1 位清零Clr C C3H 00H传至C 1 1 Clr bit C2H bit 00H传至bit 2 1 位置位Setb C D3H 01H传至C 1 1 Setb bit D2H bit 01H传至bit 2位求反Cpl C B3H /(C)传至C 1 1 Cpl bit B2H bit /(bit)传至bit 2 1 位逻辑与Anl C,bit 82H (C)^(bit)传至C 2 2 Anl C,/bit B0H bit (C)^/(bit)传至C 2 2 位逻辑或Orl C,bit 72H bit (C)v(bit)传至C 2 2 Orl C,/bit A0H bit (C)v/(bit)传至C 2 2 判位转移Jc rel 40H rel (PC)+2传至PC若Cy=1,则(PC)+rel传至PC若Cy=0,顺序执行2 2Jnc rel 50H rel (PC)+2传至PC若Cy=0,则(PC)+rel传至PC2 2若Cy=1,顺序执行Jb bit,rel 20H bit rel (PC)+3传至PC若(bit)=1,则(PC)+rel传至PC若(bit)=0,顺序执行3 2Jnb bit,rel 30H bit rel (PC)+3传至PC若(bit)=0,则(PC)+rel传至PC若(bit)=1,顺序执行3 2Jbc bit,rel 10H bit rel (PC)+3传至PC若(bit)=1,则0传至(bit),(PC)+rel传至PC若(bit)=0,顺序执行3 26.循环移位指令类型汇编指令机器码功能字节数机器周期左移Rl A 23H A0移位至A7循环 1 1 带进位左移Rlc A 33H A0移位至A7溢出位进Cy溢出进A0循环1 1 右移Rr A 03H A7移位至A0循环 1 1 带进位右移Rrc A 13H A7移位至A0溢出位进Cy溢出进A7循环1 17.程序存储器取数据指令汇编指令机器码功能字节数机器周期Movc A,@A+PC 83H ((A)+(PC))传至A 1 2 Movc A,@A+dptr 93H ((A)+(dptr))传至A 1 2 Movx A,@Ri 1110001i ((Ri))传至A 1 2 Movx A,@dptr E0H ((dptr))传至A 1 2 Movx @Ri,A 1111001i (Ri)传至A 1 2 Movx @dptr,A F0H (dptr)传至A 1 28.堆栈操作指令类型汇编指令机器码功能字节数机器周期进栈Push direct C0H direct (SP)+1传至SP(direct)传至(SP)2 2出栈Pop direct DoH direct ((SP))传至direct(SP)-1传至SP2 29.数据交换指令指令机器码功能字节数机器周期Xch A,direct C5H direct (direct)传至(A) 2 1 Xch A,Rn 11001rrr (Rn)传至(A) 1 1 Xch A,@Ri 1100011i ((Ri))传至(A) 1 1 Xchd A,@Ri 1101011i ((Ri))0~3传至(A)0~3 1 1 Swap A C4H (A)4~7传至(A)0~3 1 110.MCS-51系列单片机算术运算指令表类型汇编指令机器码功能字节数机器周期不带进位加法指令Add A,#data 24H data (A)+data传至A 2 1 Add A,direct 25H data (A)+(direct)传至A 2 1 Add A,Rn 00101rrr (A)+Rn)传至A 1 1 Add A,@Ri 0010011i (A)+((Ri))传至A 1 1带进位加法指令Addc A,#data 34H data (A)+data+Cy传至A 2 1 AddcA.direct35H direct (A)+data+Cy传至A 2 1 Addc A,Rn 00111rrr (A)+(Rn)+Cy传至A 1 1 Addc A,@Ri 0011011i (A)+((Ri))+Cy传至A 1 1减法指令Subb A,#data 94H data (A)-data-Cy传至A 2 2 SubbA,direct95H direct (A)-(direct)-Cy传至A 2 1 Subb A,Rn 10011rrr (A)-(Rn)-Cy传至A 1 1Subb A,@Ri 1001011i (A)-((Ri))-Cy传至A 1 1 加1指令Inc A 04H (A)+1传至A 1 1 Inc direct 05H direct (direct)+1传至A 2 1Inc Rn 00001H (Rn)+1传至A 1 1Inc @Ri 0000011i ((Ri))+1传至A 1 1Inc dptr A3H (dptr)+1传至A 1 2 减1指令Dec A 14H (A)-1传至A 1 1 Dec direct 15H direct (direct)-1传至A 2 1Dec Rn 00011rrr (Rn)-1传至A 1 1Dec @Ri 0001011i ((Ri))-1传至A 1 1 乘法指令Mul AB A4H (A)x(B)传至A 1 4 除法指令Div AB 84H (A)除以(B)传至A(商)B(余数) 1 4 调整指令Da A D4H 对加法的结果进行十进制调整 1 1 更多。
单片机汇编语言指令一览表
⒉时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。
⒊控制线:控制线共有4根,⑴ALE/PROG:地址锁存允许/片内EPROM编程脉冲①ALE功能:用来锁存P0口送出的低8位地址②PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
⑵PSEN:外ROM读选通信号。
⑶RST/VPD:复位/备用电源。
①RST(Reset)功能:复位信号输入端。
②VPD功能:在Vcc掉电情况下,接备用电源。
⑷EA/Vpp:内外ROM选择/片内EPROM编程电源。
①EA功能:内外ROM选择端。
②Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源V pp。
⒋I/O线80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)5. P3口第二功能P30 RXD 串行输入口P31 TXD 串行输出口P32 INT0 外部中断0(低电平有效)P33 INT1 外部中断1(低电平有效)P34 T0 定时计数器0P35 T1 定时计数器1P36 WR 外部数据存储器写选通(低电平有效)P37 RD 外部数据存储器读选通(低电平有效)[编辑本段]单片机指令功能一览表一、传送操作助记符代码说明MOV A,Rn E8~EF 寄存器AMOV A,direct E5 dircet 直接字节送AMOV A,@Ri ER~E7 间接RAM送AMOV A,#data 74 data 立即数送AMOV Rn,A F8~FF A送寄存器MOV Rn,dircet A8~AF dircet 直接字节送寄存器MOV Rn,#data 78~7F data 立即数送寄存器MOV dircet,A F5 dircet A送直接字节MOV dircet,Rn 88~8F dircet 寄存器送直接字节MOV dircet1,dircet2 85 dircet1 dircet2 直接字节送直接字节MOV dircet,@Ro 86~87 间接RAM送直接字节MOV dircet,#data 75 dircet data 立即数送直接字节MOV @Ri,A F6~F7 A送间接RAMMOV @Ri,#data 76~77 data 直接字节送间接RAMMOV @Ri,#data 76~77 data 立即数送间接RAMMOV DPTR,#data16 90 data 15~8 16位常数送数据指针data7~0MOVC A,@A+DPTR 93 由((A)+(DPTR))寻址的程序存贮器字节选AMOVC A,@A+PC 83 由((A)+(PC));寻址的程序存贮器字节送A MOVX A,@Ri E2~E3 送外部数据(8位地址)送AMOVX A,@DPTR E0 送外部数据(16位地址)送AMOVX @Ri,A F2~F3 A送外部数据(8位地址)MOVX @DPTR,A F0 A送外部数据(16位地址)PUSH dircet C0 dircet 直接字节进栈,SP加1POP dircet D0 dircet 直接字节退栈,SP减1XCH A,Rn C8~CF 交换A和寄存器XCH A,dircet C5 dircet 交换A和直接字节XCH A,@Ri C6~C7 交换A和间接RAMXCH A,@Ri D6~D7 交换A和间接RAM的低位SWAP A C4二、算术操作(A的二个半字节交换)ADD A,Rn 28~2F 寄存器加到AADD A,dircet 25 dircet 直接字节加到AADD A,@Ri 26~27 间接RAM加到AADD A,#data 24data 立即数加到AADD A,Rn 38~3F 寄存器和进位位加到AADD A,dircet 35dircet 直接字节和进位位加到AADD A,@Ri 36~37 间接字节和进位位加到AADD A,data 34 data 立即数和进位位加到AADD A,Rn 98~9F A减去寄存器和进位位ADD A,dircet 95 dircet A减去直接字节和进位位ADD A,@Ri 36~37 间接RAM和进位位加到AADD A,data 34 data 立即数和进位位加到ASUBB A,Rn 98~9F A减去寄存器和进位位SUBB A,dircet 95 dircet A减去直接字节和进位位SUBB A,@Ri 96~97 A减去间接RAM和进位位SUBB A,#data 94 data A减去立即数和进位位INC A 04 A加1INC Rn 08~0F 寄存器加1INC dircet 05 dircet 直接字节加1INC @Ri 06~07 间接RAM加1DEC A 14 A减1DEC Rn 18~1F 寄存器减1DEC dircet 15 dircet 直接字节减1DEC @Ri 16~17 间接RAM减1INC DPTR A3 数据指针加1MUL AB A4 A乘以BDIV AB 84 A除以BDA A D4 A的十进制加法调整三、逻辑操作ANL A,Rn 58~5F 寄存器“与”到AANL A,dircet 55 dircet 直接字节“与”到AANL A,@Ri 56~57 间接RAm“与”到AANL A,#data 54 data 立即数“与”到AANL dircet A 52 dircet A“与”到直接字节ANL dircet,#data 53 dircet data 立即数“与”到直接字节ORL A,Rn 48~4F 寄存器“或”到AORL A,dircet 45 dircet 直接字节“或”到AORL A,@Ri 46~47 间接RAM“或”到AORL A,#data 44 data 立即数“或”到AORL dircet,A 42 dircet A“或”到直接字节ORL dircet,#data 43 dircet data 立即数“或”到直接字节XRL A,Rn 68~6F 寄存器“异或”到AXRL A,dircet 65 dircet 直接字节“异或”到AXRL A,@Ri 66~67 间接RAM“异或”到AXRL A,#data 64 data 立即数“异或”到AXRL dircet A 62 dircet A“异或”到直接字节XRL dircet,#data 63 dircet data 立即数“异或”到直接字节CLR A E4 清零CPL A F4 A取反RL A 23 A左环移RLC A 33 A通过进位左环移RR A 03 A右环移RRC A 13 A通过进位右环移四、控制程序转移ACALL addr 11 *1 addr(a7~a0) 绝对子程序调用LCALL addr 16 12 addr(15~8) 长子程序调用addr(7~0)RET 22 子程序调用返回RETI addr 11 32 中断调用返回AJMP addr 11 △1 addr(a7~a6) 绝对转移LJMP addr 16 02addr(15~8) 长转移addr(7~0)SJMP rel 80 rel 短转移,相对转移JMP @A+DPTR 73 相对于DPTR间接转移JZ rel 60 rel A为零转移JNZ rel 70 rel A为零转移CJNE A,dircet,rel B5 dircet rel 直接字节与A比较,不等则转移CJNE A,#data,rel B4 data rel 立即数与A比较,不等则转移CJNE A,Rn,#data,rel B8~BF data rel 立即数与寄存器比较,不等则转移CJNE @Ri,#data,rel B6~B7 data rel 立即数与间接RAM比较,不等则转移DJNZ Rn,rel D8~DF rel 寄存器减1,不为零则转移DJNZ dircet,rel B5 dircet rel 直接字节减1,不为零则转移NOP 00 空操作*=a10a9a8l△=a10a9a80五、布尔变量操作CLR C C3 清零进位CLR bit C2 清零直接位SETB C D3 置位进位SETB bit D2 置位直接位CPL C B3 进位取反CPL bit B2 直接位取反ANL C,bit 82 dit 直接数“与”到进位ANL C,/bit B0 直接位的反“与”到进位ORL C,bit 72 bit 直接位“或”到进位ORL C,/bit A0 bit 直接位的反“或”到进位MOV C,bit A2 bit 直接位送进位MOV bit,C 92 bit 进位送直接位JC rel 40 rel 进位位为1转移JNC rel 50 rel 进位位为0转移JB bit,rel 20 bit rel 直接位为1相对转移JNB bit,rel 30 bit rel 直接位为0相对转移JBC bit,rel 10 bit rel 直接位为1相对转移,然后清零该位。
51单片机 汇编语言经典案例 (理工)
5、试编写统计数据区长度的程序,设数据区从内RAM 30H 开始,该数据区以0结束,统计结果送入2FH中。 ORG 0000H MOV R0,#00H MOV R1,#30H NEXT: MOV A,@R1 JZ OVER INC R0 INC R1 LJMP NEXT OVER: MOV 2FH,R0 SJMP $ END
2、试编写程序。找出外RAM 2000H~200FH数据区中的最 小值,并放入R2中。
• • • • • • • • • • • • • • • • • • • ORG 0000H MOV DPTR,#2000H MOVX A,@DPTR MOV R2,A MOV R1,#15 INC DPTR NEXT1: MOVX A,@DPTR MOV B,R2 SUBB A,B JNC LP DAYU0: MOVX A,@DPTR MOV R2,A LP: INC DPTR DJNZ R1,NEXT1 SJMP $ END
8、试编一程序,分别统计在内部RAM的30H~50H单元的数 据区中奇数和偶数的个数,并将奇数和偶数的个数分别存放 在51H和52H单元中。
MOV R1,#30H MOV R0,#20H MOV 51H,#0H MOV 52H,#0H START: MOV A,@R1 INC R1 ANL A,#01H JZ LOOP1 INC 51H SJMP LOOP2 LOOP1: INC 52H LOOP2: DJNZ R0 , START RET
3、编写程序,将外部RAM 2000H~20FFH数据块,传送到 3000H~30FFH区域。
ORG 0000H MOV R1,#0FFH MOV R2,#00H NEXT: MOV DPH,#20H MOV DPL,R2 MOVX A,@DPTR MOV DPH,#30H MOVX @DPTR,A INC R2 DJNZ R1,NEXT SJMP $
第二章--第四节--汇编语言程序设计方法(二)
A+30HA A(22H) 结束
R0
0010 0000
END
BCD码十进制转换成二进制
例:假如在内部RAM40H单元中存储有一个压缩BCD编码 的两位十进制数,设计一段程序把这个数转换成二进制数 并存入41H单元中。 解题思路: (40H) 16 商为二进制的高四位
余数
余为二进制的低四位
将高四位乘以0AH,再加上低四位即可。
数据排序程序 例:将片内RAM中20H-27H中的数据按照从小到大的顺序重新排列。 解题思路:见下图
RAM地址 原始数据
20H 66H
21H 11H
22H 10H
23H 34H
24H 67H
25H 01H
26H 89H
27H A0H
1
2 3 4 5 6 7
01H
01H 01H 01H 01H 01H 01H
11H
10H 10H 10H 10H 10H 10H
10H
11H 11H 11H 11H 11H 11H
34H
34H 34H 34H 34H 34H 34H
8051系列单片机汇编语言指令速查表1
8051系列单片机汇编语言指令速查表编号指令名称指令助记符指令说明数据传送类指令1一般传送MOV A, #data 将立即数#data送累加器A2 MOV direct, #data 将立即数#data送片内RAM direct地址单元内3 Mov Rn, #data 将立即数#data送寄存器Rn4 Mov @Ri, #data 寄存器Ri内为RAM地址,将立即数#data送该地址单元内5 Mov direct2,direct1将direct1地址单元的数据送 direct2地址单元内6 Mov direct, rn 将Rn的数据送 direct地址单元内7 Mov Rn, direct 将direct地址单元内的数据送Rn寄存器8 Mov direct, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据送direct地址单元内9 Mov @Ri, direct 寄存器Ri内为RAM地址,将direct地址单元内的数据送该地址单元内10 Mov A, Rn 将寄存器Rn内的数据送累加器A11 Mov Rn, A 将累加器A内的数据送寄存器Rn12 Mov A, direct 将direct地址单元内的数据送累加器A13 Mov direct, A 将累加器A内的数据送direct地址单元内14 Mov A, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据送累加器A15 Mov @Ri , A 寄存器Ri内为RAM地址,将累加器A的数据送该地址单元内16 目的地址传送Mov DPTR, #data16 将16位立即数送数据指针DPTR寄存器17字节交换SWAP A 累加器A高低4位数据交换18 XCH A, Rn 将累加器A数据和寄存器Rn内的数据交换19 XCH A, direct 将累加器A数据和direct地址单元内的数据交换20 XCH A, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据与累加器A的数据交换21 XCHD A, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据低4位与的低4位交换22与外部RAM传送MOVX @DPTR, A将累加器A的数据送数据指针DPTR寄存器所指外部RAM地址单元内23 MOVX A , @DPTR 将DPTR寄存器所指外部RAM地址单元内的数据送累加器A24 MOVX A, @Ri 寄存器Ri内为片外RAM地址,将该地址单元内的数据送累加器A25 MOVX @Ri, A 寄存器Ri内为片外RAM地址,将该地址单元内的数据送累加器A26与ROM传送MOVC A, @A+DPTRA+DPTR构成ROM地址,将该地址内的数据送累加器A内27 MOVC A, @A+PC A+PC构成ROM地址,将该地址内的数据送累加器A内28栈操作PUSH direct堆栈指针SP自加1后,将direct地址单元的数据压进堆栈,29 POP direct 堆栈的数据送direct地址单元中,后堆栈指针减1,算术运算指令30加法指令ADD A, Rn将寄存器Rn与累加器A的数据相加后,结果保存到累加器A31 ADD A, direct 将direct地址单元内的数据与累加器A的数据相加后结果保存到累加器A32 ADD A, @Ri 寄存器Ri内位地址,将该地址单元内的数据与累加器A的数据相加后结果保存到累加器A33 ADD A, #data 将立即数与累加器A的数据相加后结果保存到累加器A34带进位加法ADDC A, Rn将寄存器Rn与累加器A的数据相加,再加上进位标志内的值后,结果保存到累加器A35 ADDC A, direct 将direct地址单元内的数据与累加器A的数据相加,再加上进位标志内的值后,结果保存到累加器A36 ADDC A, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据与累加器A的数据相加,再加上进位标志内的值后,结果保存到累加器A37 ADDC A, #data 将立即数与累加器A的数据相加,再加上进位标志内的值后结果保存到累加器A38带借位减法SUBB A, Rn将与累加器A的数据减去寄存器Rn的数据,再减去进位标志内的值,结果保存到累加器A39 SUBB A, direct 将与累加器A的数据减去direct地址单元内的数据,再减去进位标志内的值,结果保存到累加器A40 SUBB A, @Ri 寄存器Ri内为RAM地址,将累加器A的数据减去该地址单元内的数据,再减去进位标志内的值后,结果保存到累加器A41 SUBB A, #data 将累加器A的数据减去立即数,再减去进位标志内的值后,结果保存到累加器A42加1指令INC A 累加器A的值自加143 INC Rn 寄存器Rn的值自加144 INC direct direct地址单元内值自加145 INC @Ri 寄存器Ri内为RAM地址,该地址单元内的值自加146 INC DPTR 数据指针寄存器DPTR内的值自加147减1指令DEC A 累加器A的值自减148 DEC Rn 寄存器Rn的值自减149 DEC direct direct地址单元内的值自减150 DEC @Ri 寄存器Ri内为RAM地址,该地址单元内的值自减151 乘法MUL AB 累加器A与寄存器B内的值相乘,乘积的高8位保存在B寄存器,低8位保存在累加器A中52 除法DIV AB 累加器A的值除以寄存器B的值,商保存在累加器A 中,余数保存在B寄存器53 二-十进制调整DA A 对累加器A的结果进行十进制调整逻辑运算指令54逻辑与ANL A, Rn将累加器A的值和寄存器Rn的值进行与操作,结果保存到累加器A中55 ANL A, direct 将累加器A的值和direct地址单元内的值进行与操作,结果保存到累加器A中56 ANL A, @Ri 寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行与操作,结果保存到累加器A中57 ANL A, #data 将累加器A的值和立即数进行与操作,结果保存到累加器A中58 ANL direct, A 将累加器A的值和direct地址单元内的值进行与操作,结果保存到direct地址单元内59 ANL direct, #data 将立即数和direct地址单元内的值进行与操作,结果保存到direct地址单元内60逻辑或ORL A, Rn将累加器A的值和寄存器Rn的值进行或操作,结果保存到累加器A中61 ORL A, direct 将累加器A的值和direct地址单元内的值进行或操作,结果保存到累加器A中62 ORL A, @Ri 寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行或操作,结果保存到累加器A中63 ORL A, #data 将累加器A的值和立即数进行或操作,结果保存到累加器A中64 ORL direct, A 将累加器A的值和direct地址单元内的值进行或操作,结果保存到direct地址单元内65 ORL direct, #data 将立即数和direct地址单元内的值进行或操作,结果保存到direct地址单元内66逻辑异或XRL A, Rn将累加器A的值和寄存器Rn的值进行异或操作,结果保存到累加器A中67 XRL A, direct 将累加器A的值和direct地址单元内的值进行异或操作,结果保存到累加器A中68 XRL A, @Ri 寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行异或操作,结果保存到累加器A中69 XRL A, #data 将累加器A的值和立即数进行异或操作,结果保存到累加器A中70 XRL direct, A 将累加器A的值和direct地址单元内的值进行异或操作,结果保存到direct地址单元内71 XRL direct, #data 将立即数和direct地址单元内的值进行异或操作,结果保存到direct地址单元内72 按位取反CPL A 累加器A的值按位取反73 累加器清零CLR A 累加器A清074 逻辑右移RR A 累加器A的值循环右移1位75 逻辑左移RL A 累加器A的值循环左移1位76 带进位右移RRC A 累加器A的值带进位循环右移1位77 带进位左移RLC A 累加器A的值带进位循环左移1位控制转移指令78无条件转移SJMP relrel为地址偏移量,PC加2后的地址加上rel作为目标地址,程序跳到目标地址继续运行79 AJMP addr11(a10- a0) addr11为11位地址,PC加2后的地址高5位与指令中的低11位地址构成目标地址,程序跳到目标地址继续运行80 LJMP addr16 将addr16的16位地址送程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序81 JMP @A+DPTR 目标地址的基地址放在DPTR中,目标地址对基地址的偏移量放在累加器A中,它们相加构成目标地址82条件转移JZ relIf(累加器A=0)则PC加2再加上rel作为目标地址83 JNZ rel If(累加器A!=0)则PC加2再加上rel作为目标地址84 CJNE A, direct, rel If(累加器A!= direct地址单元的值)则PC加3再加上rel作为目标地址85 CJNE A, #data, rel If(累加器A!= 立即数)则PC加3再加上rel作为目标地址86 CJNE Rn, #data, rel If(寄存器Rn的值!= 立即数)则PC加3再加上rel作为目标地址87 CJNE @Ri, #data, rel 寄存器Ri内为RAM地址,If(该地址单元的值!= 立即数)则PC加3再加上rel作为目标地址88循环转移DJNZ Rn, rel寄存器Rn的值减1后,If(寄存器Rn的值!=0)则PC加2再加上rel作为目标地址89 DJNZ direct, rel Direct地址单元的值减1后,If(该值!=0)则PC 加3再加上rel作为目标地址90布尔条件转移JC rel If(CY=1)则PC加2再加上rel作为目标地址91 JNC rel If(CY=0)则PC加2再加上rel作为目标地址92 JB bit, rel If(bit位=1)则PC加3再加上rel作为目标地址93 JNB bit, rel If(bit位=0)则PC加3再加上rel作为目标地址94 JBC bit, rel If(bit位=1)则PC加3再加上rel作为目标地址,且bit位清095调用指令ACALL addr11addr11为11位地址,PC加2后的地址PUSH进堆栈,再将PC的地址高5位与指令中的低11位地址构成目标地址,程序跳到目标地址继续运行96 LCALL addr16 PC加3后的地址PUSH进堆栈,再将16位地址送PC 作为目标地址,程序跳到目标地址继续运行97返回指令RET子程序返回指令,把堆栈中的地址恢复到PC中使程序回到调用处98 RETI 中断程序返回指令,把堆栈中的地址恢复到PC中使程序回到调用处99 空操作NOP 空操作位操作指令100布尔传送MOV C, bit 将bit位地址中的值送PSW中的进位标志位CY101 MOV bit, C 将PSW中的进位标志位CY的值送bit位地址中102 位清0 CLR C 将进位标志位CY清0103 位清0 CLR bit 将bit位地址内清0104位置1 SETB C 将进位标志位CY置1105 SETB bit 将bit位地址内置1106位与ANL C, bit 将Cy和bit位地址中的值进行与操作后,结果送Cy107 ANL C, /bit bit位地址中的值取反后再与Cy进行与操作,结构送Cy108位或ORL C, bit 将Cy和bit位地址中的值进行或操作后,结果送Cy109 ORL C, /bit bit位地址中的值取反后再与Cy进行或操作,结构送Cy110位取反CPL C 将Cy取反111 CPL bit 将bit位地址的值取反说明:Ri, Rn指当前工作寄存器,i=0,1;n = 0 – 7,当前工作寄存器由程序状态字寄存器PSW的2个位RS1, RS0决定。
汇编语言表格查找实验报告
四、实验分析及总结
通过这次的实验,让我更熟悉了汇编语言。
并且在程序的调试过程中,
多困难。
这次试验让我初步了解DOS显示功能调用。
这让我对调试程序也有了更深的体会。
调试程序的时候一直出错,但是检查了很久都发现没有错误。
发现有几个字打错了。
最后才把程序调试成功。
而且在写程序的时候也遇到了很多疑惑,都是不停的翻书和询问同学才解决的这些问题。
这次的实验比上次试验难度有所加大。
有的时候自己不太能理解代码里面的内容,所以以后要更加认真的学习。
无论是实验课和理论课我都会全力以赴去学好它。
教评价指标。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下面是汇编语言实现楼宇对讲功能的查表实例:
当单片机外部系统发来不同的指令时,便启动查表功能,实现不同的操作,如单片机接收到的指令保存在RXD中,RXD+1保存指令终止符号,如要实现某个操作,外部发来0XA0操作符到RXD中,0XFF到RXD+1中,即开启查表,开始执行下列程序:
MOV A,(RXD_Buf+1)
CJNE A,RXD_Buf,Exit_Receive_Msg_Proc如果为退出指令,则退出
MOV B,RXD_Buf
JmpX_By_Ins Division_Instruction,Run_Instr_Addr子程序
;==================================
Division_Instruction:
DB00H,01H,03H,05H,06H,07H,09H,0AH,13H,14H,15H,16H
DB28H,29H,2AH,2CH,2EH,30H,31H,33H,35H,FAH;FLAG OF END
;==================================
Run_Instr_Addr:
LJMP Call_By_Manger;00H;
LJMP Put_Down_Hook;01H;
LJMP Put_Off_Hook;03H;
LJMP Disable_Calling;05H;
LJMP Enable_Get_Msg;06H;
LJMP There_Are_Msg;07H;
LJMP Call_By_Door;09H;
LJMP FeedBack_Alarm;0AH
LJMP Put_Off_Hook_For_Out;13H;
LJMP Set_Up_Fortify_By_GLC;14H;
LJMP Disable_Alarm_By_GLC;15H;
LJMP Reset_Divi_Password;16H;
LJMP Calling_By_T_Main;28H;
LJMP Hook_On_By_Brother;29H;
LJMP Hook_Off_By_Brother;2AH;
LJMP Hook_On_By_T_Main;2CH;
LJMP Calling_By_Brother;2EH;
LJMP Define_Baud_Rate;30H
LJMP GLC_Proced_Alarm;31H
LJMP Graphic_Msg_In_Main;33H
LJMP Rst_Standart_Rate;35H
Return_Main_Body_For_Divi_Ins:
LJMP Exit_Receive_Msg_Proc;FAH
JmpX_By_Ins MACRO I_Table,F_Table
MOV DPTR,#I_Table将指令表首地址赋给DPTR
LCALL DPTR_Comp_B调用
MOV A,R05此时R05表示查找到的位置
MOV B,#03LJMP指令占三个字节
MUL AB
MOV DPTR,#F_Table将功能地址赋给DPTR,加上要跳转的位置
JMP@A+DPTR找到相应的LJMP子程序,开始执行
ENDM
;=============================
DPTR_Comp_B:;INPUT INSTRUCTION CODE,RETURN R7---INSTRUCTION SEQUENCE
MOV R05,#0从头开始查表
Comp_Next_DPTR:
CLR A
MOVC A,@A+DPTR将指令表首地址赋给A
CJNE A,B,Chk_End_Flag此时B为接收的指令,如A0H,不相等,跳转,如果找到,则退出
SJMP Exit_DPTR_Comp
Chk_End_Flag:
CJNE A,#FAH,Comp_INC_DPTR A不是跳出指令,跳转,往下查表
SJMP Exit_DPTR_Comp
Comp_INC_DPTR:
INC DPTR位置加1
INC R05
SJMP Comp_Next_DPTR查找下一个
Exit_DPTR_Comp:
RET
;=====================================。