怎么把这个C51按键中断程序汇编语言改写成C语言

s1 bit p3.2s2 bit p3.4
mcudata equ 30h
dly1 equ 41hdly2 equ 42h
org 0000h
sjmp start
org 0003h
sjmp s1do

start:nop
setb s1setb s2
setb ea
setb ex0
setb it0

mov mcudata,#0
mov dptr,#sm
mov a,mcudata
movc a,@a+dptr
mov p2,a

loop:jb s2,$
lcall dlykey
jb s2,loop
inc mcudata
mov a,mcudata
xrl a,#10
jnz goon1
mov mcudata,#0
goon1:mov a,mcudata
movc a,@a+dptr
mov p2,a
sjmp loop

s1do:jnb s1,$
dec mcudata
mov a,mcudata
xrl a,#0ffh
jnz goon2
mov mcudata,#9
goon2:mov a,mcudata
movc a,@a+dptr
mov p2,a
reti

dlykey: mov dly1,#250
dlylop2:mov dly2,#250
djnz dly2,$
djnz dly1,dlylop2
ret

sm: db 9Fh,25h,0Dh,99h,49h,41h,1Fh,01h,19h,03h
end

#include<reg51.h>
#define uchar unsigned char
char mcudat;
uchar sm[]={0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x19,0x03};
sbit s1=P3^2;
sbit s2=P3^4;
void ext0() interrupt 0
{
while(!s1);
mcudata--;
if(mcudata==-1)mcudata=9;
P2=sm[mcudata];
}
void dlykey();
{
uchar i,j;
for(i=0;i<125;i++)
for(j=0;j<125;j++);
}
main()
{
s1=1;
s2=1;
EA=1;
EX0=1;
IT0=1;
mcudat=0;
P2=sm[mcudat];
while(1)
{
while(1)
{
while(s2);
dlykey();
if(!s2)break;
}
mcudata++;
if(mcudata==10)mcudata=0;
P2=sm[mcudata];
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-14
:VOID DIS()
{INT X;
为(X = 250,X = 0,X - ;) {
P0 = 0x5B;
P2_0 = 0; ...... / DELAY();
P2_0 = 1;
P0 = 0X3F
P2_1 = 0;
DELAY();
P2_1 = 1;
P0 = 0X5B;
P2_2 = 0;
DELAY();
P2_2 = 1;
P0 = 0X6D;
P2_3 = 0;
DELAY()
P2_3 = 1;
}
}
VOID DELAY()
{INT X,Y;
(X = 25,X> 0 X - )

(Y = 2,Y> 0,Y - );}
第2个回答  2012-12-04
返回(FSUM);很长一段时间没有得到一个编译,但看代码,它应该是一个非常简单的循环,看看这本书应该可以解决。
第3个回答  2012-12-07
C语言程序到汇编语言简单,如果只倒挂理解的程序,自己重写。

相关了解……

你可能感兴趣的内容

大家正在搜

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