新手求教:keil c51与汇编混合编程

94lihu 发布于 2012/03/18 16:34
阅读 412
收藏 1
//流水灯,混合编译时能编译过去,但是有错误,无法顺利运行

//LED流水灯,K1总控制,流水灯由上而下运动,K2关闭,K3控制流水灯由上而下运动,
K4控制流水灯由下而上运动。
#include<reg51.h>
char led[]={0x01,0x02,0x04,0x08};

void delay(unsigned int time){ 
unsigned int j = 0;
for(;time>0;time--)
    for(j=0;j<125;j++);
}
char key(); //按键处理(汇编),在.asm文件中
void main(){ 
     bit dir=0,run=0;
     char i;
     while(1){ 
switch (key()){
case 0x0e:run=1;break;
case 0x0d:run=0;break;
case 0x0b:dir=1;break;
case 0x07:dir=0;break;
}
if (run) 
if(dir)   //自上而下流动
for(i=0;i<=3;i++){
P2=led[i]; 
delay(200);
}
else   //自下而上流动
for(i=4;i>=1;i--){
P2=led[i - 1]; 
delay(200);
}
   else P2=0; //灯全灭
}
}

;按键处理函数(汇编)
PUBLIC   KEY
DE        SEGMENT CODE
RSEG   DE

KEY:   MOV A,P0
ANL A,#0FH
MOV B,A
CJNE A,#0FH,KEYOUT
MOV R7,#0
KEYOUT: MOV R7,B
      RET
      END

加载中
0
周翼翼
周翼翼

虽然我未必能解决你的问题,但是我强烈建议你把怎么个错误法写出来.我看过一堆帖子,都说有错误有错误,但是就是不说怎么错.什么错误都不说,人家怎么帮助你?!有什么现象?在什么情况下出现的?......

有一个思路,switch (key()),key是一段汇编代码,你switch它是想怎么样?把key的结果取出来,再switch.

0
中山野鬼
中山野鬼

楼主这个代码写的 。。。。。说句客观实话啊,如果是我手下的,直接让助理拖到走廊,弹小JJ到虚脱为止。

我和楼上一个观点。你也不说什么错 。

你把 if (run) if (dir)这段 用{ } 补全。目前看不出你 是由于外部中断处理不全导致的。
0
jingshishengxu
jingshishengxu
没必要用汇编
0
9
94lihu

谢谢各位,意见非常中肯,刚刚学习,好多东西都还不懂。问题已解决,再次谢谢各位。

返回顶部
顶部