[問題] 請問89c51的語言程式 我這樣翻譯正確嗎
以下是小弟我跟眾多好友討論好久
勉強翻譯出來的
不知道對不對 請高手評鑑並鞭之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
ASM 近期熱門文章
PTT數位生活區 即時熱門文章