PIC单片机汇编语言学习(一)

1、汇编语言的语句格式:

标号 操作码(指令助记符) 操作数 ;注释
(label) (opcode) (operand) (comment)

2、常用伪指令

a.EQU——符号名赋值伪指令
格式:符号名 EQU nn

b.ORG——程序起始地址定义伪指令
格式:ORG nnnn

c.END——程序结束伪指令
格式:END

d.LIST——列表选项伪指令
格式:LIST [可选项,可选项,......]

e.INCLUDE:调入外部程序文件伪指令
格式:INCLUDE "文件名"

2、分支程序结构

——对于程序中的指令运用作几点说明:
(1)凡是需要2个数参与的逻辑运算(与、或、异或)和算术运算(加、减),都需要事先将其中一个操作数放入W中。对于在此使用的减法指令更要格外关注,应预先把减数放人W中,或者说,预先放入W中的数,在运算中是当做减数,而寄存器中的数当做了被减数。
(2)一条条件跳转指令往往需要跟随一条无条件跳转指令,才能实现长距离的转移和程序的分支。
(3)PIC单片机的指令系统中没有设置专用的停机指令,可以用一条跳转到自身的无条件跳转指令GOTO来实现。

3、PIC单片机指令

由3种基本类型指令组成:
a.字节操作类指令
b.位操作类指令
c.立即数和控制操作类指令

对于字节操作指令,f——>文件寄存器标识符,d——>目标寄存器标识符

说明:目标标识符指定了操作结果的存放位置:
d=0 操作结果存入W寄存器
d=1 操作结果存入指定的文件寄存器,d默认值为1

4、指令集

5、例子

  1 ;--------------------------------------------------------
  2
  3 ;顺序程序结构
  4 ;将20H单元低4位取出存入21H,高四位取出存入22H
  5 ;要点:ANDLW和SWAPF
  6
  7 ;---------------------------------------------------------
  8     MOVF    20H,0    ;将20H单元的内容送人W
  9     ANDLW    0FH        ;W高四位清零低4位保持不变
 10     MOVWF    21H        ;将拆分后的低4位送21H
 11     SWAPF    20H,0    ;将20H单元内容高、低半字节换位后送W
 12
 13     ANDLW    0FH        ;再将W高四位清0低四位保持不变
 14     MOVWF    22H        ;将拆分后的高四位送22H单元
 15
 16
 17 ;--------------------------------------------------------
 18
 19 ;分支程序结构
 20 ;RAM中20H和21H单元存放2个数,找出大着存入22H单元
 21 ;要点:两数做减法,判断标志位C的值
 22
 23 ;---------------------------------------------------------
 24 STATUS    EQU    03H    ;定义STATUS寄存器地址为03H
 25 C        EQU    0    ;定义进位/借位标志C在STATUS中得地址为0
 26         MOVF    20H 0    ;将20H单元的内容送人W
 27         SUBWF    21H 0    ;用21H单元的内容减去W中的内容,结果存在W中
 28         BTFSS    STATUS,C;若C=1,没借位,则21H单元中的数大,跳到F21BIG
 29         GOTO    F20BIG    ;若C=0,有借位,20H单元中得数较大,则跳至F20BIG
 30
 31 F21BIG    MOVF    21H,0    ;将21H中的内容存入W寄存器
 32         MOVWF     22H        ;再将它转存到22H单元
 33         GOTO    STOP    ;跳过下面两条指令到程序末尾
 34
 35 F20BIG    MOVF    20H,0    ;将20H中的内容存入W寄存器
 36         MOVWF     22H        ;再将它转存到22H单元
 37
 38 STOP    GOTO    STOP    ;任务完成,停机,原地踏步
 39
 40
 41 ;--------------------------------------------------------
 42
 43 ;循环程序结构
 44 ;数据存储器中,从地址30H开始的50个单元全部写入00H
 45 ;要点:间接寻址寄存器FSR当做地址指针
 46
 47 ;---------------------------------------------------------
 48 COUNT    EQU        20H        ;指定20H单元作为循坏次数计数器(即循环变量)
 49 FSR        EQU     04H        ;定义FSR寄存器地址为04H
 50 INDF    EQU        00H        ;设定INDF寄存器地址为00H
 51         MOVLW    D50        ;把计数器初值50送入W
 52         MOVWF    COUNT    ;再把50转入计数器(作为循环变量的操作值)
 53         MOVLW    30H        ;把30H(起始地址)送入W
 54         MOVWF    FSR     ;再把30H转入寄存器FSR(用作地址指针)
 55
 56 NEXT    CLRF    INDF    ;把以FSR内容为地址所指定的单元清0
 57         INCF    FSR,1    ;地址指针内容加1,指向下一单元
 58         DECFSZ    COUNT,1    ;计数值减1,结果为0就跳过到下一条指令到STOP处
 59         GOTO    NEXT    ;跳转回去并执行下一次循环
 60 STOP    GOTO    STOP     ;循环结束之后执行该语句,实现停机
 61
 62 ;--------------------------------------------------------
 63
 64 ;子程序结构
 65 ;3个数最大者放入40H单元
 66
 67 ;---------------------------------------------------------
 68 STATUS    EQU        03H
 69 C        EQU        00H
 70 X        EQU        20H
 71 Y        EQU        21H
 72 Z        EQU        22H
 73 ;--------------------------------------------------------
 74
 75 ;主程序
 76
 77 ;---------------------------------------------------------
 78
 79 MAIN    MOVF    30H,0
 80         MOVWF    X
 81         MOVF    21H,0
 82         MOVWF    Y
 83         CALL    SUB
 84         MOVF    Z,0
 85         MOVWF    X
 86         MOVF    32H,0
 87         MOVWF    Y
 88         CALL SUB
 89         MOVF    Z,0
 90         MOVWF    40H
 91 STOP    GOTO    STOP
 92 ;--------------------------------------------------------
 93
 94 ;子程序:(入口参数:X和Y,出口参数:Z)
 95
 96 ;---------------------------------------------------------
 97 SUB        MOVF    X,0        ;将X内容送人W
 98         SUBWF    Y,0        ;Y内容减去W内容,结果存入W
 99         BTFSS    STATUS,C;若C=1,没有发生借位,执行下一条,否则跳转
100         GOTO X_BIG
101
102 Y_BIG    MOVF    Y,0        ;将Y中的数据送入W
103         MOVWF    Z        ;再将它转存到Z
104         GOTO    THEEND    ;跳过下面两条到末尾
105
106 X_BIG    MOVF    X,0        ;将X中的数据送入W
107         MOVWF    Z        ;再将它转存到Z
108 THEEND    RETURN            ;子程序返回
时间: 2024-12-09 05:24:55

PIC单片机汇编语言学习(一)的相关文章

PIC单片机之PWM PWM原理

1,什么是PWM      什么是PWM,专业点说脉宽调制,通俗点说 就是不断的输出高低电平. 比如 单片机 40ms的时间 输出高电平然后60ms的时间 输出低电平接着一直不断周期性的交替输出高低电平 这就是典型的PWM波.高电平输出的时间40ms就是传说中的脉宽,40ms+60ms=100ms 便是PWM的周期.假定我们把周期定为100ms.我们可以根据我们的需要 把高电平的时间加大或者减小,比如 高电平输出时间加大为80ms.那么低电平的时间就变为20ms. 也可以 高电平输出时间减小为2

PIC单片机基础1

1.PIC单片机总线结构--哈佛结构:即指令和数据空间是完全分开的,所以与常见的微控制器不同的一点是,程序和数据总线可以采用不同的宽度.以PIC16F684单片机为例,数据总线是8位的,但指令总线位数是14位. 2.在PIC单片机中,我们将RAM存储器称作文件寄存器(F寄存器). 3.PIC中程序寄存器和数据存储器分开,两者总线不同: 以PIC16F684单片机为例: 1)程序存储器构成:具有一个13位程序计数器,物理上具有2Kx14(0000H-07FFH)存储空间.复位后初始地址为0000H

ALL-51单片机ESP8266学习-AT指令(ESP8266作为TCP客户端,连接自己制作的TCP服务器)

从这一节开始,以视频加源码的形式,后期视频和程序将放在链接中 资料链接 链接:https://pan.baidu.com/s/10MxI8-Q33-M_R2WEHqEi1A 密码:j1sz 14节:    51单片机ESP8266学习-AT指令(ESP8266作为TCP客户端,连接自己制作的手机TCP服务器,互相通信) 视频链接: 15节:    51单片机ESP8266学习-AT指令(ESP8266作为TCP客户端,连接自己制作的电脑TCP服务器,互相通信) 视频链接: 16节:    51单

最强大的王爽汇编语言学习环境使用教程

最强大的王爽汇编语言学习环境使用教程 一.前言 这是采用VMwere Workstation 12 pro虚拟机软件,搭建的MS-DOS学习环境,在windowsXP/8/10及linux中均可以使用,在这个环境中,我集成了CCDOS中文系统,pdos中文系统,使用这些系统,可以进行中文输入与显示.还集成了,十分著名的汇编语言调试工具TR,它比debug更加强大.并且集成了适合王爽汇编语言学习的微软汇编语言编译器masm5和dos中最强大的文本编辑器 vim73 for DOS,这是一个支持彩色

汇编语言学习01

汇编语言(8086cpu) 恩,学习一门课程,我觉得应该有一定的条理性,而且自己要勤加思考才能学好,条理性:最好就是先整体的介绍一下全本书,然后再详细的介绍各个章节,而且,书籍的章节安排目录有一定的条理性,是渐进式的,前面的学习,为后面的内容做好了铺垫,打好了基础.不能随便排版(深入理解计算机系统是我读过数里面最好的) 读书教材:王爽的<汇编语言>教材比较好. 下面在阅读了三章以后写一下自己的收获. 汇编语言:基于底层的一门语言.在学习这本书时,学过计算机组成原理会对这本书的学习起到良好的作用

汇编语言学习第四章-第一个程序

本博文系列参考自<<汇编语言>>第三版,作者:王爽 前面的几章中我们断断续续的学习了一些指令,但是从来没有完整的通过汇编语言编写一个可执行文件即.exe文件.从本章开始我们将开始使用汇编语言并通过编译器编译链接一个完整的可执行文件. 4.1 一个源程序从写出到执行的过程 如下图所示,为一个完整的汇编程序到执行的过程: 上图的过程可以总结成以下几个步骤: (1) 根据汇编语言语法规则和目标程序工程编写汇编程序.这一步在文本编辑器或者在一些IDE中编写. (2) 通过汇编编译器将编写的

关于PIC单片机18系列超低功耗软件编程的关键点

最近做了个PIC超低功耗的项目,对功耗要求非常高.之前也看到网上一些文章,写得很好,但实现测试下来还是不行的. 这里总结一下,给同行分享一下,软件编程上要注意以下几点, 1,不用的模块要关闭 这里的模块,不光是enable位,而是PMD 2,不用的IO口要置成输出 这里和网上其它文章说的输入不一样,实测下来我这边是输出待机电流更低 3,内部稳压一定要关闭 这里千万要注意:一定要选择通过"controlled by REGSLP bit",否则单片机SLEEP后就死了,再也不能烧写了,这

51,AVR,MSP430,PIC单片机的区别与联系

51单片机目前比较流行的是ATMEL公司的89S51,带Flash ROM编程的单片机,可以多次重复编程, AVR系列单片机也是ATMEL公司生产的一种8位单片机,采用RISC精简指令集,速度快,功耗低,并集成A/D转换,PWM,SPI,USART,IIC等资源,大大简化外围电路的设计,AVR单片机属于8位单片机的高端产品. MSP430是美国TI公司生产的,采用RISC指令集,除了资源丰富,其主要特点是超低功耗,但是多数都内存不大. PIC系列单片机MicroChip公司生产,也是RISC指令

PIC单片机该怎么加密

见过很多初学者对PIC16系列单片机的ID码的读和写犯迷糊.说实话,这方面的资料也不怎么全.有些教材可能会涉及ID区域的介绍,可是往往是一代而过.这对初学者来说是比较容易犯错的地方.今天有空,对相关的问题作了一些整理,分享给大家.可能有些地方说的不够妥当,欢迎大家多多探讨. 1.什么是ID区域? ID区域是独立于EEPROM,FLASH,RAM的区域.程序设计人员可以利用该区域存放软件的版本号,编写日期,烧录日期,产品标识等信息.不过该区域很小PIC16系列只能存放4个字节. 2.ID码怎么烧录