51手記之C8051F

CIP-51共有111條指令。下表列出了指令條數與執行時(shí)所需的系統時(shí)鐘周期數的關(guān)系。

器件內部包含一個(gè)穩壓器(REG0)。當被使能時(shí),REG0輸出連到VDD引腳,并可為外部器件提供電源。REG0可以被軟件使能/禁止。
可在工業(yè)溫度范圍(-45℃到+85℃)內用2.7V-5.25V的電壓工作。電源電壓大于3.6V時(shí),必須使用內部穩壓器。
包含C2調試接口,支持FLASH編程和使用安裝在最終應用系統中的器件進(jìn)行在系統調試。1.基本特性
時(shí)鐘源:有1個(gè)可編程內部高頻振蕩器、1個(gè)可編程內部低頻振蕩器、1個(gè)外部振蕩器驅動(dòng)電路和1個(gè)4倍時(shí)鐘乘法器。
高速內部振蕩器在出廠(chǎng)時(shí)已經(jīng)被校準為12MHz±1.5%。時(shí)鐘恢復電路允許內部振蕩器與4倍時(shí)鐘乘法器配合,提供全速方式USB時(shí)鐘源。內部振蕩器還被用作低速方式下的USB時(shí)鐘源。器件內集成了外部振蕩器驅動(dòng)電路,允許使用晶體、陶瓷諧振器、電容、RC或外部CMOS時(shí)鐘源產(chǎn)生系統時(shí)鐘。
系統時(shí)鐘可以被配置為使用內部振蕩器、外部振蕩器或時(shí)鐘乘法器輸出二分頻。如果需要,可以在CPU運行時(shí)切換系統時(shí)鐘振蕩源。低頻內部振蕩器或外部振蕩器在低功耗系統中是非常有用的,它允許MCU從一個(gè)低頻率(節電)的時(shí)鐘源運行,當需要時(shí)再周期性地切換到高速時(shí)鐘源。

外部晶體使用步驟:a.使能外部振蕩器;b.等待至少1ms;c.查詢(xún)XTLVLD =>‘1’;d.將系統時(shí)鐘切換到外部振蕩器。
4倍時(shí)鐘乘法器配置:a.通過(guò)向寄存器CLKMUL寫(xiě)0x00來(lái)復位時(shí)鐘乘法器;b.用MULSEL位選擇時(shí)鐘乘法器的輸入;c.用MULEN位使能時(shí)鐘乘法器(CLKMUL | = 0x80);d.延時(shí)大于5 μs;e.用MULINIT位初始化時(shí)鐘乘法器(CLKMUL | = 0xC0);f.查詢(xún)等待MULRDY =>‘1’。
當使用外部振蕩器作為4倍時(shí)鐘乘法器的輸入時(shí),外部振蕩源必須在乘法器初始化之前被使能并穩定運行。
有9個(gè)復位源:上電復位電路(POR)、片內VDD監視器(當電源電壓低于VRST時(shí)強制復位)、USB控制器(USB總線(xiàn)復位或VBUS狀態(tài)變化)、看門(mén)狗定時(shí)器、時(shí)鐘丟失檢測器、由比較器0提供的電壓檢測器、軟件強制復位、外部復位輸入引腳和FLASH讀/寫(xiě)錯誤保護電路復位。除了POR、復位輸入引腳及FLASH操作錯誤這三個(gè)復位源之外,其他復位源都可以被軟件禁止。在一次上電復位之后的MCU初始化期間,WDT可以被永久性使能。
2.存儲器
1)程序存儲器
內部有可再編程的FLASH存儲器,用于程序代碼和非易失性數據存儲??梢酝ㄟ^(guò)C2接口或由軟件使用MOVX指令對FLASH存儲器進(jìn)行在系統編程,每次一個(gè)字節??稍谙到y編程,扇區大小為512字節。
64KB的片內FLASH存儲器可用作程序存儲器或可編程數據存儲器,實(shí)際使用過(guò)程中需注意,程序默認從低地址開(kāi)始存放,如需使用該空間存放數據,需避開(kāi)程序代碼區。只有未鎖定的FLASH頁(yè)可使用。

2)數據存儲器
片上256字節RAM+4KB的XRAM,1KB的USB FIFO也可以被映射到外部數據存儲器空間,作為通用數據存儲器使用。有用于訪(fǎng)問(wèn)片外存儲器和存儲器映射器件的外部存儲器接口EMIF。
有40/25個(gè)I/O口,均耐5V電壓,大灌電流。每個(gè)端口引腳都可以被配置為模擬輸入或數字I/O引腳,被選擇為數字I/O的引腳還可以被配置為推挽或漏極開(kāi)路輸出。
數字交叉開(kāi)關(guān)允許將內部數字系統資源映射到端口I/O引腳,交叉開(kāi)關(guān)根據優(yōu)先權譯碼表為所選擇的內部數字資源分配I/O引腳。寄存器XBR0、XBR1和XBR2用于選擇內部數字功能。。PnSKIP寄存器允許軟件跳過(guò)那些被用作模擬輸入、特定功能或GPIO的引腳。


a.用端口輸入方式寄存器(PnMDIN)選擇所有端口引腳的輸入方式(模擬或數字)。
b.用端口輸出方式寄存器(PnMDOUT)選擇所有端口引腳的輸出方式(漏極開(kāi)路或推挽)。
c.用端口跳過(guò)寄存器(PnSKIP)選擇應被交叉開(kāi)關(guān)跳過(guò)的那些引腳。
d.將引腳分配給要使用的外設(XBR0、XBR1、XBR2)。
e.使能交叉開(kāi)關(guān)(XBARE = 1)。
所有端口引腳都必須被配置為模擬或數字輸入。被用作比較器或ADC輸入的任何引腳都應被配置為模擬輸入。為使端口P0、P1、P2和P3工作在標準端口I/O輸出方式,交叉開(kāi)關(guān)必須被使能。當交叉開(kāi)關(guān)被禁止時(shí),端口輸出驅動(dòng)器被禁止。端口4總是作為標準GPIO使用。
所有端口引腳都必須被配置為模擬或數字輸入。被用作比較器或ADC輸入的任何引腳都應被配置為模擬輸入。為使端口P0、P1、P2和P3工作在標準端口I/O輸出方式,交叉開(kāi)關(guān)必須被使能。當交叉開(kāi)關(guān)被禁止時(shí),端口輸出驅動(dòng)器被禁止。端口4總是作為標準GPIO使用。
未被交叉開(kāi)關(guān)分配的端口引腳和未被模擬外設使用的端口引腳都可以作為通用I/O。通過(guò)對應的端口數據寄存器訪(fǎng)問(wèn)端口P3-0,這些寄存器既可以按位尋址也可以按字節尋址。端口P4(僅C8051F340/1/4/5)使用的SFR只能按字節尋址。
4.中斷系統
4.中斷系統
支持16個(gè)中斷源,每個(gè)中斷源有兩個(gè)優(yōu)先級。中斷源在片內外設與外部輸入引腳之間的分配隨器件的不同而變化。

兩個(gè)外部中斷源/INT0和/INT1可被配置為低電平有效或高電平有效,邊沿觸發(fā)或電平觸發(fā)。IT01CF寄存器中的IN0PL(/INT0極性)和IN1PL(/INT1極性)位用于選擇高電平有效還是低電平有效;TCON中的IT0和IT1用于選擇電平或邊沿觸發(fā)。
在FLASH寫(xiě)/擦除操作期間和USB FIFO MOVX訪(fǎng)問(wèn)期間,CPU暫停執行指令。對于在CPU暫停執行指令期間發(fā)生的中斷,中斷服務(wù)響應時(shí)間將延長(cháng)。
5.定時(shí)器
內部有4個(gè)16位計數器/定時(shí)器:其中兩個(gè)與標準8051中的計數器/定時(shí)器兼容,另外兩個(gè)是16位自動(dòng)重裝載定時(shí)器,可用于A(yíng)DC、SMBus、USB(幀測量)、低頻振蕩器(周期測量)或作為通用定時(shí)器使用。這些定時(shí)器可以用于測量時(shí)間間隔,對外部事件計數或產(chǎn)生周期性的中斷請求。

定時(shí)器0和定時(shí)器1有5個(gè)可選擇的時(shí)鐘源,定時(shí)器2和定時(shí)器3可以使用系統時(shí)鐘、系統時(shí)鐘/12或外部振蕩器時(shí)鐘/8作為時(shí)鐘源。
定時(shí)器2,3可以工作在16位自動(dòng)重裝載方式、8位自動(dòng)重裝載方式(兩個(gè)8位定時(shí)器)、USB幀起始(SOF)捕捉方式或低頻振蕩器(LFO)下降沿捕捉方式。當T2SPLIT =‘0’且T2SOF =‘0’時(shí),定時(shí)器2工作在自動(dòng)重裝載的16位定時(shí)器方式:

當T2SPLIT =‘1’且T2SOF =‘0’時(shí),定時(shí)器2工作雙8位定時(shí)器方式。兩個(gè)8位定時(shí)器TMR2H和TMR2L都工作在自動(dòng)重裝載方式。TMR2RLL保持TMR2L的重載值,而TMR2RLH保持TMR2H的重載值。TMR2CN中的TR2是TMR2H的運行控制位。當定時(shí)器2被配置為8位方式時(shí),TMR2L總是處于運行狀態(tài)。

TF2H和TF2L標志不能被硬件自動(dòng)清除,必須通過(guò)軟件清除。
當T2CE =‘1’時(shí),定時(shí)器2工作在兩種特殊捕捉方式之一。捕捉事件可以是USB幀起始(SOF)捕捉或低頻振蕩器(LFO)下降沿捕捉,用T2CSS位選擇。


6.串行口
2個(gè)全雙工串行口,UART0有2種工作方式:提供標準8051串行口的方式1和方式3。
UART0具有增強的波特率發(fā)生器電路,有多個(gè)時(shí)鐘源可用于產(chǎn)生標準波特率,接收數據緩沖機制允許UART0在軟件尚未讀取前一個(gè)數據字節的情況下開(kāi)始接收第二個(gè)輸入數據字節。UART0波特率由定時(shí)器1工作在8位自動(dòng)重裝載方式產(chǎn)生。發(fā)送(TX)時(shí)鐘由TL1產(chǎn)生;接收(RX)時(shí)鐘由TL1的拷貝寄存器(RX定時(shí)器)產(chǎn)生,TX和RX定時(shí)器的溢出信號經(jīng)過(guò)二分頻后用于產(chǎn)生TX和RX波特率。定時(shí)器1的時(shí)鐘可以在6個(gè)時(shí)鐘源中選擇:SYSCLK、SYSCLK/4、SYSCLK/12、SYSCLK/48、外部振蕩器時(shí)鐘/8和外部輸入T1。
UART0的波特率=T1clk/(256-T1H)/2
多機通訊:所有從機的RX和TX分別并接到主機的TX和RX上,從機的MCE0位(SCON.5)被置‘1’,只有當UART接收到的第九位為邏輯‘1’ (RB80=1)并收到有效的停止位后UART才會(huì )產(chǎn)生中斷。當主機要發(fā)送數據給一個(gè)或多個(gè)從機時(shí),它先發(fā)送一個(gè)用于選擇目標的地址字節(地址字節所有從機都接收,對應地址的從機收到該地址后,清MCE0,以便能接收數據)。地址字節與數據字節的區別是:地址字節的第9位為邏輯‘1’;數據字節的第9位總是設置為邏輯‘0’。
UART1包含一個(gè)由16位定時(shí)器和可編程預分頻器構成的專(zhuān)用波特率發(fā)生器,能產(chǎn)生很寬范圍的波特率。UART1數據傳輸以起始位(邏輯低電平)開(kāi)始,其后是數據位(LSB在先),數據位之后是奇偶位或額外位(如果選擇),最后是一個(gè)或兩個(gè)停止位(邏輯高電平)。數據長(cháng)度在5 ~ 8位之間。UART1的工作方式設置與標準51不同。多機通訊時(shí),額外位與UART0的第9位功能類(lèi)似。
UART1的波特率=Fosc/(65536-(SBRLH1:SBRLL1))/2/預分頻值

7.增強型串行外設接口SPI0
增強型串行外設接口(SPI0)提供訪(fǎng)問(wèn)一個(gè)全雙工同步串行總線(xiàn)的能力。SPI0可以作為主器件或從器件工作,可以使用3線(xiàn)或4線(xiàn)方式,并可在同一總線(xiàn)上支持多個(gè)主器件和從器件。
8.SMBus
SMBus I/O接口是一個(gè)雙線(xiàn)的雙向串行總線(xiàn)。與I2C串行總線(xiàn)兼容。在作為主或從器件時(shí),數據傳輸的最大速率可達系統時(shí)鐘頻率的十分之一(這可能比SMBus的規定速度要快,取決于所使用的系統時(shí)鐘)??梢圆捎醚娱L(cháng)低電平時(shí)間的方法協(xié)調同一總線(xiàn)上不同速度的器件。。SMBus提供了SDA(串行數據)控制、SCL(串行時(shí)鐘)產(chǎn)生和同步、仲裁邏輯以及起始/停止的控制和產(chǎn)生電路。
SCL(串行時(shí)鐘)和SDA(串行數據)線(xiàn)是雙向的,必須通過(guò)一個(gè)上拉電阻或等效電路將它們連到電源電壓。連接在總線(xiàn)上的每個(gè)器件的SCL和SDA都必須是漏極開(kāi)路或集電極開(kāi)路的,因此當總線(xiàn)空閑時(shí),這兩條線(xiàn)都被拉到高電平??偩€(xiàn)上的最大器件數只受規定的上升和下降時(shí)間的限制,上升和下降時(shí)間分別不能超過(guò)300ns和1000ns。
所有的數據傳輸都由主器件啟動(dòng),可以尋址一個(gè)或多個(gè)目標從器件。主器件產(chǎn)生一個(gè)起始條件,然后發(fā)送地址和方向位。
一個(gè)主器件只能在總線(xiàn)空閑時(shí)啟動(dòng)一次傳輸。在一個(gè)停止條件之后或SCL和SDA保持高電平已經(jīng)超過(guò)了指定時(shí)間,則總線(xiàn)是空閑的。兩個(gè)或多個(gè)主器件可能在同一時(shí)刻啟動(dòng)數據傳輸,所以使用仲裁機制迫使一個(gè)主器件放棄總線(xiàn)。試圖發(fā)送高電平的主器件將檢測到SDA上的低電平而退出競爭。贏(yíng)得總線(xiàn)的器件繼續其數據傳輸過(guò)程,而未贏(yíng)得總線(xiàn)的器件成為從器件并在后續的傳輸中接收數據(如果被尋址)。
每次數據字節或從地址傳輸都產(chǎn)生SMBus中斷。發(fā)送數據時(shí)在A(yíng)CK周期后產(chǎn)生中斷,使軟件能讀取接收到的ACK值;接收數據時(shí)在A(yíng)CK周期之前產(chǎn)生中斷,使軟件能確定要發(fā)出的ACK值。
SMBus接口可以被配置為工作在主方式和/或從方式。在任一時(shí)刻,它將工作在下述4種方式之一:主發(fā)送器、主接收器、從發(fā)送器或從接收器。
9.可編程計數器陣列(PCA0)
提供增強的定時(shí)器功能,與標準8051的計數器/定時(shí)器相比,它需要較少的CPU干預。PCA由一個(gè)專(zhuān)用的16位計數器/定時(shí)器和5個(gè)16位捕捉/比較模塊組成。每個(gè)捕捉/比較模塊有其自己的I/O線(xiàn)(CEXn),這些I/O線(xiàn)在被允許時(shí)通過(guò)交叉開(kāi)關(guān)連到端口I/O。
定時(shí)器的時(shí)基信號可以在六個(gè)時(shí)鐘源中選擇:系統時(shí)鐘、系統時(shí)鐘/4、系統時(shí)鐘/12、外部振蕩器時(shí)鐘/8、定時(shí)器0溢出或ECI輸入引腳上的外部時(shí)鐘信號。
PCA的模塊4可被用作看門(mén)狗定時(shí)器(WDT),在系統復位后即被使能為該方式。在看門(mén)狗方式被使能時(shí),對某些寄存器的訪(fǎng)問(wèn)受到限制

1)PCA計數器/定時(shí)器
16位的PCA計數器/定時(shí)器由兩個(gè)8位的SFR組成:PCA0L和PCA0H。在讀PCA0L時(shí),“瞬象寄存器”自動(dòng)鎖存PCA0H的值,隨后讀PCA0H時(shí)將訪(fǎng)問(wèn)這個(gè)“瞬象寄存器”;先讀PCA0L寄存器可以保證正確讀取整個(gè)16位PCA計數器的值。
當計數器/定時(shí)器溢出時(shí)(從0xFFFF到0x0000),PCA0MD中的計數器溢出標志(CF)被置為邏輯‘1’并產(chǎn)生一個(gè)中斷請求
2)捕捉/比較模塊
每個(gè)模塊都可被配置為獨立工作,有六種工作方式:邊沿觸發(fā)捕捉、軟件定時(shí)器、高速輸出、頻率輸出、8位脈寬調制器和16位脈寬調制器。

a.邊沿觸發(fā)的捕捉方式
CEXn輸入信號必須在高電平或低電平期間至少保持兩個(gè)系統時(shí)鐘周期,以保證能夠被硬件識別。

b.軟件定時(shí)器方式
在該方式,PCA將計數器/定時(shí)器的計數值與模塊的16位捕捉/比較寄存器(PCA0CPHn和PCA0CPLn)進(jìn)行比較。當發(fā)生匹配時(shí),PCA0CN中的捕捉/比較標志(CCFn)被置為邏輯‘1’并產(chǎn)生一個(gè)中斷請求;當向PCA0的捕捉/比較寄存器寫(xiě)入一個(gè)16位數值時(shí),應先寫(xiě)低字節。

c.高速輸出方式
每當PCA計數器與模塊的16位捕捉/比較寄存器(PCA0CPHn和PCA0CPLn)發(fā)生匹配時(shí),模塊的CEXn引腳上的邏輯電平將發(fā)生變化。當向PCA0的捕捉/比較寄存器寫(xiě)入一個(gè)16位數值時(shí),應先寫(xiě)低字節。

d.頻率輸出方式
可在模塊的CEXn引腳產(chǎn)生可編程頻率的方波。。捕捉/比較模塊的低字節與PCA0計數器的低字節比較;兩者匹配時(shí),CEXn的電平發(fā)生改變, 方波頻率=Fpca/(2*PCA0CPHn),PCA0CPHn中的值為0x00時(shí),相當于256。

e.8位脈寬調制器方式
PWM輸出的頻率取決于PCA計數器/定時(shí)器的時(shí)基。使用模塊的捕捉/比較寄存器PCA0CPLn改變PWM輸出信號的占空比。當PCA計數器/定時(shí)器的低字節(PCA0L)與PCA0CPLn中的值相等時(shí),CEXn引腳上的輸出被置‘1’;當PCA0L中的計數值溢出時(shí),CEXn輸出被復位
占空比=(256-PCA0CPHn)/256

f.16位脈寬調制器方式
當PCA計數器與模塊的值匹配時(shí),CEXn的輸出被置為高電平;當計數器溢出時(shí),CEXn輸出被置為低電平。為了輸出一個(gè)占空比可變的波形,新值的寫(xiě)入應與PCA的CCFn匹配中斷同步。
占空比=(65536-PCA0CPn)/65536

3)看門(mén)狗定時(shí)器
通過(guò)PCA的模塊4可以實(shí)現可編程看門(mén)狗定時(shí)器(WDT)功能。模塊4高字節與PCA計數器的高字節比較;模塊4低字節保持執行WDT更新時(shí)要使用的偏移值。在系統復位后看門(mén)狗被使能。在看門(mén)狗被使能時(shí),對某些PCA寄存器的寫(xiě)操作受到限制。
如果在WDT被使能時(shí)PCA0CPH4和PCA0H發(fā)生匹配,則系統將被復位。為了防止WDT復位,需要通過(guò)寫(xiě)PCA0CPH4來(lái)更新WDT。在寫(xiě)PCA0CPH4時(shí),PCA0H的值加上PCA0CPL4中保存的偏移值后被裝入到PCA0CPH4. 當WDT被使能時(shí):
a.PCA計數器被強制運行。
a.PCA計數器被強制運行。
b.不允許寫(xiě)PCA0L和PCA0H。
c.PCA時(shí)鐘源選擇位(CPS2-CPS0)被凍結。
d.PCA等待控制位(CIDL)被凍結。
e.模塊4被強制進(jìn)入看門(mén)狗定時(shí)器方式。
f.對模塊4方式寄存器(PCA0CPM4)的寫(xiě)操作被禁止。
看門(mén)狗定時(shí)器偏移值(PCA時(shí)鐘數)=(256*PCA0CPL4)+(256-PCA0L)
配置WDT的步驟如下:
a.通過(guò)向WDTE位寫(xiě)‘0’來(lái)禁止WDT。
b.選擇PCA時(shí)鐘源(用CPS2-0位)。
c.向PCA0CPL4裝入所希望的WDT更新偏移值。
d.配置PCA的空閑方式位(如果希望在CPU處于空閑方式時(shí)WDT停止工作,則應將CIDL位置‘1’)。
e.通過(guò)向WDTE位寫(xiě)‘1’來(lái)使能WDT。
f.(選項)通過(guò)將WDLCK位置‘1’來(lái)鎖定WDT(防止在下一次系統復位前禁止WDT)。
WDT在任何一次系統復位之后都被設置為使能狀態(tài)。PCA0計數器的缺省時(shí)鐘為系統時(shí)鐘的十二分頻(SYSCLK/12)。當WDTE位被置1時(shí),不能改變PCA0MD寄存器的值。若要改變PCA0MD的內容,必須先禁止看門(mén)狗定時(shí)器。
評論