标题: PIC单片机语句编译的问题? [打印本页]

作者: hjx5548    时间: 2023-2-19 20:59
标题: PIC单片机语句编译的问题?
PIC16F里面的语句上面不能编译,下面可以编译,什么原因?
        else if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)为什么不能编译?

        else if(L_KEY1==0 && M_KEY1==1 && H_KEY1 ==1)这样就可以编译了
但是在51单片机可以编译

作者: 人中狼    时间: 2023-2-19 22:13
两个是不同的语法,不同的指令,即使能编译通过,也是执行不同的功能,查查C语言的编程资料
作者: Hephaestus    时间: 2023-2-19 22:20
上面那种写法即使能通过编译也不可能正常执行,有严重的逻辑问题,楼主回家查教材吧。
作者: hjx5548    时间: 2023-2-20 08:48
人中狼 发表于 2023-2-19 22:13
两个是不同的语法,不同的指令,即使能编译通过,也是执行不同的功能,查查C语言的编程资料

        else if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)  在51编译器可以编译,但是在pic编译器不能编译,是什么原因
作者: hjx5548    时间: 2023-2-20 08:50
Hephaestus 发表于 2023-2-19 22:20
上面那种写法即使能通过编译也不可能正常执行,有严重的逻辑问题,楼主回家查教材吧。

else if(L_KEY1==0 && M_KEY1==1 && H_KEY1 ==1)这样就可以编译了
但是在51单片机可以编译
作者: zhuls    时间: 2023-2-20 09:17
hjx5548 发表于 2023-2-20 08:50
else if(L_KEY1==0 && M_KEY1==1 && H_KEY1 ==1)这样就可以编译了
但是在51单片机可以编译

编译器只是对你代码进行语法过行校验合不合法,对你的逻辑是否合理就不管不顾了。
作者: wufa1986    时间: 2023-2-20 11:50
一个&是位操作,和&&是2回事,对于C语言没有规定行不行,报错是编译器决定是否报这个错误
作者: hjx5548    时间: 2023-2-20 14:47
wufa1986 发表于 2023-2-20 11:50
一个&是位操作,和&&是2回事,对于C语言没有规定行不行,报错是编译器决定是否报这个错误

我把代码发出来给你看看,看看哪里出了问题
作者: hjx5548    时间: 2023-2-20 15:15
hjx5548 发表于 2023-2-20 14:47
我把代码发出来给你看看,看看哪里出了问题
http://www.51hei.com/bbs/dpj-226936-1.html

作者: hjx5548    时间: 2023-2-20 16:06
hjx5548 发表于 2023-2-20 14:47
我把代码发出来给你看看,看看哪里出了问题

Serial number: HCPICP-111111 (PRO)
Error   [712] C:\Users\Administrator\Desktop\SH180508A.PCB\daima\guolu.c.c; 107. can't generate code for this expression
Error   [712] C:\Users\Administrator\Desktop\SH180508A.PCB\daima\guolu.c.c; 119. can't generate code for this expression
Error   [712] C:\Users\Administrator\Desktop\SH180508A.PCB\daima\guolu.c.c; 129. can't generate code for this expression
Advisory[1395] notable code sequence candidate suitable for compiler validation suite detected (116)
作者: wulin    时间: 2023-2-20 16:46
hjx5548 发表于 2023-2-20 14:47
我把代码发出来给你看看,看看哪里出了问题

&是位运算符,&&是逻辑运算符,差之毫厘,谬以千里。
作者: hjx5548    时间: 2023-2-20 23:53
wulin 发表于 2023-2-20 16:46
&是位运算符,&&是逻辑运算符,差之毫厘,谬以千里。

两个运算符我知道,我现在用的是位运算符,想要实现代码的功能,但是就是不能编译。
作者: 2283747626    时间: 2023-2-21 11:13
不熟悉优先级的话可以用括号
作者: MCU_FANS    时间: 2023-2-21 11:38
hjx5548 发表于 2023-2-20 23:53
两个运算符我知道,我现在用的是位运算符,想要实现代码的功能,但是就是不能编译。

你是想要判断按键L_KEY1有按下同时M_KEY1和H_KEY1无按下吗?
作者: hjx5548    时间: 2023-2-24 05:37
wufa1986 发表于 2023-2-20 11:50
一个&是位操作,和&&是2回事,对于C语言没有规定行不行,报错是编译器决定是否报这个错误

MPLAB-IDE编译器
作者: hjx5548    时间: 2023-2-24 05:38
MCU_FANS 发表于 2023-2-21 11:38
你是想要判断按键L_KEY1有按下同时M_KEY1和H_KEY1无按下吗?

满足三个开关后,才能执行下面的功能。不是按钮,是开关。
作者: MCU_FANS    时间: 2023-2-24 15:03
hjx5548 发表于 2023-2-24 05:38
满足三个开关后,才能执行下面的功能。不是按钮,是开关。

那你应该用 && 而不是用 & 。
作者: hjx5548    时间: 2023-2-24 18:18
MCU_FANS 发表于 2023-2-24 15:03
那你应该用 && 而不是用 & 。

用&&功能不能实现
作者: coody_sz    时间: 2023-2-24 18:45
这种情况一定要多加括号。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1