发 帖  
原厂入驻New
[文章]

PIC单片机数据存储器的特点和功能

2011-11-3 14:17:36  1413
分享
1
本帖最后由 eehome 于 2013-1-5 10:04 编辑


1统一编址 

  不同型号的PIC单片机,其数据存储器的内部资源仅仅是功能种类和多少的不同。如PIC16C71A型,其引脚为18脚,主要功能是带有8位的A/D转换部件,有4个A/D通道模拟输入,所以在表1中与其A/D转换部件有关的专用寄存器ADRES(用于存放A/D转换的数值结果)、A/D控制寄存器ADCON0(用于控制A/D转换器的操作)和A/D控制寄存器ADCON1(用于控制选择A/D引脚的功能)等。对PIC16C65/65A型,其引脚是40脚的,其功能比PIC16C71A强,因而数据存储器表2中的专用寄存器的种类就比表1的增加了很多。
    PIC系列单片机各类数据存储器都是以寄存器方式工作和寻址的。专用寄存器包括了定时寄存器TMRO、选择寄存器OPtiON(又称为项选寄存器)、程序计数器PCL、状态寄存器STATUS、间接寻址寄存器INDF和FSR、端口I/O寄存器(如PORTA、PORTB…)和相对应的端口I/O控制寄存器(又称为端口I/O数据方向寄存器,如TRIAS、TRISB…)、保持寄存器PCLATH和中断控制寄存器INTCON等。上述的专用寄存器都是PIC16C63/65/65A和PIC16C71A共同有的,它们不仅是寄存器名称、功能相同,而且寄存器的地址也完全相同。如果再查看其它PIC单片机,如PIC16C62/62A/64/64A、PIC16C71/72/73/73A/74/74A、PIC16C8X……它们的专用寄存器名称凡是与以上相同者其地址也完全与上述相同,可见尽管PIC系列单片机品种多,但掌握它们的规律后,学习是不难的。


  专用寄存器的每个寄存单元都有相对应的固定用途,它们可分成两类:一类用于供CPU操作(如INDF和FSR、STATUS、PCL……);另一类用于控制外围功能芯片的操作。
学习PIC单片机数据存储器时,不仅要了解各寄存器单元的功能,而且还应在编制程序时会调用它们完成编程目的。下面笔者将以编程实例说明它们的用途。


2、间接寻址寄存器
    INDF和FSR 位于PIC数据存储器的最顶端、地址00单元(地址码最小)的间接寻址寄存器INDF是一个空的寄存器。它只有地址码,在物理上不是一个真正的寄存器。它的功能常常与寄存器FSR(又称寄存器选择寄存器)配合工作,实现间接寻址目的。初学专用寄存器INDF和FSR时,记住下述的逻辑关系对编程是有帮助的:使用寄存器INDF的任何指令,在逻辑上都是对寄存器FSR所指向的RAM进行访问,即对INDF(本身)进行间接寻址(访问),读出的应是FSR内容。以下的一个简单程序是用间接寻址方式清除RAM地址20h~2Fh单元寄存器内容的实例。
    MOVLW 0x20  ;20h→w,对指向RAM单元的指针
          ;初始化
    MOVWF FSR   ;20h→FSR,FSR指向RAM
LOOP CLRF     INDF ;清除INDF,即清除FSR内容所指
           ;向的单元20h→2Fh
    INCF   FSR   ;(指针)FSR内容加1
    BTFSS    FSR,4;判别(指令)FSR的D3位,若为零
         ;执行下条循环指令;若为1间跳
         ;执行。
    GOTO    LOOP;跳转到LOOP(循环)
CONTINUE…    ;已完成功能,继续执行程序
  由上述指令看出,因寄存器INDF和FSR的配合工作,达到了对RAM地址20h~2Fh的寄存器清零目的。由于完成上述功能的指令数很少,这就会简化指令系统,使PIC单片机的指令集得以精简。
  说明:上述各条指令易于看懂,所以无需再复述,但其中的一条判别指令“BTFSS FSR,4”比较关键。该条指令是保证题设中要选择RAM地址单元上限值2Fh时,其对应的二进制数为00101111B,此时FSR的第4位恰为1。所以上述指令中用了一条判断指令;BTFSS FSR,4,判断FSR的D3位值是否为1,若不为1而为0,则执行下条循环指令GOTO LOOP,使FSR中的地址不断加1,直到寄存器FSR的D3位为1时,这时它的内容代表的RAM地址恰为2Fh。
  由此可见,学习PIC单片机数据存储器中的专用寄存器时,不必要对每个产品的专用寄存器进行学习,只需先学习它们的共同点,然后选中一个产品型号的专用寄存进行详细分析,有条件时进行必要的相关指令操作,就能完全掌握单片机技术。  

3   A/D转换寄存器
 这里摘录一段笔者从网上下载的用PIC16F877芯片(带Flash存储器的)完成有关A/D转换的源程序部分指令,并用它说明有关A/D转换寄存器在指令中的用法。这里先引用部分源程序,源程序中的注释是笔者按照指令在程序中的作用所加的注释(不是某条指令的直接功能),这是初学者读以下指令时应注意的。A/D转换器部分源程序清单如下:
  DEMO 877ASM
  List P=16F877
  org   0x00    ;复位向量
  NOP        ;空操作
Start Banksel  PORTC   ;选择PORTC所在
              ;数据存储器的存储
             ;体(实为Bank0)
  CLRF     PORTC   ;对RC口清零
  MOVLW B′01000001′  ;A/D转换时钟
             ;择FOSC/8,打开
             ; A/D转换器
  MOVWF ADCON0   ;设定了A/D转换
             ;操作部分参数
  Banksel  OPTION_REG ;选择OPTION所在
              ;数据存储器的存储             ;体(实为Bank1)
  MOVLW B′10000111′  ;设置预分频器TM
             ; R0,分频率1∶256
  MOVWF OPTION   ;完成上条指令设置
  CLRF  TRISC     ;设定RC口(8位)
             ;为输出
  MOVLW B′0001110′  ;选中模拟量通道1
             ;(RA1/AN1)
  MOVWF ADCON1    ;模拟基准电压
VREF为芯片电源电压,选择通道1(RA1/AN1)完成
main …

  要阅读上述的指令,读者还需了解以下必要的补充知识。
  (1)编制与A/D转换器有关的专用寄存器指令。要读懂上述的源程序,应根据以下的线索:1)把握源程序的编写惯例;2)选择RC口和对它清零;3)给A/D控制寄存器ADCON0的各位置数,达到A/D转换时选择A/D位的采样时间,即注释中的A/D时钟选择;4)选择专用寄存器Option并给它各位置数,达到选择预分频器TMR0和确定其分频率(1∶256);5)设定RC口为输出,以保证LED显示;6)给A/D控制器ADCON1的各位置数,以确定PIC1F877的RA1口为模拟量的输入通道。并选中芯片电源作基准电压。读者若需深入了解A/D控制寄存器ADCON0和ADCON1的各位详细功能,请参看有关PIC单片机书籍的详细介绍。

  (2)关于用PIC16F877作A/D转换器。PIC16F877单片机是具有多通道模拟量输入的8位A/D转换器。上述的源程序是利用该PIC产品作A/D转换的一种实验程序,其实验目的是用PIC16F877来实现一个通道的8位A/D转换,并将转换结果以二进制形式经RC口输出再由LED显示。实验的电路原理如附图(笔者根据源程序而绘出的PIC16F877A/D转换硬件电路图)所示。

  A/D转换的主程序(main)约有13条,将在本版PIC系列专题的后期结合实验板的编程器介绍。PIC系列单片机的其它专用寄存器,如TRISA、STATUS Bank等,本报在前几期有关PIC的文中均已介绍过。  
PIC单片机数据存储器的特点和功能










ljmdrl 2012-12-15 15:47:12
PIC单片机数据存储器的特点和功能
回复

举报

zxlpcb 2013-1-1 20:15:10
学习了
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发文章
关闭

站长推荐 上一条 /8 下一条

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