有一段汇编语言,网上的大大没附录C语言的,有高手能吧这段汇编语言转换成C语言编程吗?急找高手帮忙。。

ORG 0000H ;主程序从0000H开始
LJMP MAIN
ORG 0003H
LJMP MINUTE ;外中断0校分
ORG 000BH
LJMP COUNT ;定时中断输出显示
ORG 0013H
LJMP HOUR ;外中断1校时
MAIN: MOV SP,#50H ;设置堆栈
MOV R0,#00H ;设置50ms计数器初值
MOV R2,#00H ;设置秒计数器初值
MOV R3,#00H ;设置分计数器初值
MOV R4,#00H ;设置十分计数器初值
MOV R5,#00H ;设置小时计数器初值
MOV R6,#00H ;设置十小时计数器初值
SETB PT0 ;定时器0中断优先
SETB PT1 ;定时器1中断优先
SETB EA ;中断总允许
SETB ET0 ;定时中断0允许
SETB EX0 ;外部中断0允许
SETB EX1 ;外部中断1允许
SETB IT0 ;外部中断0为脉冲触发方式
SETB IT1 ;外部中断1为脉冲触发方式
MOV TMOD,#01H ;定时器0工作于方式1(定时)
MOV TL0,#0B0H ;定时器0装入50ms计数初值
MOV TH0,#3CH
SETB TR0 ;启动定时器0
SJMP $ ;等待中断

COUNT: INC R0
CJNE R0,#14H,XIAN ;判断计时是否满1秒,不满转XIAN
MOV R0,#00H ;重设50ms计数器初值
INC R2
CJNE R2,#3CH,XIAN;判断计时是否满1分,不满转XIAN
MOV R2,#00H ;重设1s计数器初值
INC R3
CJNE R3,#0AH,XIAN ;判断计时是否满10分,不满转XIAN
MOV R3,#00H ;重设1分计数器初值
INC R4
CJNE R4,#06H,XIAN ;判断计时是否满1小时,不满转XIAN
MOV R4,#00H ;重设10分计数器初值
INC R5
CJNE R5,#03H,X1 ;判断小时计数是否为3,不是转X1
MOV 20H,R6 ;小时计数为3,取出10小时计数值

ORG 0000H ;主程序从0000H开始
LJMP MAIN
ORG 0003H
LJMP MINUTE ;外中断0校分
ORG 000BH
LJMP COUNT ;定时中断输出显示
ORG 0013H
LJMP HOUR ;外中断1校时
以上对应:
#include……
#include……
void minute() interrupt 0 using 0
{ }
void count() interrupt 1 using 1
{ }
void hour() interrupt 2 using 2
{ }
//////////////////////////////////////////////////////////////////////////////////////////////////////////
MAIN: MOV SP,#50H ;设置堆栈
MOV R0,#00H ;设置50ms计数器初值
MOV R2,#00H ;设置秒计数器初值
MOV R3,#00H ;设置分计数器初值
MOV R4,#00H ;设置十分计数器初值
MOV R5,#00H ;设置小时计数器初值
MOV R6,#00H ;设置十小时计数器初值
SETB PT0 ;定时器0中断优先
SETB PT1 ;定时器1中断优先
SETB EA ;中断总允许
SETB ET0 ;定时中断0允许
SETB EX0 ;外部中断0允许
SETB EX1 ;外部中断1允许
SETB IT0 ;外部中断0为脉冲触发方式
SETB IT1 ;外部中断1为脉冲触发方式
MOV TMOD,#01H ;定时器0工作于方式1(定时)
MOV TL0,#0B0H ;定时器0装入50ms计数初值
MOV TH0,#3CH
以上对应:
unsigned char count=0,second=0,minute=0,ten_minute=0,hour=0,ten_hour=0,flag
void init(void)
{
PT0 =1 ;//定时器0中断优先
PT1=1 ;//定时器1中断优先
EA =1 ;//中断总允许
ET0=1 ;//定时中断0允许
EX0=1 ;//外部中断0允许
EX1=1 ;//外部中断1允许
IT0 =1 ;//外部中断0为脉冲触发方式
IT1=1 ;//外部中断1为脉冲触发方式
TMOD=0x01 ;//定时器0工作于方式1(定时)
TL0=0xB0 ;//定时器0装入50ms计数初值
TH0=0x3C;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SETB TR0 ;启动定时器0
SJMP $ ;等待中断
以上对应:
void main(void)
{
init();
TR0=1 ;//启动定时器0
while(1) ;//等待中断
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
COUNT: INC R0
CJNE R0,#14H,XIAN ;判断计时是否满1秒,不满转XIAN
MOV R0,#00H ;重设50ms计数器初值
INC R2
CJNE R2,#3CH,XIAN;判断计时是否满1分,不满转XIAN
MOV R2,#00H ;重设1s计数器初值
INC R3
CJNE R3,#0AH,XIAN ;判断计时是否满10分,不满转XIAN
MOV R3,#00H ;重设1分计数器初值
INC R4
CJNE R4,#06H,XIAN ;判断计时是否满1小时,不满转XIAN
MOV R4,#00H ;重设10分计数器初值
INC R5
CJNE R5,#03H,X1 ;判断小时计数是否为3,不是转X1
MOV 20H,R6 ;小时计数为3,取出10小时计数值
以上对应:
conut++;
if(count==0x14)
{
count=0;
second++;
if (second==0x3c)
{
second=0;
minute++;
if(minute==0x0a)
{
minute=0;
ten_minute++;
if(ten_minute==0x06)
{
ten_minute=0;
hour++;
if(hour==0x03)
{
flag=ten_hour;
}
else
{
//填写你的X1代码
}
}
}
}
}
此处填写你的XIAN代码。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答
大家正在搜