在串列埠輸出資料

能夠在串列埠輸出文字,其實是很重要的一步,印象中當年微軟的DOS作業系統,就有一個DEBUG程式,讓使用者可以看到,目前記憶體的內容為何。現在8051單晶片系統,作者嘗試作類似的努力,讓使用者可以看到8051系統內的記憶體內容為何。得知記憶體內容,對8051的學習,將帶來很大的幫助。

 ;*************************************************/

; Used in C as PutWord(int i)
;*************************************************/
.GLOBL _PutWord
_PutWord:
     PUSH     DPL
     MOV      DPL,DPH
     LCALL    _htoa_byte
     POP       DPL
     LCALL   _htoa_byte
     RET

;*************************************************/
; put Acc with hex on UART port
;*************************************************/
.GLOBL _htoa_byte
_htoa_byte:
     MOV     A,DPL
     PUSH   ACC
     SWAP   A
     ANL     A,#0XF
     LCALL  htoa4bit
     POP     ACC
     ANL     A,#0XF
; SJMP      htoa4bit
htoa4bit:
     CJNE   A,#10,_htoa1
_htoa1:
     JNC     _htoa0 ;JAE _htoa0
     ORL    A,#0X30
     MOV   DPL,A
     SJMP  _putchar
_htoa0:
     ADD   A,#0x37
     MOV   DPL,A
     SJMP  _putchar

此處包括兩個常用函式,htoa_byte(unsigned char) 可以將8位元的輸入參數以16進位的方式在串列埠終端機螢幕上顯示,PutWord(unsigned int)則是顯示16位元的資料。

主程式則是修改成如下的方式:

//*********************************************************
// delay program
//*********************************************************
void DelaySub(unsigned int delayno)
{
     while (delayno!=0) delayno--;
}
//*********************************************************
// main program
//*********************************************************
void main (void)
{
     unsigned char uchr;
     Init_UART(); P1M1=0; P1M0=0xFF; /* P1 set as Output */

     //for (uchr=0;uchr<0x20;uchr++) { htoa_byte(uchr); putchar(' '); }
     for (uchr=0;uchr<0x20;uchr++) {
          if ((uchr&0xF)==0) CRLF();
          htoa_byte(uchr); putchar(' ');
     }
     while (1) {
     LED=1; DelaySub(0xFFFF); LED=0; DelaySub(0XFFFF);
     }
}

其中__code extern putchar(unsigned char i); C51中稱為原型,這個程式編載執行後,在終端機螢幕上呈現如下的畫面。

   

雖然結果是正確的,但看起來不夠專業,如果能改成如下的畫面,看起來會舒服很多。

 

只要將顯示的程式作局部的小修改,就可以逹到這個效果。

for (uchr=0;uchr<0x20;uchr++) {
     if ((uchr&0xF)==0) CRLF();
     htoa_byte(uchr); putchar(' ');
}

程式在顯示到第16個資料的時候,進行一次換行的動作。此處想談一下C語言的好處,就這個簡單的資料顯示,如果改成以組合語言寫,應該要多花很多力氣,程式也會長很多,除錯花的力氣應該不會少,還是回到作者先前的論點,只須學組合語言,不要再寫組合語言了。

 

 

 

文章標籤
全站熱搜
創作者介紹
創作者 單晶片玩人 的頭像
單晶片玩人

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

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