2008年6月12日

無發言會議

PM :SoftWare 是你負責的,應該沒有問題吧?
我 :..........@@?( 啥? )
某同事 :SoftWare 沒問題才怪,問題才多勒!!!
我 :..........一.一( 真狠 一點面子也不給嗎? )
經理 :對阿 硬體都沒看到 這個問題大不大?
我 :..........( 那叫我近來開會做啥 ?)
經理 :你回去忙你的吧!!!
我 :那我先出去了.......

真是暈阿......

Read more...

2008年6月11日

8051/8052暫存器

偷懶了許多天,該是好好充實一下網誌內容的時候了,今天來補充一下8051/8052的各個暫存器吧!!蝦米?!為啥不是ARM或其他32位元的MCU( 註一 ) ?而是8051/8052呢?8051/8052不是很久的產品了嗎?老實說是因為我以前上課不專心,所以現在遭到報應了XD....其實在現在許多產品還是使用8051/8052或是其變種來作MCU ,為啥?因為它便宜唄!!技術也成熟!!加上它有許多變種的存在,不失為一個好用的MCU,以下為8051/8052的各個暫存器:

1.ACC (累加器) : 位址 E0H

通常寫為ACC或是A表示,8051/8052大部分的運算都透過ACC來儲存運算結果,作資料的轉移或跳要判斷,算是功能最多的一個暫存器。

2.B暫存器 : 位址 F0H
此暫存器主要用於乘法、除法指令,再乘法運算時,存放乘積的高位元,在除法運算時放餘數。不做乘除法指令時,也可以作為一般暫存器。

3.PSW ( Program Status Word ) : 位址 D0H
程式狀態字暫存器,紀錄程式運作時,CPU的各種狀態訊息。我們可以用指令改變PSW的值,藉以控制CPU執行的狀態。

4.SP (Stack Pointer) : 位址 81H
堆疊指標暫存器為8位元暫存器,所以堆疊區最大容量為 2^8 = 256Byte,當程式要執行PUSH或是CALL的指令時,堆疊指標的執會先加1,再將資料推入到堆疊區所指的暫存區中存放。堆疊區的位置可以由使用者決定再內部記憶體( RAM )的任何位址。當8051/8052被Reset時,堆疊指標的位址會指為07H,所以第一筆資料將存入08H,而08H剛好為工作暫存器庫( RB1) 的 第一個暫存器 (R0)的位址。為了讓RB1的正常運作,應該接堆疊指標指向使用者RAM 的區域 ( 30H ~ 7F)。

5. DPTR (Data Pointer Register ) : 位址 82H 83H
資料指標暫存器是一個16位元的暫存器,它是由兩個8位元暫存器所組成。高位元組是DPH,低位元組是DPL。DRTR作為16位元暫存器時,可以定址外部記憶體或外部記憶體的位址。當作為8位元暫存器時,視為兩個一般暫存器。

6. RB0、RB1、RB2、RB3工作暫存器共有四組工作暫存器庫。每個暫存器庫共有8個8位元暫存器,分別為R0、R1、R2、R3、R4、R5、R6、R7。

7.SBUF( Serial Buffer ) : 位址99H
串列資料緩衝器,實際上為兩個暫存器所組成。一個是傳送時的資料緩衝器、另一個為接收時的資料緩衝器。當我們把一個位元組的資料寫入SBUF時,此時SBUF就當做傳送的資料緩衝器,非同步接收傳送器 ( UART串列傳輸 ),就會把這個資料轉換成串列資料,透過TXD這條線傳送出去,若是接收資料,此時SBUF就當做接收的資料緩衝器。

8.P0 P1 P2 P3 : 位址 80H 90H A0H B0H
四個輸出/輸入埠是8051/8052與外界溝通的主要管道。

9.TH0~TH2 TL0~TL2 : 位址 8CH 8DH CDH 8AH 8BH CCH
計時/計數暫存器 在8051中只有TH0 TH1 (計時/計數暫存器高位元組)及TL0 TL1 (計時/計數暫存器低位元組)這兩組計時/計數暫存器。8052則多了一組TH2 TL2。這三組暫存器維16位元的暫存器,名稱分別為Timer0 Timer1 Timer2,計時/計數暫存器又簡稱為計時/計數器或是計數器。

10.RCAP2H RCAP2L ( Capture Register ) : 位址 CAH
捕取式暫存器,當8052 的 Timer2工作模式為捕取模式時 ( Capture Mode ),當T2EX腳位的輸入信號是高電位或是正緣觸發時,TH2 TL2的內容將複製到這兩個暫存器中,當TH2 TL2設定成 16位元自動載入模式(Auto - Reload - Mode)時候,TH2 TL2的重新載入值就是保存在這兩個暫存器中。

11.IP ( Interrupt Priority Control ) : 位址 B8H
中斷優先順序暫存器。

12.IE ( Interrupt Enable Control ) : 位址 A8H
中斷致能控制暫存器。

13.TMOD ( Timer/Counter Modes ) : 位址 89H
計時/計數模式控制。控制計時/計數器0與計時/計數器1 工作模式。

14.TCON ( Timer/Counter Control ) : 位址 88H
計時/計數器控制暫存器。控制計時/計數器0與計時/計數器1 工作狀態。

15.TCON2 ( Timer/Counter 2 Control ) : 位址 C8H
計時/計數器2控制暫存器。控制計時/計數器2工作模式。

16.SCON ( Serial Control ) : 位址 98H
串列埠控制暫存器。控制非同步接收傳送器(UART)的工作模式。

17.PCON(電源控制暫存器) 位址 87H
控制電源工作模式。


註一:Micro Control Unit。我們稱作單晶片,對岸稱作單片機。根據匯流排的寬度,單晶片又分為4位元、8位元、16位元及32位元單晶片。4位元單晶片多用於家電控制中;8位元、16位元單晶片主要用於一般的控制領域,通常不使用作業系統;32位元單晶片用於網路操作、多媒體處理等比較複雜的處理程式,通常要使用嵌入式作業系統。

Read more...

2008年6月6日

練習程式的好去處

最近找到一個網站 ACM ( 註一 ),它底下有附設一個網站UAa Onlline Judge System ( 註二 ) , 上面有許多的程式設計的題目,並且可以上傳程式碼,幫你檢查是否有誤 ( 雖然似乎有點問題 , 因為我不管怎麼改CODE,幾乎都是有錯誤的,但明明在localhost測試都正常 , 研究中~"~ 迷之聲:明明就是你寫錯 ),網站上目前支援四種language,ANSI C 4.1.2 - GNU C Compiler 、 JAVA 1.6.0- Java Sun JDK、 C++ 4.1.2 - GNU C++ Compiler 、PASCAL 2.0.4 - Free Pascal Compiler等。有興趣的可以去逛逛。這個網站只支援Fire Fox喔,不然會無法順利瀏覽。
另外,對英文有點頭痛的,這裡有個中文網站可以參考,只是翻譯的題目有賴大家貢獻,所以題目會少一點喔 Lucky 貓的 ACM 園地


註一 :ACM是
Association for Computing Machinery 的縮寫,一個研究電腦科學的一個組織 。



註二:
UVa Online Judge System,這個網站收集了歷年來ACM程式比賽的題目。
Read more...