新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 重溫51單片機

        重溫51單片機

        作者: 時間:2016-11-26 來源:網絡 收藏
        今天在圖書館看來一上午的書。。把51的一點知識順便記了一下。。。感覺很好。。。尤其是匯編那里。。對學習STM32有幫助。。。

        時鐘

        本文引用地址:http://www.104case.com/article/201611/321965.htm

        片內時鐘模式;由XTAL1和XTAL2外接石英晶體和震蕩電容

        片外時鐘模式;對于普通的8051,外部時鐘由XTAL2直接送到單片機內部,XTAL1應直接接地,而且XTAL2引腳的邏輯電平不是TTL電平,應外接上拉電阻。對于CMOS型單片機,其時鐘發生器的信號取自于反相放大器的輸入端,因此,外部時鐘信號應該從XTAL1引腳輸入,而XTAL2需要懸空。

        特殊功能寄存器區,如果某個特殊功能寄存器的地址可以被8整除,那么這個寄存器便可以進行位尋址。在位尋址指令中,可以用“寄存器名.位”“字節地址.位”“位地址”“位名稱”

        如“B.5”表示寄存器B的第五位。其中引腳p0,p1,p2,p3等都可以位尋址。

        單片機的指令時序

        拍;振蕩脈沖的周期,為51系列的最小時序單元。時鐘周期;時鐘周期是單片機CPU中的最基本的時間單元在一個時間周期內,CPU僅完成一個最基本的動作,拍經過二分頻,便可得到單片機的時鐘信號,由于是二分頻,因此一個時鐘周期包含兩個拍。

        機器周期;一個機器周期由6個時鐘周期構成,也就是12個拍組成。指令周期;指令周期執行一條指令所需要的時間,不同指令需要不同的指令周期。

        掉電保護;

        1當檢測到電源下降時,觸發外部中斷2在中斷服務子程序中將外部的RAM中的有用數據送到內部的RAM中保護,然后對電源控制寄存器PCON進行設置3切換備用電源,備用電源只為單片機內部RAM和專用寄存器提供維持電流,是這些重要數據不丟失,而整個外部電路因為電源的中斷而停止工作,時鐘電路停止震蕩,CPU也停止工作。4當電源恢復時,備用電源也要繼續工作10ms左右,以保證外部電路達到穩定狀態。

        專用寄存器

        程序計數器PC

        相當于一個搬運工,用來不斷的將指令搬運過來執行,由16個觸發器構成,是一個16位二進制的程序地址寄存器,程序計數器PC的編碼范圍是0000H~FFFFH,尋址范圍為64KB.

        累加器A8位二進制存儲器

        寄存器B8位二進制存儲器一般和A一起使用,用于乘除法操作指令。

        程序狀態寄存器PSW8位存儲器

        數據指針DPTR用于數據存儲器的操作,由8位寄存器DPH和DPL組合而成,是一個典型的16位寄存器。DPH為數據指針的高8位,DPL為數據指針的低8位。

        匯編語言;

        起始偽指令ORG格式:[標號:] ORG 16位地址

        在這,16位地址便是匯編程序塊或者數據塊存放的起始地址,如果省略ORG偽指令,則單片機程序代碼從默認的0000H單元塊開始存放。

        字節保存偽指令DB格式[標號:] DB8位字節數據表其中8位字節數據表可以是一個或者多個字節數據、字符串或者表達式。在數據表中各項用‘,’分隔,一個數據項占一個存儲單元,所有的數據項從標號指定的地址單元開始,將數據表中的字節數據按順序依次保存。數據項可以采用十進制、二進制、或者十六進制數據表示。例如

        ORG1100H

        DATA1:DB51H,67H,61,90H

        DATA2:DB110B,‘B’

        字節數據將從1100H地址進行保存字節數據。

        內存單元

        內容

        內存單元

        內容

        1100H

        51H

        1103H

        90H

        1101H

        67H

        1104H

        110B=06H

        1102H

        61=33H

        1105H

        ‘B’=42H

        字保存偽指令DW用于單片機內存中保存雙字節數據表,只能對程序存儲器進操作。

        格式[標號:]DW16位字數據表

        其中可以是一個或者多個字節數據、字符串或者表達式。在數據表中各項用‘,’分隔,一個數據項占一個存儲單元,所有的數據項從標號指定的地址單元開始,將數據表中的字節數據按順序依次保存。需要注意的是,16位數據要占用兩個單元的存儲器,高8位數據存儲到低地址字節,低八位數據存入到高地址字節。例如;

        ORG1000H

        DATA1:DW27AEH, 5CH

        字節數據從1000H地址開始保存字數據。

        內存單元

        內容

        內存單元

        內容

        1000H

        21H

        1002H

        00H

        1001H

        AEH

        1003H

        5CH

        空間預留偽指令DS用于在單片機內存中劃分出一定的存儲空間用作備用區域,只能對程序存儲器進行操作,[標號:]DS表達式這里,表達式表達了從標號指定的地址單元開始,保存存儲器單元的個數。

        ORG1100H

        BUF:DS08H

        即從地址1100H開始劃分出8個內存單元,從1108H之后的單元才可以進行其他操作。

        位變量偽指令BIT用于給位地址定義一個字符名稱

        字符名稱BIT位地址

        如;P1BITP2.4

        P2BITP2.6

        在這里,位地址P2.4和P2.6賦給P1和P2 ,此后,遇到P1,P2的地方,就相當于使用P2.4和P2.6。

        單片機指令的尋址方式

        立即尋址直接尋址寄存器尋址寄存器間接尋址變址尋址相對尋址和位尋址

        立即尋址相當于直接給出操作數,此時的操作數成為立即數。前面用“#”來標示

        十六進制結尾用H十進制結尾用D八進制結尾用O二進制結尾用B

        典型尋址

        MOVA ,#37H//把立即數37H這個數本身送到累加器A中,指令操作碼74H,操作數37H

        MOVDPTR,#1122H//其中1122H為16位立即數,該指令將立即數的高8位11H送入到DPH中,將低8位22H送入到DPL中,操作碼是90H,操作數是1122H。

        直接尋址就是將操作數存放的地址告訴指令單片機中可以直接尋址的兩類存儲空間,1片內RAM的低128個字節單元其地址00H~7FH.2特殊功能寄存器,其直接地址也可以用特殊功能寄存器的符號名稱表示,直接尋址是訪問特殊功能寄存器的唯一方式。

        例如

        MOVA,2EH

        這里,“2EH”就是直接尋址的地址,該指令的操作碼是E5H,功能是把內部RAM地址為2EH中的內容傳給累加器A。

        寄存器尋址就是告訴指令操作數所存放的寄存器,此時寄存器的內容就是操作數。由于寄存器存位于CPU內部,所以寄存器尋址速度比其他幾種方式快。

        MOVA,R1//就是將寄存器R1的數據傳送給累加器A

        寄存器間接尋址相當于繞了一個大彎,此時數據存放到RAM中,而該RAM的地址放在寄存器中,這樣通過訪問寄存器來獲得RAM中的操作數的尋址方式就是寄存器間接尋址。

        單片機可以利用此方式尋址的空間:

        1片內RAM的低128字節單元,此時需要R0,R1作為間接尋址的寄存器

        2片外RA M,如果用R0,R1作為間接尋址的寄存器,可以尋址256個單元。如果采用16位的DPTR作為間接尋址的寄存器,可以尋完整個外部RAM 64KB地址空間。

        在尋址指令中,尋址的寄存器錢需要加“@”標示符,這樣就和寄存器尋址區分開。

        變址尋址提供了16位地址的尋址能力,它采用基址寄存器加變址寄存器方式來尋址,其中基址寄存器為DPTR或者PC,變址寄存器為累加器A,用于存放地址偏移量。

        變址尋址的兩種形式;

        MOVA,@A+DPTR//功能是將累加器A的內容和數據指針DPTR的內容相加形成操作數的地址,即程序存儲器的16位地址。

        MOVA,@A+PC//功能是將累加器A的內容和PC的內容相加形成操作數的地址,即程序存儲器的16位地址。

        相對尋址是根據指定地址的偏移量,然后從當前PC值跳轉到偏移量所指向的地址的方式,這里的地址偏移量為帶符號的8位二進制數,其取值范圍是-128~+127,因此相對尋址可以尋址當前的PC的-128~+127之間的某段程序存儲器。

        例如SJMP33H//本指令占用兩個字節,因此PC指針的當前值為PC+2.地址偏移量是33H,則程序跳轉的地址為PC+2+33H.

        位尋址是特別為位操作區域提供的尋址方式,在指令中給出位地址即可。

        51單片機中,可以位尋址的區域;

        1片內RAM的20H~2FH單元,共16*8=128位,可以直接使用位地址來表示,例如,20H單元的0~7位的位地址是00H~07H,也可以使用RAM地址加序位號表示,例如2AH.1表示2AH單元的D1位。

        2可位尋址的特殊功能寄存器相應位,這些為均有特定的名稱,因此可以直接采用位名稱來表示,或者采用寄存器符號加位序號表示,例如PSW.3表示PSW寄存器中的D3位。

        典型表示;

        MOVC,2AH.5//把地址2AH中的第六位D5,即2AH.5的值(0或1)傳送到位累加器CY中。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 红桥区| 娱乐| 游戏| 嘉禾县| 丰城市| 武山县| 阿克陶县| 青岛市| 镇沅| 崇明县| 白玉县| 秦皇岛市| 托克托县| 郯城县| 济宁市| 福州市| 寻乌县| 交口县| 武清区| 九龙县| 苍梧县| 庐江县| 克拉玛依市| 尉犁县| 得荣县| 东台市| 瑞丽市| 石台县| 岫岩| 淮阳县| 贡嘎县| 阿尔山市| 疏勒县| 依兰县| 安阳县| 炎陵县| 石泉县| 绥化市| 凌源市| 桂东县| 鹰潭市|