周 霽
(中國電子科技集團公司第四十七研究所,沈陽 110032)
與工業MCS-51產品指令兼容的低功耗微處理器,廣泛應用于我們生活的各個領域,包括各種智能控制、辦公自動化,或是工業測控領域的各種機器人、智能儀表、實時控制和數據處理,各種醫療設備以及汽車安全保障系統等。在這些廣泛的嵌入式控制系統領域,提供了靈活有效、性價比極高的解決方案。
此類低功耗、高性能控制器芯片,具有在系統可編程(ISP)Flash存儲器,與工業MCS-51產品指令和引腳兼容。通常這類存儲器(比如ATMEL公司的AT89S52)片上Flash允許程序存儲器在系統可編程,亦適于常規編程器。在單芯片上,擁有全指令集的8位CPU和在系統可編程8K字節Flash,256字節RAM,32個I/O口,看門狗定時器,2個數據指針,三個16位定時器/計數器,一個7向量2級中斷結構,全雙工UART串行口,片內晶振及時鐘電路。另外,可支持0Hz~33MHz主頻時鐘操作,支持2種軟件可選節電模式。空閑模式下,CPU停止工作,允許RAM、定時器/計數器、串口、中斷繼續工作。掉電保護方式下,CPU停止工作,RAM內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。芯片架構框圖如圖1所示。
從圖中可以看出,此芯片的核心是C8052 CPU,通過ROM bus從flash中讀取指令并執行;并通過RAM_bus訪問256 bytes的內部RAM。從CPU中出來的SFR_bus可用來訪問特殊功能寄存器,通過這些寄存器來控制芯片外圍設備。中斷控制模塊將產生的中斷信號經過處理后,產生中斷,送給CPU,這將中斷CPU正在執行的指令,而跳轉到相應的中斷處理入口。
Watch-dog用于防止CPU執行指令時由于某種干擾而出現錯誤時,產生復位信號而使CPU復位重新執行。
Port控制模塊用來控制四個輸入/輸出端口的輸入和輸出。
Flash_control模塊用來控制內部flash的程序燒寫,加密等。
Power_ctrl模塊用來實現在不需要CPU工作時,能使整個芯片工作在最小的電流下,以節省功耗。同時它也允許外部事件來將CPU從低功耗模式切換到正常工作模式。

圖1 微處理器架構框圖
用戶在使用時,首先將編寫好的代碼下載到芯片內部的flash中。芯片上電后首先啟動CPU從內部的flash中讀取代碼,將代碼放入指令譯碼器中,CPU再根據指令做出相應的動作,比如操作端口、特殊寄存器、進入省電模式或進行控制、數據運算等。
使用模式方面的特點包括如下幾個方面,復位方面包括上電復位、外部引腳復位、WDT溢出復位;時鐘方面包括外部晶振、外部時鐘直接輸入;編程方面包括串行ISP編程、并行ISP編程;定時器方面包括有三個16bit的通用定時器;功耗方面分普通全速工作模式、省電空閑模式、低功耗睡眠模式;儲存方面有內部程序模式、外部程序模式。
程序存儲器與數據存儲器獨立分開,且有內部和外部存儲器之分。如果RESET后,EA引腳接地,程序讀取只從外部存儲器開始。如果EA接電源,程序讀寫先從內部存儲器開始,接著從外部尋址。芯片有256字節片內數據存儲器,高128字節與特殊功能寄存器重疊,高128字節與特殊功能寄存器有相同的地址,而物理上是分開的。當一條指令訪問高于7FH的地址時,尋址方式決定CPU訪問高128字節RAM還是特殊功能寄存器空間。直接尋址方式訪問特殊功能寄存器(SFR)。
例如,下面的直接尋址指令訪問0A0H(P2口)存儲單元
MOV 0A0H,#data
使用間接尋址方式訪問高128字節RAM。例如,下面的間接尋址方式中,R0內容為0A0H,訪問的是地址0A0H的寄存器。
MOV@R0,#data
在空閑工作模式下,CPU處于睡眠狀態,而片上外部設備保持激活狀態。這種狀態可以通過軟件產生。在這種狀態下,片上RAM和特殊功能寄存器的內容保持不變。空閑模式可以被任一個中斷或硬件復位終止。
在掉電模式下,晶振停止工作,激活掉電模式的指令是最后一條執行指令。片上RAM和特殊功能寄存器保持原值,直到掉電模式終止。掉電模式可以通過硬件復位和外部中斷進行退出。復位重新定義了SFR的數據,但不改變片上RAM的數據。
在掉電模式下喚醒時,會保證電流變化不能太大,且保證時鐘能有足夠時間穩定。故采用了分階段完成的辦法。如圖2所示。
進入掉電模式:當PCON寄存器寫入0x01時,進入掉電模式。分兩階段完成:關掉cpu clock,關掉外圍部件的clock,等待1024時鐘周期,關閉晶振,關掉 regulator。

圖2 低功耗模式狀態轉換圖
從掉電模式喚醒:當檢測到外部復位信號或外部中斷信號后,第一步,打開regulator,打開晶振,并開始計數,當計到100時,去檢查reset或外部中斷信號,看其是否有效。如果無效,則重新關掉晶振,關掉regulator。如果reset信號或外部中斷信號有效,則等待1024時鐘周期。第二步,打開外圍部件的clock等待1024時鐘周期。第三步,打開CPU的clock。
定時器2是一個16位定時/計數器,它既可以做定時器,又可以做事件計數器。其工作方式由特殊寄存器T2CON中的C/T2位選擇。定時器2有二種工作模式:捕捉方式,自動重載(向下或向上計數)。工作模式由T2CON中的相關位選擇。
在捕捉模式下,通過T2CON中的EXEN2來選擇兩種方式。如果EXEN2=0時,定時器2的一個16位定時/計數器溢出時,對T2CON的TF2標志置位,產生相應中斷。如果EXEN2=1時定時器2做相同的操作。
當DCEN=0時,定時器2為向上計數。當計到0xFFFF時,定時器溢出,定時器重新加載16位計數值。如果EXEN2=1,計數溢出或在外部T2EX引腳上的1到0的下跳變都會觸發重載。當DCEN=1時,外部輸入T2EX引腳將決定向上還是向下計數。T2EX=1為向上計數,T2EX=0為向下計數。說明如表1,表2示。

表1 T2CON控制寄存器
TF2:定時器2溢出標志位。
EXF2:定時器2外部標志位。EXEN2=1時,T2EX上的負跳變出現捕捉或重載時,EXF2會被硬件置位。
RCLK:串行口接收數據時鐘標志位。若RCLK=1,串行口將使用定時器2溢出脈沖作為串口接收時鐘;RCLK=0,將使用定時器1計數溢出作為串口接收時鐘。
TCLK:串行口發送數據時鐘標志位。若TCLK=1,串行口將使用定時器2溢出脈沖作為串行口工作模式1和3的串口發送時鐘;TCLK=0,將使用定時器1計數溢出作為串口發送時鐘。
EXEN2:定時器2外部允許標志位。
TR2:開始/停止控制定時器2。TR2=1,定時器2開始工作。
C/T2:定時器2定時/計數選擇標志位。
CP/RL2:捕捉/重載選擇標志位。當EXEN2=1時,CP/RL2=1,T2EX出現負脈沖,產生捕捉操作;當定時器2溢出或EXEN2=1時,T2EX出現負跳變,會出現自動重載操作。CP/RL2=0,T2EX產生負脈沖。當RCKL=1或TCKL=1時,此標志位無效,定時器2溢出時,強制做自動重載操作。
T2OE是定時器2輸出允許位。DCEN置1后,定時器2可配置成向上/向下計數。

表2 T2MOD模式控制寄存器
目前,這類微處理器產品仍有較為廣闊的市場,國外公司此類產品也較多,在設計這類產品時,重點注意對MCS-51產品指令的兼容,這樣可以使其更方便的在不同領域中做為配套產品使用,其成熟的設計經驗,也可以移植到相似的產品設計之中。在廣泛的嵌入式控制系統領域,產品可以提供靈活有效、性價比極高的解決方案。
[1]王永軍,李景華.數字邏輯與數字系統[M].北京:電子工業出版社,2005.
[2]朱子玉.李亞民.CPU芯片邏輯設計技術[M].北京:清華大學出版社,2005.
[3]張明.Verilog HDL實用教程[M].成都:電子科技大學出版社,1999.