close

可控制的輸出/

 記得以前作者參予筆電的研發團隊,BIOS工程師總會在列表機埠上接上幾顆LED,然後寫輸出程式控制LED的開或關,當作BIOS程式除錯之用。

 玩單晶片最重要的思維是必須看到程式的運作狀況,晶片的動作,簡單如LED開關,複雜如控制繼電器,甚至在電腦終端機顯示一段文字等等,單晶片透過輸出或輸入埠,和外界溝通,工程師也才能確定,程式在正常運作。

LED的動作控制

 LED是一個電流驅動元件,只要在LED的正極和負極之間通過小於10MA的電流,即可點亮LED

目前的硬體平台,用的是STC11F04,這顆單晶片指令集同於標準的8051,但在晶片的輸出/入能力上,作了些改良。傳統的8051當作輸出時,只能提供1MA/5V的,11F04輸出能力,則有4種方式可以選擇,分別是低電流(同於傳統8051),高電流(20MA),高阻抗輸入及開源極輸出(OPEN DRAIN)。

輸出入驅動方式選擇,是靠特殊功能暫存器PXM0PXM1X的數值代表是那一種輸出入埠。目前的11F04PORT13。現在把上一節程式作一些修改,再看一次。

      P1M0    = 0x92

      P1M1    = 0x91

      LED      = P1.0

     .AREA    SYS (ABS,OVR)

     .ORG     0x0
     LJMP     _RESET

_RESET:

     MOV     SP,#0xE0
     MOV     P1M1,#0x0;
     MOV     P1M0,#0xFF
     SETB    LED
    ; CLR     LED
_ledon:
    LJMP     _ledon

; END

此處P1M1放入內容0,P1M0則是0XFF,代表埠1的全部設為大電流輸出,因為LED最大只能流過10MA,所以LED必須串一個330歐姆的電阻限流。

組合語言的註解

 組合語言程式中的分號(;),準備告訴編譯程式,忽略掉該行分號之後的全部內容,所以工程師常使用分號,在其後書寫一些文字當作註解。此處分號之後的指令CLR LED,代表將LED這個輸出埠的值設為0,即0V,代表LED正負極兩端沒有電壓差,將關掉LED顯示。

編譯專案中的原始碼,並且將編譯後得到的程式碼下載到單晶片平台,將發現改變程式碼,平台的LED狀態也跟著變化,對於單晶片控制,第一次發現我們有了控制能力。

 另外在單晶片冷開機時,P1M1及P1M0暫存器的起始值都為0,代表P1處於低電流輸出,將指令P1M1和P1M0兩行設為註解,(或是將P1M1及P1M0都設為0) LED的亮度將變弱。

單晶片和開關的不同

單晶片目前能作的,儘止於LED的開和關,在加入時間軸的因素之後,能作的事情就完全不同了,比如透過串列埠介面(串列埠也只是一連串01的訊號),可以在個人電腦上顯示一段文字,可以控制LED 8字節數碼管,顯示時間或日期等等。

當然,萬事起頭難,現在已經有一個好的開始,我們慢慢玩下去.

 

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 單晶片玩人 的頭像
    單晶片玩人

    單晶片玩人(uPplayer)的部落格

    單晶片玩人 發表在 痞客邦 留言(0) 人氣()