嵌入式系統的範例程式
EmbeddedExample.jpg

圖一、嵌入式系統的案例

OUTSTATUS    EQU    $FFFC          // 顯示器狀態
DATAOUT      EQU    $FFFD          // 顯示暫存器
INSTATUS     EQU    $FFFE          // 鍵盤狀態
DATAIN       EQU    $FFFF          // 鍵盤暫存器
CR           EQU    $A             // 換行字元
BUF          DCD    100            // 輸入行儲存區

        Move     #BUF, R1          //  R0 用來當儲存區指標,用以儲存下一個字元
READ    TestBit    #3, INSTATUS    // 測試鍵盤是否有鍵被按下
        Branch=0    READ           // 一直測到有鍵被按下為止
        MoveByte    DATAIN, (R0)   // 將該輸入鍵值儲存到儲存區

ECHO    TestBit    #3, OUTSTATUS   // 測試顯示器是否可以輸出了
        Branch=0    ECHO           // 一直測試到可以輸出為止
        MoveByte    (R0), DATAOUT  // 將剛剛讀入的鍵值送到顯示器顯示

        Compare    #CR, (R0)+      // 看看是否是換行字元
        Branch!=0    READ          // 若不是,則繼續讀下一個字
#define OUTSTATUS  (volatile char *) 0xFFFC    // 顯示器狀態
#define DATAOUT    (volatile char *) 0xFFFD    // 顯示暫存器
#define INSTATUS   (volatile char *) 0xFFFE    // 鍵盤狀態
#define DATAIN     (volatile char *) 0xFFFF    // 鍵盤暫存器

void main() {
  char buf[100];                               // buf = 輸入行儲存區
  char* LOC=buf;                               // LOC = 輸入行儲存位址
  while (1) {                
    while (INSTATUS & 0x8 == 0) {}             // 一直測到有鍵被按下為止
    *LOC = *DATAIN;                            // 將該輸入鍵值儲存到儲存區
    while (OUTSTATUS & 0x8 == 0) {}            // 測試顯示器是否可以輸出了
    *DATAOUT = *LOC;                           // 將剛剛讀入的鍵值送到顯示器顯示
    LOC ++;                                    // 前進到下一個字元
    if (*LOC == '\n')                          // 若是換行字元,則離開迴圈
      break;
  } 
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License