电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
楼主: cyc20180228

PICmicro微控制器指令集

[复制链接]
 楼主| 发表于 2018-12-19 22:19:10 | 显示全部楼层
     4、处理器控制指令
     PIC17Cxx与中低档器件一样,但必须知道的关于处理器控制的仅有的一个方面是熔丝型只读存储器是怎么编程的,本贴可提供相关应用程序。
     四、PIC18Cxx型器件指令集
     1、数据传送指令:
     1)Ifsr  指令格式:
       Ifsr Value
      指令位模式:
      11101110|00ffkkkk
      11110000|kkkkkkkk
      指令操作:
      FSR# = Constant;
      标识位改变:
      None
      指令周期:
       2  
     2)movlb  指令格式:
       movlb Value
      指令位模式:
      00000001|kkkkkkkk
      指令操作:
      FSR  = Constant;
      标识位改变:
      None
      指令周期:
       1  
 楼主| 发表于 2018-12-20 00:03:41 | 显示全部楼层
本帖最后由 cyc20180228 于 2018-12-20 00:05 编辑

      3)movff  指令格式:
       movff s,d
      指令位模式:
      1100ffff|fffffffs
      1111ffff|fffffffs
      指令操作:
      Destination  Register
       = source Register;
      标识位改变:
      None
      指令周期:
       2  
     4)tblrd 指令格式:
       tblrd *
      指令位模式:
      00000000|000010xx
       见注:“xx”编码
      指令操作:
      if "TBLRD *"
         TABLAT = [TBLPTR]
      elseif "TBLRD *+"
         TABLAT = [TBLPTR]
         TBLPTR =TBLPTR + 1
      elseif "TBLRD *-"
         TABLAT = [TBLPTR]
         TBLPTR =TBLPTR - 1
      elseif "TBLRD +*"
         TABLAT = [TBLPTR + 1
         TBLPTR =[TBLPTR] ;
      标识位改变:
      None
      指令周期:
       2  
  注:Instruction    "xx "
       TBLRD *       00
       TBLRD *+      01
       TBLRD *-      10
       TBLRD +*      11
     5)tblwt 指令格式:
       tblwt *
      指令位模式:
      00000000|000011xx
       见注:“xx”编码
      指令操作:
      if "TBLWT *"
         [TBLPTR] = TABLAT
      elseif "TBLWT *+"
         [TBLPTR] = TABLAT
         TBLPTR =TBLPTR + 1  
      elseif "TBLWT *-"
         [TBLPTR] = TABLAT
         TBLPTR = TBLPTR - 1
      elseif "TBLWT +*"
         TBLPTR = TBLPTR + 1
         [TBLPTR] = TABLAT  
      标识位改变:
      None
      指令周期:
       Requires Interrupt
      or Reset to Complete  
  注:Instruction    "xx "
       TBLWT *       00
       TBLWT *+      01
       TBLWT *-      10
       TBLWT +*      11



 楼主| 发表于 2018-12-20 09:44:09 | 显示全部楼层
     2、数据处理指令
     1)subfwb 借位减法指令格式:
      subfwb Reg,f,a
      指令位模式:
      010101da|ffffffff
      指令操作:
      Destination = WREG - Reg -!C
      标识位改变:
      N,OV,C,DC,Z
      指令周期:
       1
 楼主| 发表于 2018-12-20 18:19:03 | 显示全部楼层
      2)negf 只能对WREG的内容取补的指令格式:
      negf Reg,a
      指令位模式:
      0110110a|ffffffff
      指令操作:
      Reg = (Reg^0x0FF) + 1;
      标识位改变:
      C,DC,N,OV,Z
      指令周期:
       1
 楼主| 发表于 2018-12-20 18:45:29 | 显示全部楼层
    3、执行过程转向指令
    1)Goto/Call  指令格式:
      Goto/Call Label
      指令位模式:
      call  |1110110s|nnnnnnnn
            |1111nnnn|nnnnnnnn
      goto  |11101111|nnnnnnnn
            |1111nnnn|nnnnnnnn
      指令操作:
      call
        if ( s = = 1 )
        Push Context Registers ;
        Push Next Address      ;
        Jump to Address
      Goto:
        Jump to Address      
      标识位改变:
      None
      指令周期:
       2
 楼主| 发表于 2018-12-20 18:57:26 | 显示全部楼层
      2)Rcall 调用指令格式:
      Rcall Label
      指令位模式:
      11011nnn|nnnnnnnn
      指令操作:
      Push Next Address ;
      PC = PC + 2 + 2's Complement "n";
      标识位改变:
      None
      指令周期:
       2
 楼主| 发表于 2018-12-20 20:47:33 | 显示全部楼层
本帖最后由 cyc20180228 于 2018-12-20 20:49 编辑

      3)偏移量分支指令
         bz 0标识位设置时分支/bnz 0标识位复位时分支指令格式:
         BZ/BNZ
         bc 进位标识位设置时分支/bnc 进位标识位复位时分支指令格式:
         BC/BNC
         bn 负标识位设置时分支/bnn 负标识位复位时分支指令格式:
         BN/BNN
         bov 溢出标识位设置时分支/bnov溢出标识位复位时分支指令格式:
         BOV/BNOV
      指令位模式:
      BC    |11000010|nnnnnnnn
      BNC   |11100011|nnnnnnnn
      BN    |11100110|nnnnnnnn
      BNN   |11100011|nnnnnnnn
      BOV   |11100100|nnnnnnnn
      BNOV  |11100101|nnnnnnnn
      BZ    |11100000|nnnnnnnn
      BNZ   |11100001|nnnnnnnn
      BRA   |11010nnn|nnnnnnnn
      指令操作:
      BC/BNC: Branch on Carry Flag
      BN/BNN: Branch on "N" Flag
      BOV/BNOV: Branch on "OV" Flag
      BZ/BNZ: Branch on Zero Flag
      BRA: Branch Allways
      标识位改变:
      None
      指令周期:
       2 if Branch Taken
       1 otherwise
      注:偏移量n是一个二进制补码数。
      
 楼主| 发表于 2018-12-20 22:00:40 | 显示全部楼层
截图20181220215751.jpg
      
 楼主| 发表于 2018-12-20 22:54:03 | 显示全部楼层
      
    截图20181220225256.jpg
 楼主| 发表于 2018-12-21 08:40:18 | 显示全部楼层
   4种器件的指令集全部分享完毕,如有错误或不当之处请各位师傅批评指出,大家也可以在此分享编程体验及优化方案...
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2024-4-29 13:16 , Processed in 0.068289 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

快速回复 返回顶部 返回列表