赞
踩
汇编程序转C语言
我有个汇编的程序,很简单,是电子琴,谁能帮我转成C语言的?
DATAS SEGMENT
DATA1 DB 30H,34H,3AH,42H,45H,4EH,58H,62H,68H MSG DB'',0DH,0AH
DB'|~~~~~~~~~~~~~~~~~~~~~~~~Dianziqin~~~~~~~~~~~~~~~~~~~~~~~~|',0DH,0AH,0DH,0AH
NUM DB ?
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV BX,OFFSET DATA1
MOV DX,OFFSET MSG
MOV AH,9
INT 21H
SKY:
MOV AH,07H
INT 21H
CMP AL,3
JE EXIT1
CMP AL,31H
JL SKY
CMP AL,39H
JG SKY
SUB AL,31H
MOV AH,00H
MOV SI,AX
MOV NUM,AL
MOV AL,[BX][SI]
CALL INIT
CALL WAITF
IN AL,61H
AND AL,0FCH
OUT 61H,AL
JMP SKY
INIT PROC NEAR
MOV DL,0AH
MUL DL
MOV DI,AX
MOV AL,0B6H
OUT 43H,AL
MOV DX,0012H
MOV AX,34DEH
DIV DI
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
IN AL,61H
MOV AH,AL
OR AL,03H
OUT 61H,AL
RET
INIT ENDP
WAITF PROC NEAR
PUSH AX
WAITF1:
IN AL,61H
AND AL,15H
CMP AL,AH
JE WAITF1
MOV AH,AL
LOOP WAITF1
POP AX
RET
WAITF ENDP
EXIT1:
MOV AH,4CH
INT 21H
CODES ENDS
END START
4个回答
这个程序我调试过了,没问题,但我的晶振和单片机的时钟周期和你的不一样,所以你只需要把延时改下就可以了,具体多少你算下吧,不能不会算这个吧
check_bit就是你P3口的一位
bit check_bit(void)
{
unsigned int i;
if(check_bit==1)
{
return (1);//为高什么也不做
}
else
{
for(i=0;i<1500;i++)//延时稍大于200ms就行了。
{
if (check_bit==1)//在200ms内出现高也什么都不做。
return (1);
}
return (0);//程序执行到这时低电平就一定大于200ms了
}
}
如果这个程序返回1就说明输入的为高电平,不用管,而返回0时就证明有大于200ms的低电平,这时你调下报警程序就可以了。
程序虽小,也花了我一定时间去想呢。有问题再给我发消息吧,很乐意帮忙。
你直接调用它就行了,把它当个子程序用
;这也是一个子程序,用来调用
check_bit bit p3.0 ;随便一个IO都可以
JNB check_bit,NEXT
SETB F0
SJMP BACK
NEXT:加一段你想要的延时时间(延时会编吧)
并时刻判断 check_bit的状态,(判断条件在延时内部)
在规定时间内变为1,不符合你
的要求就
SETB F0
SJMP BACK
如果超过你的延时还没变为高(完成延时后了),那
就说明符合你的要求(假如延时大于200ms)
CLR F0
BACK;RET
你仔细看下,和C的结构其实是一样的,就是指令不一样了而已。
最后判断F0的值是什么,它是PSW SFR中的一位,可用来用户自定义使用。
如果F0为1就说明输入的为高电平,不用管,而F0为0时就证明有大于200ms的低电平,这时你调下报警程序就可以了。
◆◆
评论读取中....
请登录后再发表评论!
◆◆
修改失败,请稍后尝试
按单片机的思想看看~
◆◆
评论读取中....
请登录后再发表评论!
◆◆
修改失败,请稍后尝试
精华知识
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。