单片机汇编语言查表实例

合集下载

单片机汇编语言举例

单片机汇编语言举例

动态显示字符"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汇编语言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单片机汇编指令速查表

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单片机简介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语言经典实例解析

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 更多。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
;=====================================。

相关文档
最新文档