中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機一些基礎問題

        單片機一些基礎問題

        作者: 時間:2013-05-16 來源:網絡 收藏

        8051 系列的一些如8052 有附加的128 字節(jié)的內部RAM 位于從80H 開始的地址空間中被稱為IDATA 因為IDATA 區(qū)的地址和SFRs (特殊功能寄存器)的地址是重疊的通過區(qū)分所訪問的存儲區(qū)來解決地址重疊問題因為IDATA 區(qū)只能通過間接尋址來訪問。8051 的最后一個存儲空間為64K 和CODE 區(qū)一樣采用16 位地址尋址稱作外部數據區(qū)簡稱XDATA 區(qū)這個區(qū)通常包括一些RAM 如SRAM 或一些需要通過總線接口的外圍器件。

        8051 可對存儲區(qū)直接或間接尋址這些是典型的尋址方式直接尋址是在指令中直接

        包含所須尋址的字節(jié)地址直接尋址只能在DATA 區(qū)和SFR 中進行。

        SBUF 串行緩沖區(qū) DPTR 數據指針 MOVX 讀入或寫入外部寄存器的數據

        fosc (frequency oscillate)晶振頻率

        指針寄存器而不是直接使用地址

        中斷系統(tǒng)

        基本的8051 支持6 個中斷源兩個外部中斷兩個定時/計數器中斷一個串行口輸

        入/輸出中斷中斷發(fā)生后處理器轉到將五個中斷入口處之一執(zhí)行中斷處理程序中斷向

        量位于代碼段的最低地址出串行口輸入輸出中斷共用一個中斷向量

        reg51.h 詳細說明

        是c51(用于開發(fā)的一種c語言)的頭文件。類似于頭文件AT89X52.h。這兩個頭文件基本是一樣的,只是在使用時對位的定義不一樣,at89x52.h文件中對P1.1的操作是寫成P1_1;reg52.h文件中的操作則寫成P1^1。表示方法不一樣而已。另外前者是特指ATMEL公司的52系列,后者指所有52系列的單片機。

        LED3.C(8): error C141: syntax error near '='

        在c51單片機里面不可以用#define LED1 P0^1

        正確的使用sbit LED1=P0^1;

        還有keil編譯器不支持像P0^1=0;或P0^1=1;這樣的賦值

        本征庫(intrinsic routines)和非本征證庫

        C51提供的本征是指編譯時直接將固定的代碼插入當前行,而不是用ACALL和LCALL語句來實現,這樣就大大提供了函數訪問的效率,而非本征函數則必須由ACALL及LCALL調用。

        C51的本征庫函數只有9個,數目雖少,但都非常有用,列如下:

        _crol_(_cror_):將char型變量循環(huán)向左(右)移動指定位數后返回

        _iror_(_irol_):將int型變量循環(huán)向左(右)移動指定位數后返回

        _lrol_(_lror_):將long型變量循環(huán)向左(右)移動指定位數后返回

        _nop_: 相當于插入NOP “空指令”,在x86的CPU中機器碼為0x90(144)。

        _testbit_: 相當于JBC bitvar測試該位變量并跳轉同時清除。

        _chkfloat_: 測試并返回源點數狀態(tài)。

        使用時,必須包含#inclucle 一行。

        如不說明,下面談到的庫函數均指非本征庫函數。

        TMOD:定時器/計數器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER)

        定時器/計數器模式控制寄存器TMOD是一個逐位定義的8位寄存器,但只能使用字節(jié)尋址,其字節(jié)地址為89H。

        其格式為:

        工作原理

        其中低四位(即D0 ~ D3)定義定時器/計數器T0,高四位(即D4 ~ D7)定義定時器/計數器T1。各位的說明:

        Ⅰ,GATE——門控制。

        ●GATE=1時,由外部中斷引腳INT0、INT1來啟動定時器T0、T1。

        當INT0引腳為高電平時TR0置位,啟動定時器T0;

        當INT1引腳為高電平時TR1置位,啟動定時器T1。

        ●GATE=0時,僅由TR0,TR1置位分別啟動定時器T0、T1。

        Ⅱ,C/T——功能選擇位

        C/T=0時為定時功能,C/T=1時為計數功能。

        置位時選擇計數功能,清零時選擇定時功能。

        Ⅲ,M0、M1——方式選擇功能

        由于有2位,因此有4種工作方式:

        M1M0工作方式功能說明

        00方式013位定時器/計數器

        01方式116位定時器/計數器

        10方式2自動重裝8位定時器/計數器

        11方式3T0分為2個8位獨立計數器,T1停止計數

        TR0,TR1:分別為T0,T1的運行控制位。1啟動,0停止。

        GATE:門控制位。GATE=0,由TR0或TR1啟動定時器;GATE=1,只有TR0或TR1為1且INT0 或INT1 為高電平時才能啟動定時器。

        單片機中的TH0 TL0

        TH0和TL0是控制定時/計數器T0的,TH1和TL1是針對T1的。也就是用TH0和TL0中的數來控制T0到底定時多久或計數多少再進入中斷,TH1和TL1也一樣。

        16位定時器/計數器的高低位,TL0是低八位,TH0=是高八位,當低八位計數記滿了之后,向高八位進一位,計數器,由于51單片機是8位機,所以要分成兩個八位的寄存器來存儲16位的計數器!

        單片機 TH0=0xd8;TL0=0xf0是什么意思

        這是為 T0 計數器賦初值,(高位)TH0=0xd8(0xffd8,初始地址為0xffff),(低位)TL0=0xf0(0xfff0)

        換成 10 進制是:55536

        那么 65536-55536=10000

        表明 T0 計數器 計數 10000 個機器周期后溢出。

        如果使用 12M 晶振,那么計數 10000 個機器周期使用 10ms,可以作為定時用。

        由于TH0和TL0已知,那么可得T0寄存器中為:0xFF00(16)=65280(10)

        X=65536-T0=65536-65280=256,,X即為定時機器周期數

        如果是12MHz的話,機器周期=1us,那么定時為256us

        如果是6MHz的話,機器周期=2us,那么定時時間為512us

        機器周期=12*晶振周期,晶振周期=1/晶振頻率

        指令周期是看一條指令包含有多少個機器周期,如_nop_就一個機器周期

        延時函數delay()

        c語言里不是那么算的,編譯的時候轉匯編了用匯編才算的出,不用糾結這個的精確延時的話也都用定時器,大致的延時的話用軟件去算就行了

        void delay_ms(unsigned int x)

        {

        unsigned int i,j;

        for(i=0;i

        for(j=0;j125;j++);

        }

        AJMP

        是無條件跳轉指令之一,叫做絕對跳轉。 主要是用來改變程序執(zhí)行的路線,到需要的指令或程序去執(zhí)行。 AJMP的范圍為正負2K單元。使用時注意跳的目的地和當前地址的距離范圍不能超過上述值,否則,就會跳過不去。

        $

        $代表它自己所在位置的地址

        中斷允許寄存器IE



        評論


        相關推薦

        技術專區(qū)

        關閉