Social Icons

twitterfacebookgoogle plusrss feedemail

5/02/2010

mcs51微處理機期中補考試題


這是為處理機期中考助教叫我們補考的試題,我也不知道為什麼要補考拉?可能有些人沒寫出來助教想加分~!
以下是我寫的答案大家可以參考看看,程式碼我已經用程式驗證過應該沒什麼問題才對。


程式碼寫法說明:
為了讓各位使用一種程式碼,就可以解答許多種LED燈的跑法,所以我才用這方法,不過這種方法有利有弊,如果你是指想把程式寫出來的,那麼強力推薦此種方法!!!!
我只要解釋幾行就好,相信你會懂得

MOV P1,#0FEH   //後面的數字表示第幾個燈要亮

要怎麼知道FE是要讓第幾顆亮呢?
首先我們先把FE的二進位寫出來
十六進位
二進位
FE
1111 1110
不知道你有沒有發現什麼?
首先我們先看這串二進位是1111 1110 其中0表示會亮1表示不會亮
這時候如果仔細一看
FE2進位不就是在跟我們說最右邊的那顆LED會亮麼??
      1111        1110
○○○○ ○○○●

讓我們再看一行
    MOV P1,#0FDH  //這是第幾顆LED會亮呢?

一樣我們寫成二進位為1111 1101
    寫成二進位候您是否知道第幾顆LED會亮了呢?(右邊第二顆)

從以上知道LED的亮法之後,我們只要用一連串的這個式子
就可以達成題目所要的答案囉!!
     1111        1101
○○○○   ○○●○
更新:有人說我這種方法太慢?程式碼要寫好長?
答:請問一下喔,考試的時候請問你背一行的程式碼?還是要背課本上那麼長的程式嗎?,再說考試可以給你看課本麼?課本上給得程式碼可以解其它種LED燈的跑法麼?仔細想想好麼,沒想過以上這些就請勿嘴砲,我承認我的程式碼不是最好的方法,但是它卻是很好用的一種方法。至少我是自己想出這個方法的,不是抄襲別人的。

第一梯次補考題目:
使八顆LED(76543210)顯示出以下狀態:
 7 6 5 4 3 2 1 0
○○○○○○○●
○○○○○○●○
○○○○○●○○
        :
○●○○○○○○
●○○○○○○○
○○○○○○○○
●○○○○○○○
○●○○○○○○
        :       
○○○○○○●○
○○○○○○○●
○○○○○○●○
○○○○○●○○

程式碼:

ORG 00H
  JMP START
  ORG 30H
START:
  MOV SP,#60H
LOOP:
//往左邊跑
  MOV P1,#0FEH
  CALL DELAY
  MOV P1,#0FDH
  CALL DELAY
  MOV P1,#0FBH
  CALL DELAY
  MOV P1,#0F7H
  CALL DELAY
  MOV P1,#0EFH
  CALL DELAY
  MOV P1,#0DFH
  CALL DELAY
  MOV P1,#0BFH
  CALL DELAY
  MOV P1,#7FH
  CALL DELAY
//全部不亮
  MOV P1,#0FFH
  CALL DELAY
//往右跑
  MOV P1,#7FH
  CALL DELAY
  MOV P1,#0BFH
  CALL DELAY
  MOV P1,#0DFH
  CALL DELAY
  MOV P1,#0EFH
  CALL DELAY
  MOV P1,#0F7H
  CALL DELAY
  MOV P1,#0FBH
  CALL DELAY
  MOV P1,#0FDH
  CALL DELAY
// 跑到右邊第二個燈時,就可以跳回迴圈
  JMP LOOP

DELAY:
  MOV R5,#10
D1:
  MOV R6,#202
D2:
  MOV R7,#246
  DJNZ R7,$
  DJNZ R6,D2
  DJNZ R5,D1
  RET
  END
如果要複製上方程式碼,請點擊程式碼上方的    圖示會跳出一個視窗,複製即可




第二梯次補考題目:
使八顆LED(76543210)顯示出以下狀態:
 7 6 5 4 3 2 1 0
●○○○○○○○
○●○○○○○○
○○●○○○○○
        :
○○○○○○●○
○○○○○○○●
○○○○○○○○
○○○○○○○●
○○○○○○●○
        :
○●○○○○○○
●○○○○○○○
○●○○○○○○
○○●○○○○○

程式碼:
ORG 00H
  JMP START
  ORG 30H
START:
  MOV SP,#60H
LOOP:
//往右跑
  MOV P1,#7FH
  CALL DELAY
  MOV P1,#0BFH
  CALL DELAY
  MOV P1,#0DFH
  CALL DELAY
  MOV P1,#0EFH
  CALL DELAY
  MOV P1,#0F7H
  CALL DELAY
  MOV P1,#0FBH
  CALL DELAY
  MOV P1,#0FDH
  CALL DELAY
  MOV P1,#0FEH
  CALL DELAY

//全部不亮
  MOV P1,#0FFH
  CALL DELAY
   //往左邊跑

  MOV P1,#0FEH
  CALL DELAY
  MOV P1,#0FDH
  CALL DELAY
  MOV P1,#0FBH
  CALL DELAY
  MOV P1,#0F7H
  CALL DELAY
  MOV P1,#0EFH
  CALL DELAY
  MOV P1,#0DFH
  CALL DELAY
  MOV P1,#0BFH
  CALL DELAY

// 跑到左邊第二個燈時,就可以跳回迴圈
  JMP LOOP

DELAY:
  MOV R5,#10
D1:
  MOV R6,#202
D2:
  MOV R7,#246
  DJNZ R7,$
  DJNZ R6,D2
  DJNZ R5,D1
  RET
  END

如果要複製上方程式碼,請點擊程式碼上方的    圖示會跳出一個視窗,複製即可



如果發現文章有錯誤,歡迎留言告知~謝謝指教!

2 則留言:

  1. 請問,邏輯設計解答有第6.7章的嗎??

    回覆刪除
  2. 很抱歉~我之前在寫的時候也只有那5章
    其他的可能還要跟我們教授拿

    回覆刪除

俗話說
凡走過必留下痕跡,凡住過必留下鄰居
凡爬過必留下樓梯,凡來過必留下IP
看過文章之後歡迎留下您寶貴的意見喔!

 
 
无觅相关文章插件,迅速提升网站流量