单片机--请高手看看我这程序为什么总有问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 10:17:30
#include <AT89X51.H>
#include<stdio.h>
sbit K1=P3^0;
sbit L1=P1^0;
sbit K2=P3^1;
sbit L2=P1^1;
void main(void)
{
unsigned int f=1;
while(f=1)
{
if(K1==1) {L1=1;} //开关继电器接通,电机正转
if(K2==1){L1=0;f=0;} //磁性开关接通,开关继电器断开,电机停止转动
}
L2=1;//中间继电器闭合,接通反向电路
unsigned int e=1;
while(e=1)
{
L1=1;//开关继电器接通,电路开始反转
if(K2==1){L1=0;e=0;}
}
}

问题是:电机测试3.C(10): warning C276: constant in condition expression
电机测试3.C(16): error C141: syntax error near 'unsigned'
电机测试3.C(16): error C202: 'e': undefined identifier
电机测试3.C(17): error C202: 'e': undefined identifier
电机测试3.C(20): error C202: 'e': undefined identifier

谢谢~~~如果有可能顺便帮我优化一下~~~

改好了。
#include <AT89X51.H>
#include<stdio.h>
sbit K1=P3^0;
sbit L1=P1^0;
sbit K2=P3^1;
sbit L2=P1^1;

void main(void)
{
unsigned int f = 1;
unsigned int e = 1;
while(f == 1) {
if(K1 == 1) {L1 = 1;} //开关继电器接通,电机正转
if(K2 == 1) {L1 = 0; f = 0;} //磁性开关接通,开关继电器断开,电机停止转动
}
L2 = 1;//中间继电器闭合,接通反向电路
while(e == 1) {
L1 = 1;//开关继电器接通,电路开始反转
if(K2 == 1) {L1 = 0; e = 0;}
}
}

你这个程序写的不好。
1.#include<stdio.h>是包含C语言输入输出函数的头文件,对于单片机而言,加不加区别不大的。
2.void main()本生就是void 型函数,所以不必写成void main(void)形式。顺便说一句,其实在标准的C/C++里面是没有void main()这种写法的,很多人都喜欢用这种写法,包括很多教科书也是这么写的。这样写尽管有的编译器也能通过,但是这不是标准的C/C++。
3.你要写成死循环,直接写成while(1)就行了,不必另外定义变量。因为这不是写PC的操作系统,单片机的内存(ROM)很有限。用C写程序的时候要多注意代码的长度。对于小的程序问题不大,要是一个复杂的系统,要是ROM不够岂不是很麻烦。
4.我帮你改了一下程序,那你在编译一下试试。不过你这里写两个死循环,里面有没有continue或者break退出(C语言写程序一般不用goto语句的,因为这样会打乱程序次序。)所以我看下来好像只能执行一个循环,后面一个根本执行不了,你接一下硬件试试