历史上的今天
返回首页

历史上的今天

今天是:2024年11月27日(星期三)

正在发生

2019年11月27日 | PIC单片机基础2

2019-11-27 来源:eefocus

PIC中档系列单片机,每条指令14位,共有35条汇编指令,根据操作对象不同,可将其分为三类:

  • 字节操作类指令

  • 位操作类指令

  • 立即数与控制类操作指令

1、字节操作类指令,以MOVF指令为例:

指令:MOVF     f, d

说明:

  • 功能:寄存器f值传送;

  • MOVF为助记符,即操作指令,大小写均可;

  • f代表文件寄存器标识符,即RAM寄存器(PIC单片机基础1中有说明),取值范围为[0, 127]

  • d代表目标标识符,表明指令操作的结果放在何处;

   d=0:操作的结果放在W寄存器中;

   d=1:操作的结果放在f寄存器中;

  • 影响状态位:Z

  • 指令周期:1(执行本指令需要的时间)

实例1:

假设执行指令前,F寄存器22H的值为05H,W寄存器内的值为00H

MOVF    22H, 0

由于d=0,指令执行后结果存入W寄存器:

  22H(F寄存器)= 05H;

  W =  05H;

  Z =  0;

指令应用:由于PIC指令中,不存在F寄存器之间的值传递操作指令,这种操作需要借助W寄存器作为中介,并且此指令也可以直接给W寄存器赋值;

实例2:

假设执行指令前,F寄存器22H的值为05H,W寄存器内的值为00H

MOVF    22H, 1

由于d=1,指令执行后结果存入F寄存器(即22H):

  22H(F寄存器)= 05H;

  W =  00H;

  Z =  0;

指令应用:指令操作以后,寄存器值大小、位置都没变,那么这种指令有什么用呢?答案是:通过状态位Z判断寄存器的值是不是0。


在PIC的汇编指令中,我们没有高级语言中if (var == 0)这样方便的判断操作,想要判断一个寄存器的值是不是0,只有通过状态寄存器中的Z位来判断。当某条可以影响Z状态位的指令执行后,如果Z=0,则说明指令执行的结果非0;如果Z=1,则说明执行的结果为0。

上面的指令操作后Z=0,所以判断22H中的值非0。


2、位操作类指令,以BCF指令为例:

指令:BCF    f, b

说明:

  • 功能:f寄存器的位b清零;

  • BCF和f不在赘述,命令中的b表示f寄存器的位b,从零开始,取值范围为0~7;

  • 影响状态位:无(PIC的所有位操作指令都不影响状态位);

  • 指令周期:1;

示例:

假设执行指令前,FLAG_REG寄存器的值为0xFF(1111 1111b)

BCF    FLAG_REG, 3

注意:位是从0开始的,指令中的位3,实际对应的是寄存器的第四位

执行后:

FLAG_REG = 0xF7(1111 0111b)

指令应用:在程序中,我们经常会用到很多标志位,通过标志位来确定某项功能的当前状态,标志位的状态可通过位操作实现。


3、立即数与控制类操作指令,以MOLW指令为例:

指令:MOVLW    k

说明:

  • 功能:立即数k送入W寄存器;

  • K为立即数,取值范围为[0, 255];

  • 影响状态位:无;

  • 指令周期:1;

以下通过两个具体示例,说明对于立即数k的理解:

示例1:

假设执行指令前W寄存器值为00H

MOVLW    30H

执行后:

W = 30H

这种操作,明显直接。

示例2:

假设执行指令前寄存器UD_REG的地址为25H,寄存器的值为45H,W寄存器的值为00H

MOVLW    UD_REG

执行后:

W = 25H

先说一下寄存器、寄存器地址、寄存器值、寄存器名的关系:

寄存器:我们可以把它当做一个个的盒子;

寄存器地址:由于盒子(寄存器)太多,我们需要给每个盒子加一个编号,00,01,…,这样便于我们描述要找的是哪一个盒子,这个编号就是寄存器地址;

寄存器值:在这些盒子里面,我们可以放鞋子、袜子…,这些放在盒子里面的东西就是寄存器的值;

寄存器名:为了让人便于知道盒子里面装的是什么,我们可以给盒子起一个别名,比如01编号里面装的是运动鞋,那么可以把它叫做运动鞋盒,以后说运动鞋盒,就是指01编号盒子,上面的UD_REG就是这个道理;

在示例2中,执行指令后W寄存器的值是寄存器UD_REG的地址。所以在执行此类操作时,一定要小心谨慎,不能被寄存器的值忽悠了。


以上是对三类命令的大体分析,完整的指令列表详见单片机的数据手册或指令集说明手册。

推荐阅读

史海拾趣

DZUS公司的发展小趣事

在XX世纪XX年代,DZUS公司的创始人John Doe看到了航空工业对高质量紧固件的迫切需求。他凭借自己在机械工程领域的深厚造诣,设计并制造了第一款DZUS快拆紧固件。这款产品在航空工业中迅速获得了认可,为DZUS公司的发展奠定了坚实的基础。John Doe的创业精神和对品质的坚持,成为了DZUS公司的核心价值观。

ANOVA公司的发展小趣事

ANOVA深知,成功的关键在于与合作伙伴的紧密合作。因此,公司始终与客户保持紧密的合作关系,共同开发特定的解决方案,协助制定部署策略。ANOVA的服务团队以客户的需求为导向,以十几种语言提供个性化的服务,确保每一位客户都能得到满意的解决方案。此外,ANOVA还积极与商业伙伴合作,共同开拓市场,实现共赢。

EM Microelectronic-Marin SA公司的发展小趣事

EM Microelectronic-Marin SA,作为斯沃琪集团公司(The Swatch Group)的一部分,自1971年起便开始了对超低功率集成电路的探索。在当时,电子设备的功耗是一个重要的挑战,尤其是在移动和便携式设备中。EM Microelectronic-Marin凭借其前瞻性的技术视野,投入大量资源进行研发,逐渐在行业内建立了低功耗技术的领先地位。

Analog Microwave Design公司的发展小趣事

Analog Microwave Design公司一直注重企业文化的建设和传承。公司倡导创新、务实、合作的企业精神,鼓励员工敢于挑战、勇于创新。同时,公司还注重员工的培训和发展,为员工提供了良好的职业晋升通道和学习机会。这种积极向上的企业文化不仅激发了员工的工作热情和创新精神,还为公司的长期发展提供了有力保障。

以上五个故事分别从初创时期的挑战与机遇、技术创新的突破、国际化战略的实施、产品线的丰富与完善以及企业文化的建设与传承等方面,展现了Analog Microwave Design公司在电子行业发展的历程和成就。这些故事不仅反映了公司的成长轨迹,也体现了公司在面对市场变化和技术挑战时所采取的积极态度和应对策略。

Danaher Corporation公司的发展小趣事

随着全球化趋势的加强,丹纳赫集团开始积极拓展国际市场。通过在全球各地设立研发中心、生产基地和销售网络,丹纳赫集团成功地将产品和服务推向了全球市场。同时,丹纳赫集团还加强了与国际知名企业的合作,共同开发新技术和产品,进一步巩固了其在电子行业中的领先地位。

以上五个故事梗概概述了丹纳赫集团在电子行业中的发展历程和关键节点。如需更详细的信息和故事背景,建议查阅丹纳赫集团的官方资料或相关新闻报道。

Dionics Inc公司的发展小趣事

在20世纪90年代初,Dionics Inc由几位对电子技术充满热情的工程师创立。当时,电子市场正处于快速发展期,但也面临着激烈的竞争。Dionics Inc凭借其在电源管理领域的创新技术,成功开发出一款高效节能的电源管理芯片,赢得了市场的认可。然而,随着市场的进一步开放,来自国内外的竞争对手纷纷涌入,Dionics Inc面临着巨大的挑战。

问答坊 | AI 解惑

大家帮我看看这个芯片为何不工作

我用的主控是51,晶振是12m 我用51控制语音芯片,语音芯片工作在三线串口模式,但是语音芯片根本就不响应,我用仿真器仿真后所有的指令送的都正确,现在不知问题在哪?大家帮满看看…

查看全部问答>

诚征网友(ASIC/FPGA 验证)

eeworld 快没有分了,准备交5位网友,加50分。 但是,也不能太随便了,本人在这里诚征ASIC/FPGA 验证的网友。 欢迎讨论交流。…

查看全部问答>

想学蓝牙技术,但觉得无从着手,希望大家介绍下经验

想学蓝牙技术,但觉得无从着手。只有些C51的技术。 看了下书,主要是CSR和EBDK。 但书本介绍的太不清楚了,书没买好。也没具体的案例。以及开发的工具。 请问大家我要从哪下手呢?开发工具要在哪买?要多少钱呢?要掌握些什么知识呢?…

查看全部问答>

还有别的同步数据方案吗?

我们一直是用Sqlce与桌面的sql库同步数据,但很多用户不用sql数据库,另外sqlce环境也占用内户,所以我想请教大家,还有别的同步数据方案吗?手持机上不用加载数据库环境的方案。…

查看全部问答>

2010IIC秋季展-让我失望的盛会

    怀着兴奋的心情踏上2010IIC秋季展会征途,却抱着失落的心情而回,包括IIC展和LED展,好不容易度过了3个小时,我觉得必须通过这个总结来弥补今天的付出,好让我记忆此刻半导体的现状,所以其中有些言语或者会比较直白,又或者是 ...…

查看全部问答>

报道---传感器版块

传感器版块新人报道,大家多指教!…

查看全部问答>

嵌入式Linux应用_开发_完全_手册(完整版)

韦东山老师的 书 还是不错的 论坛里有一个贴  但是里面缺了很多章 发个完整版的 如果有版权问题 请斑竹删除~~~   觉得此书好,请自觉购买正版书籍!!! (共11个附件)   [ 本帖最后由 常见泽1 于 2 ...…

查看全部问答>

ADC10采集1KHz的正弦信号误差很大

贴出我的程序,单通的,测直流信号还可以,800mv 1KHz的正弦信号误差十分大,只显示0.1XX(XX是两个变化很快的数字),求解是什么原因?怎么解决? #include \"msp430g2553.h\" #include \"12864_1.h\" unsigned int s1 = 0; unsigned char i = ...…

查看全部问答>

关于zigbee的休眠与唤醒

zigbee终端的定时休眠最长的休眠时间是多少?休眠时间能否接收数据?…

查看全部问答>