单片机编程之汇编语言基础-常用指令和程序模式

简要:
    单片机编程语言编写程序,即可使用单片机C语言编程,也可以使用单片机汇编语言。C语言编程具有模块化管理特性、可移植性高,适合编写较大的程序。但作为单片机高级程序设计,许多高级单片机ARM、很多新产品的单片机也是先需要经过汇编语言编译器之后才有C语言编辑器的。所以学好单片机汇编语言也是很重要的编程语言课程。
    此外,单片机有通用型和专用型之分。专用型是厂家为固定程序专门开发的一种单片机,其程序在研发时已经写入,后期不可以修改。通用型单片机则是我们可以平常自主学习与编织程序的单片机,其程序需要自己写入,可以更改。单片机根据其基本操作处理位数不同,还可以分为:1位、4位、8位、16、32位单片机。

正文:
在此我们主要讲解美国ATMEL公司的89C51单片机。
一、89C51单片机PDIP(双列直插式)封装引脚图:

单片机编程之汇编语言基础-常用指令和程序模式

其引脚功能如下:
P0口(p0.0—p0.7):为双向三态口,可以作为输入/输出口。但在实际应用中通常作为地址/数据总线口,即为低8位地址/数据总线分时复用。低8位地址在ALE信号的负跳变锁存到外部地址锁存器中,而高8位地址由P2口输出。
P1口(p1.0—p1.7):其每一位都能作为可编程的输入或输出线。
P2口(p2.0—p2.7):每一位也都可作为输入或输出线用,当扩展系统外设时,可作为扩展系统的地址总线高8位,与P0口一起组成16位地址总线。对89c51单片机来说,P2口一般只作为地址总线使用,而不作为I/O线直接与外设相连。
P3口(p3.0—p3.7):其为双功能口,作为第一功能使用时,其功能与P1口相同。当作为第二功能使用时,每一位功能如下表所示。

P3口第二功能

单片机编程之汇编语言基础-常用指令和程序模式
 
Rst\Vpd:上电复位端和掉电保护端。
XTAL1(xtal2):外接晶振一脚,分别接晶振的一端。
Gnd:电源地。
Vcc:电源正级,接+5V。
PROG\ALE:地址锁存控制端
PSEN:片外程序存储器读选通信号输出端,低电平有效。
EA\vpp:访问外部程序储存器控制信号,低电平有效。当EA为高电平时访问片内存储器,若超出范围则自动访问外部程序存储器。当EA为低电平时只访问外部程序存储器。

二.  常用指令及其格式介绍:

1、指令格式:
   [标号:]操作码  [ 目的操作数][,操作源][;注释]
   例如:LOOP:ADD   A,#0FFH    ;(A)←(A)+FFH

2、常用符号:
   Ri和Rn:R表示工作寄存器,i表示1和0,n表示0~7。
   rel:相对地址、地址偏移量,主要用于无条件相对短转移指令和条件转移指令。
   #data:包含于指令中的8位立即数。
   #data16:包含于指令中的16位立即数。
   addr16:16位目的地址。
   direct:直接寻址的地址。
   bit:内部数据存储器RAM和特殊功能寄存器SFR中的可直接寻址位地址。
   @:间接寻址寄存器或基地址寄存器的前缀。
  (X):表示X中的内容。
  ((X)):表示由X寻址的单元中的内容,也就是(X)作地址,该地址的内容用((X))表示。

3、常用伪指令:
   ORG:规定目标程序段或数据块的起始地址。    格式:ORG+空格+地址    例如:ORG  0000H  
   END:结束指令,放在程序的末尾,单独使用,一段程序只用一次。
   DB(定义字节):从指定地址单元开始,定义若干字节存储单元并赋初始值。

4、常用寻址方式:
   直接寻址: MOV    A,30H
   立即数寻址:MOV    A,#20H
   寄存器间接寻址:MOV   A,@Ri(i=1,2)
   基址加变址寄存器寻址:MOV   A,@A+DPTR
   寄存器寻址:MOV    A,Rn(n=0—7)

5、指令大集合:
传送类指令:
单片机编程之汇编语言基础-常用指令和程序模式
传送类指令:
单片机编程之汇编语言基础-常用指令和程序模式
逻辑操作类指令:
单片机编程之汇编语言基础-常用指令和程序模式
控制转移类指令:
单片机编程之汇编语言基础-常用指令和程序模式
位操作类指令:
单片机编程之汇编语言基础-常用指令和程序模式

三、一般常用程序模式:
1、开始程序:ORG   0000H
             JMP    0030H
             ORG   0030H
             …
             …
2、软件延时子程序:YANSHI:  MOV   R7,#25
                        D1:  MOV   R6,#50
                        D2:  MOV   R5,#200
                             DJNZ   R5,$
                             DJNZ   R6,D2
                             DJNZ   R7,D1
                             RET
若12M晶振则延时时长约为:25&TImes;50&TImes;200&TImes;2&TImes;10-6s,若为6M晶振则延时时长为:25×50×200×2×2×10-6s
3、硬件延时子程序:(1)查询方式:
                     YANSHI:  MOV  TMOD,#01H
                               MOV   R0,#20
                        UP:    MOV  TH0,#3CH
                               MOV  TL0,#0B0H
                               SETB  TR0
                               JNB    TF0,$
                               CLR   TF0
                               DJNZ  R0,UP
                               RET
此延时程序为20(R0)×50ms,即为一秒,若需要更长的延时只需要改变R0的值。
4、一级中断程序:外部定时器0中断
                                    ORG   0000H
                                    JMP    002CH
                                    ORG   0003H
                                    JMP    ZHONGDUAN
                                    ORG   002CH
                             MAIN:  MOV   TCON,#01H
                                    MOV   IP,#01H
                                    MOV    IE,#81H
                                    …
                                    …
                         ZHONGDUAN: PUSH  A
                                    PUSH  PSW
                                    SETB  RS0
                                    CLR   RS1
                                    …
                                    …
                                    POP  PSW
                                    POP  A
                                    RETI
若不需要对主程序的值进行保护则中断的子程序只需直接载入中断主程序需要执行的子程序便可。

技术专区

  • mybatis动态sql详解
  • 用VHDL语言设计数据传输系统中的HDB3编码器
  • 裸机程序如何驱动硬件?看前辈是怎么说的
  • 应用面向对象编程SoC原则的典型示例
  • 嵌入式开发之java常用开发工具介绍
  • 单片机编程之汇编语言基础-常用指令和程序模式已关闭评论
    A+
发布日期:2019年07月14日  所属分类:物联网