DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 236|回复: 0
打印 上一主题 下一主题

PIC单片机PAGE和BANK

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 15:08:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
从PIC单片机的指令结构上来分析一下为什么PIC中要有BANK和PAGE的设置吧。先来看一下为什么PIC中要把RAM区划分多个BANK。
  仔细观察PIC单片机汇编语言指令的格式,一条完整的汇编语言指令语句通常是这样的:标号操作码助记符 操作数1,操作数2;注释。其中,主体部分是‘操作码助记符操作数1,操作数2’。
  例如:
  指令:MOVF 33,1
  操作码助记符:MOVF ;
  操作数1:33 ;
  操作数2:1 ;
  而在程序被编译时指令语句的主体部分会被转换为代码的形式,通常是:指令代码操作数2 操作数1。
  例如在指令位数为14位的中档PIC单片机中:
  指令:MOVF 33,1
  转换后代码:00 1000 1 011 0011
  其中指令代码为:00 1000(MOVF f,d=00 1000 dfff ffff);
  操作数2:1 (d = 1);
  操作数1:011 0011 (f = 33H) ;
  可以看到,由于指令代码占用了6位,再加上操作数2占用的1位,分配给操作数1的只有7位了。也就是说操作数1最大只能是‘111 1111’(7FH),因此‘MOVF’直接的寻址范围只能是00H"7FH之间。其它的对寄存器操作的指令情况基本相同,因此指令位数为14位的PIC单片机将每125个(00H"7FH,80H"FFH……依此类推)寄存器划分为一个BANK,并且将STATUS寄存器的RP1、RP0为定为BANK设置位。在编写程序时,要对某个寄存器进行操作就首先要对BANK的设置位进行设置,从而切换到该寄存器所在的BANK。
  例如PIC16F877单片机的EECON1寄存器(地址18CH)就要通过设置BANK的形式来寻址了,这时寻址的地址数据是这样组成的‘BANK值+操作数1’,其中‘BANK值’=‘RP1 RP0’。
  举个例子来说:
  指令:BSF EECON1,1 ;
  指令转换后代码:0101 001 000 1100 ;
  这时如果‘BANK值’=3,寻址的地址数据就会是‘11 +000 1110’(18CH);而此时如果BANK值为0,则寻址的地址数据就会是‘00 +000 1110’(0CH),这样就出现了错误。
  用同样的方法我们可以分析PIC单片机的PAGE的设置。举个例子,PIC16C5X的一个页面是512条指令。它的‘GOTO’指令是这样的:‘101 k kkkk kkkk’(‘GOTO’指令没有操作数2)。我们看到该指令的操作数1最大只能是‘1 1111 1111’(1FFH),因此在指令位数为12位的PIC16C5X 芯片中‘GOTO’指令只能在512条指令(000H"1FFH,200H"3FFH,……)的范围内直接跳转。同样的理由,PIC16C5X的‘CALL’指令(‘1011 kkkk kkkk’)只能调用256条指令(000H"0FFH,200H"2FFH,……)范围内的子程序,因此在进行PIC16C5X单片机的编程时要将供调用子程序的入口放在前半页面。
  而在指令位数为14位的PIC16F87X单片机中‘GOTO’指令代码是‘101 kkk kkkk kkkk’,而‘CALL’的指令代码是‘100 kkk kkkk kkkk’,它们的寻址范围都是‘111 1111 1111’(3FFH)。因此在PIC16F87X单片机中,一个页面长度就是3FFH=2048条指令(2K)。而且在使用中,使用‘CALL’指令时就不需要将子程序入口放在上半页面了。
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-8-1 03:53 , 耗时 0.085648 秒, 20 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

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