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

发布者:konglingdeyuan最新更新时间:2019-11-26 来源: eefocus关键字: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            ;子程序返回


关键字:PIC单片机  汇编语言  操作指令 引用地址:PIC单片机汇编语言学习(一)

上一篇:比较/ 捕捉/PWM (CCP)模块
下一篇:【PIC单片机】MPLAB X IDE快速入门指南

推荐阅读最新更新时间:2024-11-08 13:39

PIC单片机软件编程技巧
项目是有关机器人控制的实现。控制部分采用PICl6F7X系列单片机,运用汇编语言编程,运行速度较快,能够达到系统的要求。在这里使用的大多是数字信号的控制,电机的控制只有开和合两种状态。在动作的过程中需要两只手臂、身体、头部、脚部等的协调动作。整个控制系统比较复杂,因而在PIC程序编写和空间分配方面需要注意一些问题。 1、 动作标志位的使用 在整个控制中,组合的动作很多,当所有动作定位都通过光电开关控制时,在程序编写上就有一些问题。如要求左手上升到鼓掌位、右手上升到举手位(手初始位置在最下的放下位),光电开关0有效(即为0时是挡住),到达正确位置。用简单的理解可以写成下面的程序: list P=16c73 call left
[单片机]
GCC的简单指令的分析
记下来以后以便于查询,以后还会更新更多的命令 -c 编译或者汇编源文件但是不作为连接,编译器输出对英语原文件的目标文件。 -S 编译后停止不进行汇编,对于每个属于的非汇编语言文件,输出文件时汇编语言。 -E 只是进行预编译 -o file 指定输出文件file 该选项不在乎GCC产生什么输出。 -include file 在处理常规输入文件之前首先处理文件file file会得到最先的编译 -imacros file 在处理常规输入文件之前, 首先处理文件 file 文件 唯一效果就是使文件中的宏定义生效 -nostdinc: 不要在标准系统目录中寻找文件,只是搜索‘-I’选项指定的目录。
[单片机]
PIC单片机与触摸屏串行通信的MODBUS协议实现
  摘要:介绍一种在PIC单片机与触摸屏之间采用Modbus协议实现异步串行通信的方法。简单介绍了Modbus通信协议,给出了硬件电路连接图、程序流程图以及用PIC单片机C语言编写的部分通信程序。实际使用证明该方法数据传输稳定可靠,并提供了良好的人机交互环境。   关键词:触摸屏 PIC单片机 Modbus协议 通信   工控中经常需要观察系统的运行状态或者修改运行参数。触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好。单片机广泛应用于工控领域中,与触摸屏配合,可组成良好的人机交互环境。触摸屏和单片机通信,需要根据触摸屏采用的通信协议为单片机编写相应的通信程序。Modbus
[工业控制]
以寄存器Rn为目的操作数的指令(3条)—mcs51单片机汇编语言
以寄存器Rn为目的操作数的 指令 (3条) 这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中,源操作数不变。有直接、立即和寄存器寻址方式: MOV Rn,data ;(data)→(Rn) 直接寻址单元中的内容送到寄存器Rn中 MOV Rn,#data ;#data→(Rn)立即数直接送到寄存器Rn中 MOV Rn,A ;(A)→(Rn) 累加器A中的内容送到寄存器Rn中
[单片机]
PIC单片机应用专题二:显示接口及编程
单片机的显示输出常用来显示系统参数、运行结果及人机对话窗口。常用的显示器主要有LED(数码管)和LCD(液晶)。因LED应用简单、价格低廉得到广泛应用,下面主要对其应用进行介绍。 数码管有共阴和共阳之分,常见的结构形式有单个和四位一体,一般由8字段构成,显示方式有静态显示和动态显示两种方式。 静态显示: 在静态显示方式下,共阴极或共阳极点连接在一起接地或接高电平。每位的段选项线与一个8位并行口相连。只要在该位的段选线上保持段选码电平,该位就能保持相应的显示字符。8位并行口可以是单片机的I/O口或者采用串行输入/并行输出的移位寄存器(常用为74HC164、74HC595) 下面是试验板LED动态显示的电路图: 如果要显示
[单片机]
<font color='red'>PIC单片机</font>应用专题二:显示接口及编程
PIC单片机】-- 中断、定时器相关知识
00 写在前面 该系列的文章,源自于担任过PIC单片机课程的助教,主要向学弟们讲解了几节实验课的内容。在此记录上课的一些知识。 本系列文章主要介绍的内容: 实验1–介绍和基本I/O–按钮和LED(学习嵌入式的第一步就是点一个灯,就像学习编程语言的第一步都是写一个“hello world”代码) 实验2–MPLAB+PICkit 3+LCD+I/O(这次主要是介绍液晶显示屏的使用,很多时候我们系统的调试都需要用到,比如做一个测温系统,那我们就可以通过液晶显示屏,显示传感器采集的数值,然后再通过软件来做进一步的处理) 实验3–ADC(这个是模数转化实验,就是之前模数电学习那些知识的一个综合运用) 实验4–串行通信–UA
[单片机]
【<font color='red'>PIC单片机</font>】-- 中断、定时器相关知识
少走弯路,PIC单片机中断总结
PIC单片机有多个中断源,16系列只有一个中断入口,18系列有两个中断入口,不同编译器下书写格式又不大一样。网上资源千篇一律,也不够系统,只是简单的罗列程序,代码生存的环境不一样也少有说明。在此做个简单的总结,因为又走了弯路... 1.先说18系列(MCC18编译器下): MPLAB C18不自动把中断服务程序放在中端向量处。通常将GOTO指令放在中断向量处,从而把控制权转交给相应中断服务程序。 void low_isr(void); void high_isr(void); *****************************低级中断入口及服务子程序***************************
[单片机]
初学PIC单片机--存储器
初学PIC单片机--存储器 存储器可分为数据存储器(RAM)和程序寄存器(ROM或EEPROM)两种. 它是计算机的记忆装置,通过存储程序和数据,使单片机具有记忆能力. RAM用来存放临时数据或中间结果(掉电数据不保存) EEPROM用来存放程序或数据(单片机掉电后EEPROM中的数据/程序可长期保存) 特殊功能寄存器SFR (1)间接寻址寄存器INDF和FSR寄存器 (2)程序状态寄存器STATUS (3)程序计数器PC 1 GOTO跳转 2 堆栈(堆栈的操作遵循一种"后进先出"的规则,即最先进的数据最后出栈,最后进的数据最先出栈.) (4)端口寄存器PORTA---PORTE (5)选择寄器COPTIO
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved