[問題] 請問89c51的語言程式 我這樣翻譯正確嗎

看板ASM (組合語言)作者 (安靜的角落)時間16年前 (2009/01/12 00:25), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
以下是小弟我跟眾多好友討論好久 勉強翻譯出來的 不知道對不對 請高手評鑑並鞭之XD... 附錄A 8051的程式碼 ;--------------------- ; I/O DEFINE ----輸入輸出設定 AL REG P3.7 蜂鳴器-P3.7接腳 OUT REG P1.5 輸出-P1.5接腳(輸出至4011控制紅外線發射) IN REG P1.6 輸入-P1.6接腳(紅外線接收器) WLED REG P1.7 LED-P1.7接腳(LED接腳) ;----------------------------- ORG 0H JMP START ;----------------------------- START: 主程式 CLR OUT 將輸出(P1.5)設成低電位 [開始發射紅外線] SETB IN 設定輸入 SETB AL 設定蜂鳴器動作設定到輸入 CALL LED_BL 呼叫-LED動作 CLR AL 清除-蜂鳴器動作 CALL NIR 呼叫-判斷物體靠近動作 JMP $ ;----------------------------------------------- TITLE: DB "IRA IR NEAR DETECT ALARM..." ;----------------------------------------------- ; DELAY R5*10 ms DELAY: ----------呼叫延遲 MOV R6,#50 把十進的50放置於R6暫存器 $1: MOV R7,#100 把十進的100放置於R7暫存器 $2: DJNZ R7,$2 原地一直減R7的值(一次扣一) DJNZ R6,$1 原地一直減R6的值(一次扣一) DJNZ R5,DELAY R5扣到0則會向下道ret跳出副程式;不為0則跳至DELAY RET ;(延遲時間公式為R5*R6*R7*2uS) 所以此斷延遲時間為30mS ;-------------------------------- LED_BL: ------------LED燈號 MOV R4,#6 把十進的6放置於R4暫存器 $0: CPL WLED 取WLED的補數 MOV R5,#3 把十進的3放置於R5暫存器 CALL DELAY 呼叫DELAY DJNZ R4, $0 R4扣到0則會向下道ret跳出副程式;不為0則跳至$0 RET ;-------------------------------------- ; DELAY R5*0.1 ms LED 紅外線 動作的副程式 DEL1: ---------呼叫延遲 MOV R5,#10 ;10 10X0.1=1mS --> 1K HZ $0: MOV R6,#2 把十進的2放置於R6暫存器 $1: MOV R7,#17 把十進的17放置於R7暫存器 $2: DJNZ R7,$2 原地扣R7的值(一次扣一) DJNZ R6,$1 原地扣R6的值(一次扣一) DJNZ R5,$0 RET ;--------------------------------- NIR: -----物體靠近判斷 ; LOW PULSE..... (低電壓脈充) SETB OUT 先停掉發射 CALL DEL1 ; 1 mS 延遲時間是1mS 是用來物體靠近判斷的延遲時間 JB IN, $1 (如果紅外線接收器接收到則跳出子程序 反之繼續執行$1) CALL DEL1 ; 1 mS CLR OUT JB IN, $1 ; STILL LOW TRUE IR ; FIND OBSTACLE NEAR !!! ............ (偵測到有物體接近) CLR OUT 計續發射 CALL ALARM 輸出警報音 $1: CLR OUT ;繼續發射紅外線 MOV R5,#20 CALL DELAY ;延遲時間20*0.1mS為2mS JMP NIR ;---------------------------- ALARM: ------------蜂鳴器呼叫 SETB AL CALL LED_BL CALL LED_BL CALL LED_BL CLR AL RET -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.233.137
文章代碼(AID): #19QXsH_G (ASM)
文章代碼(AID): #19QXsH_G (ASM)