作者lemonice47 (安静的角落)
看板ASM
标题[问题] 请问89c51的语言程式 我这样翻译正确吗
时间Mon Jan 12 00:25:52 2009
以下是小弟我跟众多好友讨论好久
勉强翻译出来的
不知道对不对 请高手评监并鞭之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