Y_G_G 发表于 2020-3-18 21:05 你好 搞明白了,重新弄了一个 看清楚思路了 。 谢谢 |
time++; if((key==0)&&(time>40)); //如果按键时间超过2秒且键未释放,变量+1 if(key==1)time=0; //如果键释放,时间复位 你这个是进入中断之后,变量就先+1 后一个语句没有作用,条件成不成立都是执行下一条语句的 不要在函数外面声明变量,这样编译器会生成一大堆无用的汇编代码出来的 |
因为C每个人的写法不一样(自己感觉看起来没有汇编的好,具有统一性) 所以想学汇编。 而被这个卡住了 没有明白是这个语句用汇编是怎么写的 所以请教大神帮解答下。 |
Y_G_G 发表于 2020-3-17 13:55 你好帮看下谢谢 #include<reg51.h> #define uint unsigned int #define uchar unsigned char uint v=0,time=0; sbit key=P1^0; void t0isr() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; time++; if((key==0)&&(time>40)); //如果按键时间超过2秒且键未释放,变量+1 if(key==1)time=0; //如果键释放,时间复位 } main() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; ET0=1; EA=1; while(1); } |
比较90.0(应该是p3.6引脚不为0)跳转到00B3行,即下面3行处,不进行time清零操作 |
这样我看不明白,你把C文件上传,我试一下 |
Y_G_G 发表于 2020-3-14 15:30 好的 试一下看看 谢谢 |
只要你的程序可以正常编译,在KEIL仿真一下,会有相应的汇编代码给你看的 |
while((p3.6==0)&&((time++)<500)) |