第6章 .P89C669的連接埠,電源控制和外圍裝置
注意: 特殊寄存器訪問有一定的限制
1. 如果沒有定義是不能被訪問的
2. 必須嚴格按照特殊寄存器的功能來進行設定訪問該寄存器
3. 特殊寄存器標誌位必須按照如下規則進行讀寫
‘-’必須寫0
‘0’寫入0讀出返回0
‘1’寫入1讀出返回1
4.
6.2 P89C669連接埠
6.2.1 連接埠 1 2 3 4
這些連接埠就象傳統的80C51裝置連接埠一樣,他們有相同設定位地址在特殊寄存器地址空間
中分別為: 80H 90H A0H B0H
查看連接埠輸出是邏輯的並且連接埠特殊寄存器和微控制器使用這個連接埠,為了讓外圍裝置
完全控制專一的管腳,對應的特殊寄存器位要置為1,如果這些特殊寄存器位為0,那麼
外圍裝置無法使用這些管腳來進行輸出,因為寄存器的位始終為0。
6.2.2 連接埠4
P89C669拓展了一個連接埠4,這個連接埠對於一般的輸出輸出無效,他用來作用UART1使用P4
.0 (RXD1)和 P4 .1(TXD1),兩個都有內建的上拉電阻。
6.3低功耗模式
6.3.1時鐘關閉模式
這種靜態設計可以時鐘加速減少到0HZ,當震蕩器停止工作,RAM和SFR保持原來的值,這
種模式利用和允許降低始終頻率來減少系統功耗,是最低功耗掉電模式預設推薦使用的
。
6.3.2空閑模式
在空閑模式(表11) cpu保持睡眠狀態不工作但是保持片內的裝置都是啟用的,在空閑模
式被啟用在執行正常操作模式的最後一條指令後,CPU 片內RAM 和SFR都保持正確狀態在
空閑期內,空閑模式設定由PCON寄存器中IDL位。
有兩種方法來結束空閑模式 ,任何插斷要求導致IDL位被清除,空閑模式被結束。中斷
服務,然後跳出中斷,這個指令結束後緊跟著執行設定硬體空閑模式指令。
硬體的重新複位是結束空閑模式的第二種方式,繼續按照同樣的方式進行處理在重新啟
動後,重啟後IDL位被預設標誌為0,在真正複位和重設運算控制之前,將會執行一些指
令在空閑模式被設定後,也就是程式正常恢複執行,在這期間擷取片內RAM是有限制的,
但是擷取連接埠管腳沒有限制的,推薦使用增加2個NOP指令在設定空間模式指令之後,為
了消除一些出乎意料的連接埠輸出內容,緊跟著調用空閑模式的指令是不會被寫到一個端
口管腳或是外部儲存空間中的。
6.3.3掉電模式
為了節省更多的能源,一種掉電方式可以由軟體來調用設定(表11) ,在這個模式下,震
蕩器停止工作,調用掉電方式指令是最後一個指令,這種模式關閉震蕩器是為了達到最
小的功耗,掉電模式由 PCON寄存器中PD位設定。
MODE Program Memory ALE PSEN PORT 0 PORT 1 PORT 2 PORT 3
Idle Internal 1 1 Data Data Data Data
Idle External 1 1 Float Data Address Data
Power Down Internal 0 0 Data Data Data Data
Power Down External 0 0 Float Data Data Data
表11
6.3.4 上電標誌
上電標誌是由片內電路設定當Vdd和P89C69MX2同樣升至0V,上電標誌允使用者使用決定是
否在停電後是上點複位還是暖開機。POF位只能由軟體來清除。
6.4定時/計數器 0和1
兩個16位定時/計數寄存器:Timer0 Timer1可以被設定為作為定時或者事件計數器功能
(Figure27),寄存器每個機器周期都會自增,所以我們認為他可以記錄機器周期數,
因為一個機器周期由6個震蕩周期組成,記錄倍率是1/6震蕩分頻。
在記數功能下,寄存器將自增來響應由1到0的跳變在對應的外部輸入引腳,T0或T1在每
個機器周期都是外部引腳輸入固定的訊號採樣
一個計數改變需要兩個機器周期,如前一個機器周期是顯示採樣為正下個周期顯示採樣
為負,則判斷其為下降沿,觸發計數器記數一次,對於外部輸入訊號沒有任何限制,但
是會確定一個標準樣本在它改變之前,它會儲存一個完整的機器周期,除了定時和計數
器外選擇外,定時器還有4種工作方式。
6.4.1 模式0
將時鐘中斷設定為0模式看起來更像8048的時鐘中斷,一個8位計數器用32作為因子來除
,圖29來顯示定時模式操作
在這個模式下,時鐘寄存器被配置成13位的寄存器,當記數從1轉為0時,定時標誌位TFn
會被設定,記數輸入啟用定時器當TRn = 1並且 GATE = 0或者INTn = 1.(設定GATE = 1
是允許外部輸入引腳INTn控制定時器,更容易測量脈衝寬度),TRn受特殊寄存器TCON控
製圖28,GATE受TMOD寄存器控制。
13位寄存器由8位THn和TLn的低5位組成,TLn的其他三位是不確定並且應該被忽略。設定
執行標誌TRn不會清除這些寄存器的。
模式0對於定時0和定時1都是一樣的圖29,只有兩個不同的GATE位,TIME0(TMOD.3)TIM
ER1(TMOD.7)
6.4.2模式1
模式1和模式0基本上是一樣的,除了時鐘寄存器變為16位(TLn8位)+TRn圖30
6.4.3模式2
模式2將時鐘寄存器自動設定成8位TLn,31,TLn中的溢出不僅僅影響到TFn中的內容
,也會重設TLn中內容為THn的內容表示,這個必須事先由軟體進行調整。這個重新設定
不會改變THn的內容。模式2對於Timer0 Time1都是一樣的。見圖31
圖31
6.4.4模式3
當TIMER1設定為模式3那麼將會被關閉(保持記數功能),設定TR1=0設定定時無效達到
同樣的效果。
Timer0設定為模式3時,那麼TL0和TH0是兩個單獨的8位記數寄存器,模式3邏輯控制和TI
MER0設定32,TL0使用TIMER0的控制位:T0C/T,T0GATE,TF0,TH0是由於附屬電路
缺乏只能作為8位的定時器,而且還借用了T1的啟動,停止開關TR1和溢出標誌TF1,因為
T1兩個重要組件被借用所以T1無法構成該模式
6.5TIMER2
TIMER2是16位的定時/記數器可以被用來做為事件定時器或者記數器,可以由特殊寄存器
T2CON中的C/T2可以進行選擇。TIMER2有四種工作方式: 捕獲,自動重設(增加或減少記
數), 時鐘溢出,普通傳輸速率。工作方式的選擇通過T2CON和 T2 MOD控制。33和34
RCLK+TCLK CP/RL2 TR2 T2OE MODE
0 0 1 0 16-BIT auto reload
0 1 1 0 16-bit capture
0 0 1 1 Programmable Clock-Out
1 X 1 0 Baud rate generator for UART 0
X X 0 X off
表12
6.5.1捕獲模式
在捕獲模式中可以有兩個選擇通過控制T2CON中的EXEN2位 ,如果EXEN2位為0TIMER就是
一個16位的計數器或者定時器,溢出位是TF2。這個位可以產生一個中斷通過啟用TIMER2
的寄存器IEN0中的中斷位,如果EXEN2= 1的話,TIMER2工作就像,但是增加特徵如
外部引腳T2EX輸入訊號由1->0時,會引起當前T2寄存器捕獲模式,TL2 TH2將會被捕獲到
RCAP2L RCAP2H中。
圖三十五
另外,T2EX引腳的輸入跳變會引起 T2CON中的EXF2位被設定,EXF2和TF2一樣會產生一
個中斷(和溢出中斷向量設定是相同的),Timer2的中斷服務路遊會審核到底是EXF2還
是TF2申請中斷服務。
這裡沒有重新裝載TL2和TH2,當由EX2T產生捕獲事件後,計數器保持T2引腳記數或者f(o
sc)/6脈衝,既然一旦設定那麼RCAP2L RACP2H的內容將不受保護,一旦TIMER2插斷要求
,那麼必須先於一個新的EX2T引腳產生捕獲事件,否則,下次的T2EX引腳的下降沿會取
消重設當前TL2和TH2到RCAP2L和RCAP2H寄存器中,結果會破壞先前中斷報告相關的內容
。
捕獲模式可以看36
6.5.2自動重設模式
在16位的的自動重設模式中,TIMER2被設定為 定時器或者計數器通過T2CON中的C/T2,
然後決定程式記數增加還是減少,如何記數將由寄存器T2MOD中的DECN(向下記數有效)
位設定來決定。當複位時,DECN = 0,TIMER2預設記數為向上增長方式,如果DCEN位被
設定那麼記數方式將由T2EX引腳的值來決定。
圖36展示TIMER2自動向上記錄(DECN=0)
這個模式下,有兩種選擇方式通過設定T2CON寄存器中EXEN2位,如果EXEN2=0那麼計數器
向上記數到FFFFH將會產生溢出,自動化佈建TF2位,然後產生讓TIMER2將RCAP2L和RCAP2H
中的內容裝載進TL2和TH2中,RCAP2L和RCAP2H的內容由軟體預先設定,自動裝載的頻率
可以由這個公式計算:
SupplyFrequent /(65535-(RCAP2H,RCAP2L) )
SupplyFrequent要麼是f(osc) = 0 (C/T2 = 0)的或者T2引腳 C/T2 =1
如果EXEN2=1,16位重設被引發通過溢出或者T2EX引腳由1- 》0跳變,這個跳變同樣會引
起EXF2位的設定,第一個刻度T2EX引腳採樣為1,第二個刻度採樣位0那麼EXF2
就會被置為1,定時器產生中斷如果設定有效,將被產生當TF2或者EXF2位被設定為1。
處理器需要連續的三個機器周期來辨認下降沿,第一個機器周期由T2EX 引腳採樣為1,
第二個機器周期引腳採樣為0,然後第三個機器周期則設定EXF2=1
在圖37,DCEN = 1並且 時鐘2可被設定向上記數或者向下記數,允許T2EX引腳來控制記
數的方向,如果T2EX邏輯為1將設定向上記數,TIMER2將溢出在FFFFH時,並設定溢出位T
F2,來產生一個中斷,這個中斷同樣又產生RCAP2L RCAP2H捕獲內容重新裝載進入TL2
TH2中。當T2EX邏輯為0那麼記數器向下記數,那麼當TL2和TH2中的資料與RCAP2L和RCAP2
H中的內容相等時,產生一個溢出中斷,同時將FFFFH重新裝載入TL2和TH2中。EXF2位固
定表示溢出或者下溢,EXF2必要時候還可以表示為第17位。
圖37
6.5.3可程式化的時鐘溢出
一半的刻度輸出至T2腳(P1.0),p1.0除了作為標準I/O引腳,還有兩個拓展的功能:
1. 輸入外部時鐘作為定時器/計數器
2. 在16MHZ的操作頻率之下,輸出一個頻率在122HZ到8MHZ範圍之間的50%的占空
配置一個定時器/計數器作為一個時鐘發生器,T2CON中的C/T2位必須清除,T2MOD中的T2
0E位必須被設定,T2CON。2(TR2)同樣必須被設定來啟動定時器。
時鐘溢出頻率取決于震蕩頻率和重新裝載T2捕獲值(RCAP2L,RCAP2H)的值,可以看下面這
個等式:
OscillatorFrequenty/2*(65535-(RCAP2H, RCAP2L))
(RCAP2H, RCAP2L)是RCAP2H, RCAP2L兩個無符號寄存器的值。
在時鐘溢出模式下,T2的跳變不會引起中斷,這個比較類似於當作傳輸速率來使用方式。
6.5.4 UART0傳輸速率發生器模式
當連接埠作為獨立的傳輸速率發生器 (SOBRGS=0,BRGSCON.1),TCON中的TCLK位或RCLK位
允許傳輸和接收傳輸速率由T1或T0發送的。假定S0BRGS=0,當TCLK=0時,定時器1作為UART
0傳輸傳輸速率發生器。當TCLK=1時定時器2作為UART0傳輸傳輸速率發生器。RCLK和TCLK差不
多使用,只是定時器改為UART0的接收傳輸速率發生器。
下面圖38就是傳輸速率發生器模式
傳輸速率發生器模式就像自動裝載模式,當TH2的跳變會引起TIMER2的重新裝載進RCAP2L,
RCAP2H預先設定的內容。傳輸速率發生器在模式一和模式三時是由T2給出的益處率決定的
。
模式1和模式3的傳輸速率 = 震蕩器頻率 / (16 * (65535 - (RCAP2H,RCAP2L)))
(RCAP2H,RCAP2L)是組成無符號的16位整形。
TIMER2作為傳輸速率發生器只有當RCLK/TCLK =1時才有意義,注意此時TH2中的跳變不會設
置TF2位,不會引起中斷,所以在TIMER2設定為傳輸速率發生器時,沒有必要關閉相應的中
斷設定。同樣如果EXEN2被設定,1-0的跳變引起定時器/計數器的輸入,將引起EXF2(T2
外部標誌)被設定但是不會引起重載入,所以當T2作為傳輸速率發生器時,T2EX有需要的
話可以作為產生外部中斷使用。
當T2作為傳輸速率發生器模式時,最好不要單獨讀寫TH2 TL2,在這個條件下讀寫TH2,TL2
有可能是不準確的,RCAP2寄存器是可讀的,但是不要寫入,這樣可能會產生一個重複的
裝載導致寫入或者重新裝載錯誤,TIMER應該被關閉(TR2清除)在需要擷取T2或者RCAP2
之前,表13顯示使用傳輸速率發生器和如何擷取TIMER2
6.5.5 傳輸速率公式的概要
TIMER2在設定為傳輸速率發生模式,如果TIMER2通過T2(P1。0)腳記數,那麼傳輸速率的計
算: 傳輸速率 = 時鐘溢出率 / 16
如果時鐘2通過內部記數
傳輸速率 = f(osc) / (16 *( 65535 – (RCAP2H, RCAP2L)))
f(osc) 為震蕩器的頻率
擷取RCAP2H,RCAP2L的值的計算公式:
RCAP2H,RCAP2L = 65535 – f(osc)/(16*傳輸速率)