关于keilc编写单片机程序问题
请问哪位高手告诉我一下第一个程序和第二个有什么不同吗?为什么第一个程序运行不好使而第二个就好使呢?本程序的目的是通过p3口读出8路开关的状态,通过p0口送数码管显示。1....
请问哪位高手告诉我一下第一个程序和第二个有什么不同吗?为什么第一个程序运行不好使而第二个就好使呢?本程序的目的是通过p3口读出8路开关的状态,通过p0口送数码管显示。
1.
#include <reg51.h>
tab[]={0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20};
void delay(void);
main()
{int i;
P3=0xfF;
while(1)
for(i=0;i<=7;i++)
{
if(P3==~(0x01<<i))
{P0=tab[i];
delay();
break;}
}
}
void delay(void)
{int i;
for(i=0;i<=600;i++);
}
2.#include <reg51.h>
tab[]={0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20};
void delay(void);
main()
{int i;
P3=0xfF;
while(1)
for(i=0;i<=7;i++)
{ P1=~(0x01<<i);
if(P3==P1)
{P0=tab[i];
delay();
break;}
}
}
void delay(void)
{int i;
for(i=0;i<=600;i++);
}
先声明一下,第一个程序运行没有反应,第二个运行能得到满意答案,而且我认为第二个程序中P1只是一个中间变量,和一般的变量没有什么区别,在编程中相当于只借用了一下0x90这个地址,我感觉和扫没扫描没有关系。还有在程序1中多加一个括号我也试过了,不好使。望各位高手继续帮忙研究一下,谢谢! 展开
1.
#include <reg51.h>
tab[]={0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20};
void delay(void);
main()
{int i;
P3=0xfF;
while(1)
for(i=0;i<=7;i++)
{
if(P3==~(0x01<<i))
{P0=tab[i];
delay();
break;}
}
}
void delay(void)
{int i;
for(i=0;i<=600;i++);
}
2.#include <reg51.h>
tab[]={0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20};
void delay(void);
main()
{int i;
P3=0xfF;
while(1)
for(i=0;i<=7;i++)
{ P1=~(0x01<<i);
if(P3==P1)
{P0=tab[i];
delay();
break;}
}
}
void delay(void)
{int i;
for(i=0;i<=600;i++);
}
先声明一下,第一个程序运行没有反应,第二个运行能得到满意答案,而且我认为第二个程序中P1只是一个中间变量,和一般的变量没有什么区别,在编程中相当于只借用了一下0x90这个地址,我感觉和扫没扫描没有关系。还有在程序1中多加一个括号我也试过了,不好使。望各位高手继续帮忙研究一下,谢谢! 展开
4个回答
展开全部
先指出不同之处:
程序1:
。。。
{
if(P3==~(0x01<<i))
。。。
程序2:
。。。
{P1=~(0x01<<i);
if(P3==P1)
。。。
以上,是两个程序的不同之处。
程序2的错误在于不能用P1作为中转,可以用另外一个变量作为中转,但P1却不行。
为什么呢?我来解释当程序执行到程序2那两行语句时,单片机做了些什么。
上面那行,给P1赋值
紧接着,用P2口的状态与P1口的状态进行比较,此时,P1口的8个脚是当做输入点使用,外部的电平直接影响P1口的值,而并非上面那句赋给P1的值。
程序1:
。。。
{
if(P3==~(0x01<<i))
。。。
程序2:
。。。
{P1=~(0x01<<i);
if(P3==P1)
。。。
以上,是两个程序的不同之处。
程序2的错误在于不能用P1作为中转,可以用另外一个变量作为中转,但P1却不行。
为什么呢?我来解释当程序执行到程序2那两行语句时,单片机做了些什么。
上面那行,给P1赋值
紧接着,用P2口的状态与P1口的状态进行比较,此时,P1口的8个脚是当做输入点使用,外部的电平直接影响P1口的值,而并非上面那句赋给P1的值。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你把if(P3==~(0x01<<i))
改成
if(P3==(~(0x01<<i)))
试试。
改成
if(P3==(~(0x01<<i)))
试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询