谁能把以下汇编语言转换成c语言!急!急!!

STRT EQU P3.5

STP EQU P3.6

CLRR EQU P3.7

ORG 00H

AJMP MAIN

ORG 0BH

AJMP T0INT

ORG 30H

MAIN:

MOV SP,#60H

MOV DPTR,#TAB

MOV TMOD,#01H ;T0定时方式1

SETB EA

SETB ET0

MOV TH0,#3CH ;50ms定时常数

MOV TL0,#0B0H

MOV R0,#20 ;20x50mS=1S

k1:

LCALL DISP

JB STRT,K2

ACALL DISP

JNB STRT,$-2

AJMP START

k2:

JB STP,K3

LCALL DISP

JNB STP,$-3

AJMP STOP

K3:

JB CLRR,K1

LCALL DISP

JNB CLRR,$-3

AJMP CLEAR

START:

SETB TR0

AJMP K1

STOP:

CLR TR0

AJMP K2

CLEAR:

CLR TR0

MOV R4,#0

AJMP K1

T0INT:

MOV TH0,#03CH; ;定时中断子程序。重装定时常数

MOV TL0,#0B0H;

DJNZ R0,T0INTR ;50msX20=1S,未满20次,跳出中断子程序

MOV R0,#20

INC R4

CJNE R4,#100,T0INTR

MOV R4,#0

CLR TR0

T0INTR:

RETI

DISP:

MOV A,R4

MOV B,#10

DIV AB
;当前值除以10

MOV 20H,A
;得出的商送给十位

MOV 21H,B
;得出的余数送给个位

MOV A,20H
;十位显示

MOVC A,@A+DPTR

MOV P0,A

CLR P2.7

LCALL DELAY

SETB P2.7

MOV A,21H
;个位显示

MOVC A,@A+DPTR

MOV P0,A

CLR P2.6

LCALL DELAY

SETB P2.6

RET

DELAY: ;误差 0us

MOV R6,#10

DL0:

MOV R5,#50

DJNZ R5,$

DJNZ R6,DL0

RET

TAB:

DB
3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

END

第1个回答  2013-04-18
忠实原著,不考虑优化
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit STRT=P3^5;
sbit STP=P3^6;
sbit CLRR=P3^7;
sbit DS1=P2^7;
sbit DS0=P2^6;
uchar dtab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar ts,tc;
//无参数输入的延时子程序,误差会比汇编大
void delay()
{ uint i;
for(i=500;i>0;i--);
}
void disp()
{
uchar i,j;
i=tc/10;
j=tc%10;
P0=dtab[i];
DS1=0;
delay();
DS1=1;
P0=dtab[j];
DS0=0;
delay();
DS0=1;
}
void main()
{
SP=0x60;
TMOD =0X01;
EA=1;
ET0=1;
TH0=0X3C;
TL0=0XB0;
while(1)
{
disp(); //显示
//键扫
if(STRT)
{
disp(); //通过调用显示子程序消抖
if(STRT)TR0=1;
}
if(STP)
{
disp();
if(STP){TR0=0;}
}
if(CLRR)
{
disp();
if(CLRR){tc=0;}
}

}
}
void T0INT() interrupt 1
{
TH0=0X3C;
TL0=0XB0;
ts++;
if(ts>=20){
tc++;
if(tc>=100){tc=0;TR0=0;}
}
}追问

能帮我看看那个程序怎么在这个中不能显示呢?

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网