c52单片机c语言编程新手,下面是我编写的程序,为什么不会一直循环?
发布网友
发布时间:2023-07-25 23:42
我来回答
共3个回答
热心网友
时间:2024-11-14 17:54
猜想:你可能想通过P1口看程序运行的现象,但是失败了。
分析:程序是一直在循环,但是由于程序问题,输出看不到变化。
原理:P1口读入、修改、重写是有风险的,因为读入的值不是寄存器的值,而是端口的值。
而这个值是不定的。
解决:尽可能不要采取端口读入、修改、重写,而采用端口缓冲方法。即准备变量p1val,
读入、修改p1val,再往端口写入p1val
示例:
void main ()
{
unsigned char i, p1val;
while(1)
{
p1val=0xfe;
for (i=0; i<8; ++i)
{
delay (50000);
P1=p1val;
p1val <<= 1;
p1val |= 1;
}
}
}追问我知道,但是为什么如果把p1val=0xfe 移动到while上面不行吗,while(1)本身不就是自己循环吗?为什么要把p1val=0xfe移动到while里面来引导for?
追答当一圈跑完后,p1val就是0xff了,然后就看不到走马灯了,所以p1val必须重新赋值。
热心网友
时间:2024-11-14 17:55
#include <reg52.h>
void delay (unsigned int t)
{
while (--t);
}
void main ()
{
unsigned char i;
P1=0xfe;
while(1)
{
P1=0xfe;//
for (i=0;i<8;i++)
{
delay (50000);
P1<<=1;
P1=P1|0x01;
}
}
}
追问为什么加多一个P1=0xfe就行了?不加的话,while(1)不是一直循环的吗?还有delay()里面填的数字,怎么算多少秒?
原来不加while函数也行。就是把你那个程序的while(1){}和上面的P1=0xfe去掉
热心网友
时间:2024-11-14 17:55
while (--t);