官术网_书友最值得收藏!

1.3 特殊功能寄存器

由圖1-2可知,片內數據RAM中80H~FFH空間大部用于特殊功能寄存器,表1-1列出了8051單片機的所有特殊功能寄存器。

表1-1 8051單片機的特殊功能寄存器

上述特殊功能寄存器分別用于以下功能單元。

CPU:ACC、B、PSW、SP、DPTR。

并行口:P0、P1、P2、P3。

中斷系統:IE、IP。

定時器/計數器:TMOD、TCON、T0(TH0,TL0)、T1(TH1,TL1)。

串行口:SCON、SBUF、PCON。

本書用C語言開發單片機系統時,由于ACC可以位尋址,它常被用于判斷字節中各位的狀態,例如,要判斷某字節第3位是否為1,可將ACC看成一個字節變量,讓ACC獲取該字節的值,然后直接判斷ACC3是否為1,當然需要先有定義sbit ACC3 = ACC^3。

又如PSW寄存器,由于PSW可以位尋址,reg51.h已包含有該寄存器的各位定義,定義片斷如下:

        /*  BIT Register  */
        /*  PSW   */
        sbit CY  = 0xD7;
        sbit AC  = 0xD6;
        sbit F0  = 0xD5;
        sbit RS1 = 0xD4;
        sbit RS0 = 0xD3;
        sbit OV  = 0xD2;
        sbit P   = 0xD0;

其中CY和F0仍在C語言程序中直接大量使用,例如,要將字節變量d(10101101)由高位開始逐位串行發送,可對d進行8次左移,并逐次發送CY,即

    for (i = 0 ; i < 8 ; i++)
    {
      d <<= 1;
      DQ = CY;
    }

代碼中DQ為某外部芯片接收串行數據的引腳,這段代碼利用匯編語言程序中常用的進位標志位CY,可以方便地獲取移出的各位。

表1-1中帶有*號的特殊功能寄存器是可位尋址的,Keil\c51下頭文件reg51.h對P0~P3以外的可位尋址的各寄存器位給出了獨立定義,如果要直接引用4個I/O端口的各引腳,需要在程序中用sbit進行單獨定義,當然也可以將頭文件reg51.h(keil\c51\inc)改成at89x52.h(keil\c51\inc\atmel),4個端口的各引腳在該頭文件中均被單獨定義,如P0.1被定義為P0_1,盡管其中有些定義對8051單片機是無效的,但這并不影響程序正常編譯運行。

主站蜘蛛池模板: 黄冈市| 新民市| 历史| 家居| 深州市| 鱼台县| 额尔古纳市| 弥勒县| 佛学| 开原市| 东乌| 诸城市| 泸定县| 师宗县| 海淀区| 仪陇县| 闽清县| 久治县| 仪征市| 潼关县| 夏邑县| 嵊州市| 武宣县| 睢宁县| 阳西县| 汉中市| 佛冈县| 宜昌市| 陇川县| 白河县| 宽甸| 长宁县| 东阳市| 扎兰屯市| 垫江县| 禹城市| 铜陵市| 天峻县| 随州市| 廊坊市| 凤冈县|