汇编语言的8051编程简介
汇编语言是一种低级编程语言,用于在助记符方面编写程序代码。尽管存在许多当前需要的高左侧语言,但装配编程语言普遍用于许多应用程序。它可用于直接硬件操作。它也用于写下8051编程代码与其他高级语言相比,使用更少的内存,有效地使用更少的时钟周期。
汇编语言编程
汇编语言是一种完全硬件相关的编程语言。在编写程序之前,嵌入式设计人员必须对特定处理器或控制器的硬件具有足够的知识。汇编语言是由助记符开发的;因此,用户无法轻易理解修改程序。
汇编程序设计语言是由各种编译器和“Keiluvison.“最适合微控制器编程发展。microcontrollers或处理器可以仅以“0s或1s”形式理解二进制语言;汇编程序将汇编语言转换为二进制语言,然后将其存储在其中微控制器内存来执行特定的任务。
8051单片机建筑
8051.微控制器是个基于CISC的哈佛建筑,它具有32 I / O,定时器/计数器,串行通信和存储器等外设。该微控制器需要一个程序执行需要保存和读取功能的内存的操作。8051.微控制器由RAM和ROM组成,用来存储指令。
寄存器是计算机的主要组成部分的处理器和微控制器其中包含在内存中,提供更快的收集和存储数据的方式。8051汇编语言编程基于内存寄存器。如果我们希望通过执行减法,添加等来将数据操作到处理器或控制器,我们不能直接在内存中执行此操作,但它需要寄存器来处理和存储数据。微控制器包含几种类型的寄存器,可以根据其在它们中操作的指令或内容进行分类。
8051单片机程序汇编语言
汇编语言由所有用于编写程序的元素组成顺序。遵循给定的规则用汇编语言编写程序。
汇编语言规则
- 程序集代码必须用大写字母书写
- 标签后面必须有一个冒号(label:)
- 所有的符号和标签都必须以字母开头
- 所有的注释都是小写的
- 程序的最后一行必须是END指令
汇编语言助记符是op-code的形式,例如MOV,ADD,JMP等,用于执行操作。
op-code:运算码是一条可以由CPU执行的指令。这里的操作码是MOV指令。
操作数:操作数是可由OP-Code操作的单一数据。示例,乘法操作由乘以操作数的操作数执行。
语法:MUL那B;
汇编语言编程的元素:
- 汇编指令
- 指令系统
- 寻址模式
汇编指令:
组装指令向CPU提供指示。8051.微控制器由给控制单元指示方向的各种汇编指令组成。最有用的指令是8051编程,例如:
- ORG
- D B
- 拱
- 结束
ORG(起源):该指令表示程序的开始。这用于在组装期间设置寄存器地址。例如;ORG 0000H告诉编译器在地址0000h开始的所有后续代码。
语法:org 0000h.
D B(定义字节):定义字节用于允许一个字节串。例如,打印“EDGEFX”,其中每个字符都是由地址,最后打印的“字符串”由DB直接双引号。
语法:
org 0000h.
MOV, # 00 h
-----
-----
DB“EDGEFX”
装备(等效):等效指令用于等同于变量的地址。
语法:
reg拱那09年h
- - -
- - -
MOVreg那#2H
结束:END指令用于指示程序的结束。
语法:
reg拱那09年h
- - -
- - -
MOVreg那#2H
结束
寻址模式:
访问数据的方式称为寻址模式。CPU可以通过使用寻址模式以不同方式访问数据。8051.微控制器包括五种寻址模式,例如:
- 立即寻址模式
- 寄存器寻址模式
- 直接寻址模式
- 间接寻址模式
- 基索引寻址方式
立即寻址模式:
在这种寻址模式下,源必须是可以接下来的值,而是必须是SFR寄存器,通用寄存器和地址。它用于在内存寄存器中立即存储值。
语法:
MOV A, #20h //A是一个累加器寄存器,20存储在A //中
MOV R0.那#15 // R0是一个通用寄存器;15存储在R0寄存器中
mov p0,#07h // p0是sfr寄存器; 07存储在p0 //中
MOV 20 h那#05h //20h为注册地址;05存储在20h//
前:
MOV R0, # 1
MOV R0, #20 //R0 < -R0[15]+20,最终值存储在R0//中
注册地址模式:
在这种寻址模式下,源和目的地必须是寄存器,但不是通用寄存器。所以数据没有移动通用银行登记簿。
语法:
MOV A、B;// A是SFR寄存器,B是通用寄存器//
MOV R0,R1 //无效指令,GPR至GPR不可能//
前:
mov r0,#02h
mov a,#30h
添加R0,A // R0 <-R0 + A,最终值存储在R0寄存器//中
直接寻址模式
在这种寻址模式下,源或目的(或源和目的)必须是地址,而不是值。
语法:
MOV一那20h // 20h是一个地址;a是注册//
mov 00h,07h //两者都是GPS寄存器//的解决方案
前:
mov 07h.那# 01 h
MOV, # 08年h
添加一个那07h // a <-a + 07h最终值存储在//中
间接寻址模式:
在该寻址模式下,必须是源或目的地(或目的地或源)一种间接地址,但不是值。此寻址模式支持指针概念。指针是用于存储其他变量的地址的变量。该指针概念仅用于R0和R1寄存器。
语法:
MOVR0,#01h // 01值存储在R0寄存器中,R0地址为08h //
MOV R1, #08h//R1是指针变量店地址(08h)的R0 //
MOV 20 h那@ R1 // 01值存储在GP寄存器//的20H地址中
基索引寻址模式:
这种寻址模式用于从外部存储器或ROM内存。所有寻址模式都无法从代码内存中读取数据。代码必须通过DPTR寄存器读取。DPTR用于指向代码或外部存储器中的数据。
语法:
MOVC A, @A+DPTR //C表示代码内存//
MOC X A,@ A + DPTR // X表示外部存储器//
例如:MOV A,#00h // 00h存储在寄存器//中
MOV DPTR, #0500H //DPTR点在内存中0500H地址//
MOVC A, @A+DPTR //发送值来寄存器//
MOV P0, A //发送给PO注册的日期//
指令集:
指令集是控制器或处理器的结构,它向控制器提供命令,引导控制器处理数据。指令集由指令、本机数据类型、寻址模式、中断寄存器、异常处理和内存体系结构组成。该8051微控制器可以遵循CISC指令与哈佛架构。在8051编程的情况下,不同类型的CISC指令包括:
- 数据传输指令集
- 连续的指令集
- 算术指令集
- 分支我nstruction组
- 循环Instrcution集
- 条件指令集
- 无条件的指令集
- 逻辑指令集
- 布尔指令集
算术指令集:
算术指令执行基本操作,例如:
- 加成
- 乘法
- 减法
- 师
加成:
org 0000h.
MOV R0, #03H //将值3移动到寄存器R0//
MOV A,#05H //将值5移动到累加器A //
加一个,00H //加入值的R0值,并存储结果在//
结束
乘法:
org 0000h.
MOV R0, #03H //将值3移动到寄存器R0//
MOV A,#05H //将值5移动到累加器A //
MUL A, 03H //增加结果存储在累加器A //中
结束
减法:
org 0000h.
MOV R0, #03H //移动值3到寄存器R0//
MOV A,#05H //将值5移动到累加器A //
SUBB A, 03H //结果值存储在累加器A //
结束
师:
org 0000h.
MOV R0, #03H //移动值3到寄存器R0//
MOV A,#15H //将值5移动到累加器A //
div a,03h //最终值存储在累加器A //中
结束
条件指令
CPU通过检查单位状态或字节状态来根据条件执行指令。8051.微控制器由各种条件指令组成,例如:
- JB - >下面跳
- JNB - >跳跃如果不在下面
- 如果进位,>跳
- JNC - >如果跳不携带
- JZ - >如果为零跳转
- jnz - >跳跃如果不零
1.语法:
jb p1.0,标签
- - - - - - - - -
- - - - - - - - -
标签: - - - - - - - -
- - - - - - - - -
结束
2.语法:
JNB P1.0,标签
- - - - - - - - -
- - - - - - - - -
标签: - - - - - - - -
- - - - - - - - -
结束
3.语法:
JC、标签
- - - - - - - - -
- - - - - - - - -
标签: - - - - - - - -
- - - - - - - - -
结束
4.语法:
JNC、标签
- - - - - - - - -
- - - - - - - - -
标签: - - - - - - - -
- - - - - - - - -
结束
5.语法:
生理改变、标签
- - - - - - - - -
- - - - - - - - -
标签: - - - - - - - -
- - - - - - - - -
结束
6.语法:
JNZ、标签
- - - - - - - - -
- - - - - - - - -
标签: - - - - - - - -
- - - - - - - - -
结束
呼叫和跳转指令:
呼叫和跳转指令用于避免程序的代码复制。如果某些特定代码在程序中不同的不同地方使用不止一次的代码,请提及具体的名字来那时码我们可以在程序中的任何地方使用该名称,而不每次输入代码。这降低了程序的复杂性。8051编程由LCALL,SJMP等呼叫和跳转指令组成。
- lecall.
- 一个电话
- SJMP
- LJMP
1.语法:
org 0000h.
- - - - - - - - -
- - - - - - - - -
acall,label.
- - - - - - - - -
- - - - - - - - -
SJMP停止
标签: - - - - - - - -
- - - - - - - - -
- - - - - - - - -
雷
停:NOP
2.语法:
org 0000h.
- - - - - - - - -
- - - - - - - - -
LCALL,标签
- - - - - - - - -
- - - - - - - - -
SJMP停止
标签: - - - - - - - -
- - - - - - - - -
- - - - - - - - -
雷
停:NOP
循环指令:
每次执行自增和自减操作时,循环指令都用于重复该块。8051.微控制器包含两种类型的循环指令:
- cjne - >比较和跳跃,如果不等于
- DJNZ - >减少并跳跃如果不是零
1.语法:
的CJNE.
mov a,#00h
MOV B, # 10 h
标签:公司A.
– – – – – –
– – – – – –
CJNE A,标签
2.语法:
的德吉
MOV R0, # 10 h
标签:– – – – – –
– – – – – –
DJNE R0、标签
– – – – – –
– – – – – –
结束
逻辑指令集:
8051单片机指令集提供了和、或、异或、测试、非和布尔逻辑指令,用于根据程序的需要设置和清除比特。
1.语法:
MOV A, #20H /00100000/
MOV R0, #03H /00000101/
ORL A, R0 // 001000000 /00000101=00000000//
2.语法:
MOV A, #20H /00100000/
MOV R0, #03H /00000101/
退火,R0
3.语法:
MOV A, #20H /00100000/
MOV R0, #03H /00000101/
XRL A,R0
转换运营商
移位运算符用于有效地发送和接收数据。8051.微控制器包括四个班次运营商:
- rr - >旋转右转
- RRC - >通过携带旋转
- rl - >旋转左
- RLC - >通过进位左旋转
向右旋转(RR):
在该移位操作中,MSB变为LSB,并且所有位均向右侧逐行移动。
语法:
mov a,#25h
RR一
旋转左(RL):
在这个移位操作中,MSB变成LSB,所有的位逐位连续地向左侧移位。
语法:
mov a,#25h
RL一
RRC通过进位右旋转:
在该换档操作中,LSB移动以携带并且携带变为MSB,并且所有位通过比特位置朝向右侧比特转移。
语法:
mov a,#27h
RRC A.
RLC通过进位左旋:
在该移位操作中,MSB移动以携带,并且随身携带变为LSB,并且所有位在逐位位置朝向左侧移动。
语法:
mov a,#27h
RLC一
基本嵌入式C程序:
该微控制器每一种操作系统的编程都是不同的。有许多操作系统如Linux,Windows,RTO等。但是,RTOS对嵌入式系统开发有几个优点。下面给出一些组装级编程示例。
使用8051,LED闪烁微控制器:
- 使用8051微控制器显示7段显示器的编号
- 使用8051计时器/计数器计算和程序微控制器
- 使用8051进行串行通信计算和编程微控制器
带8051米的LED程序Icrocontrler.
1.WAP来切换PORT1指示灯
ORG 0000 h
TOGLE:mov p1,#01 //移动00000001到P1寄存器//
调用DELAY //执行DELAY //
mov a,p1 // moveP1值蓄电池/ /
CPL A //补充值//
MOV P1, A //将11111110移到port1寄存器//
调用DELAY //执行DELAY //
SJMP TOGLE
延迟:mov r5,#10h //加载寄存器R5,10 //
2: MOV R6, #200 //加载寄存器R6与200//
一个:MOV R7,#200 //加载寄存器R7,具有200 //
DJNZ R7,$ //减少R7直到它为零//
DJNZ R6,一个//递减R7,直到它为零//
对R7进行减量,直到R7为0
RET //返回主程序//
结束
定时/计数器计算和程序使用8051米iCrocontroller.:
延迟是应用软件开发中的重要因素之一。该计时器和柜台是硬件组件微控制器,在许多应用中使用计数脉冲来提供精确的时间延迟。B.这些任务都是通过软件技术来实现的。
1. WAP计算500us延时。
MOV TMOD, #10H //通过寄存器选择计时器模式//
MOV TH1, #0FEH //存储延迟时间到更高位//
mov tl1,#32h //在低位//中存储延迟时间
JNB TF1,$ //减少计时器的值,直到它为零//
CLR TF1 //清除定时器标志钻头//
CLR TR1 //关闭定时器//
2.WAP来切换led与我们5.秒延迟
ORG 0000 h
返回:mov po,#00h
ACALL延迟
mov p0,#0ffh
ACALL延迟
SJUMP返回
延迟:MOV R5, #50H //加载寄存器R5 50//
DELAY1: MOV R6, #200 //加载寄存器R6与200//
//加载寄存器R7与200//
DJNZ R7,$ //减少R7直到它为零//
djnz r6,delay2 //递减r6直到它为零//
DJNZ R5,Delay1 //递减R5,直到它为零//
RET //返回主程序//
结束
3.WAP使用mode0 coun0计数250个脉冲
语法:
ORG 0000 h
MOV TMOD, #50H //选择计数器//
mov th0,#15 //移动计数脉冲较高位//
mov th1,#9fh //移动计数脉冲,较低位//
在计时器//上设置tr0 //
JNB $ //减少计数值直到零//
clr tf0 //清除计数器,标志钻头//
clr tr0 //停止计时器//
结束
使用8051米的串行通信编程iCrocontroller.:
串行交流通常用于传输和接收数据。8051.微控制器由UART / USART串行通信组成,通过信号和接收信号Tx和rx引脚。UART通信串行将数据逐步传输。UART是一个半双工协议,传输和接收数据,但不同时接收数据。
1.WAP,将字符传输到超级终端
MOV SCON, #50H //设置串口通讯//
mov tmod,#20h //选择计时器模式//
MOV TH1, #-3 //设置波特率//
在计时器上设置TR1 //
将SBUF,#'s'//传输到串行窗口//
JNB TI, $ //定时器的衰减值,直到它是零//
CLR RI //清除接收中断//
CLR TR1 //清除定时器
2. WAP通过超级终端传输接收字符
MOV SCON, #50H //设置串口通讯//
mov tmod,#20h //选择计时器模式//
mov th1,#-6 //设置波特率//
在计时器上设置TR1 //
将SBUF,#'s'//传输到串行窗口//
$ //定时器的衰减值,直到它是零//
CLR RI //清除接收中断//
MOV P0,SBUF //将SBUF寄存器值发送到port0 //
CLR TR1 //清除定时器
这是关于汇编语言的8051编程和基于示例的程序的简单介绍。我们希望这些关于汇编语言的充分信息一定会对读者有所帮助,并期待他们在下面的评论部分给出有价值的评论。
先生,谢谢你分享这些重要的信息。
很好,对我这样的新人来说很有帮助。示例程序使所有的事情都变得清晰
好
好