新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC單片機數據存儲器特號和功能上

        PIC單片機數據存儲器特號和功能上

        作者: 時間:2011-02-22 來源:網絡 收藏
        PIC系列品種雖多,但各產品內部硬件資源的數據存儲器設置仍是很有規律的。筆者以PIC16C71A和PIC16C63/65/65A兩個品種為實例,查看它們片內數據存儲器的結構,找出它們的特點并說明某些寄存器的主要功能,以供用戶快速編程。表1和表2分別是PIC16C71A和PIC16C63/65/65A產品片內數據存儲器的資源表,其它系列產品的片內數據存儲器結構的資源與表1、表2資源都很相似,其差別僅僅是片內功能部件的種類和數量不同(PIC16C57/58有4個存儲體)。筆者從下述幾個方面介紹表1和表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共同有的,它們不僅是寄存器名稱、功能相同,而且寄存器的地址也完全相同。如果再查看其它,如PIC16C62/62A/64/64A、PIC16C71/72/73/73A/74/74A、PIC16C8X……它們的專用寄存器名稱凡是與以上相同者其地址也完全與上述相同,可見盡管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的增加了很多。
          專用寄存器的每個寄存單元都有相對應的固定用途,它們可分成兩類:一類用于供CPU操作(如INDF和FSR、STATUS、PCL……);另一類用于控制外圍功能芯片的操作。 學習數據存儲器時,不僅要了解各寄存器單元的功能,而且還應在編制程序時會調用它們完成編程目的。下面筆者將以編程實例說明它們的用途。
          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 CLRFINDF ;清除INDF,即清除FSR內容所指
                ;向的單元20h→2Fh
          INCF   FSR;(指針)FSR內容加1
          BTFSSFSR,4;判別(指令)FSR的D3位,若為零
                 ;執行下條循環指令;若為1間跳
                 ;執行。
          GOTOLOOP;跳轉到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 BankselPORTC   ;選擇PORTC所在
                   ;數據存儲器的存儲
                   ;體(實為Bank0)
          CLRF  PORTC ;對RC口清零
          MOVLW B′01000001′;A/D轉換時鐘選
                   ;擇FOSC/8,打開
                   ; A/D轉換器
          MOVWF ADCON0 ;設定了A/D轉換
                   ;操作部分參數
          BankselOPTION_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)關于用PIC16F877單片機作A/D轉換器。PIC16F877單片機是具有多通道模擬量輸入的8位A/D轉換器。上述的源程序是利用該PIC產品作A/D轉換的一種實驗程序,其實驗目的是用PIC16F877單片機來實現一個通道的8位A/D轉換,并將轉換結果以二進制形式經RC口輸出再由LED顯示。實驗的電路原理如附圖(筆者根據源程序而繪出的PIC16F877A/D轉換硬件電路圖)所示。
          (2)編制與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的各位置數,以確定PIC16F877單片機的RA1口為模擬量的輸入通道。并選中芯片電源作基準電壓。讀者若需深入了解A/D控制寄存器ADCON0和ADCON1的各位詳細功能,請參看有關PIC單片機書籍的詳細介紹。
          A/D轉換的主程序(main)約有13條,將在本版PIC系列專題的后期結合實驗板的編程器介紹。PIC系列單片機的其它專用寄存器,如TRISA、STATUS Bank等,本報在前幾期有關PIC單片機的文中均已介紹過。  

        成都 丁錦元



        分頻器相關文章:分頻器原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 当雄县| 竹山县| 兴海县| 武汉市| 伊通| 大城县| 临夏市| 三门县| 民丰县| 全椒县| 盐亭县| 朝阳市| 资溪县| 金秀| 舞阳县| 若尔盖县| 顺义区| 文化| 五台县| 隆尧县| 广灵县| 肇源县| 顺义区| 永靖县| 丽江市| 香格里拉县| 卓尼县| 江津市| 丹阳市| 莎车县| 南安市| 满城县| 文山县| 富裕县| 若尔盖县| 阿尔山市| 永兴县| 荃湾区| 大石桥市| 都昌县| 汉源县|