找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2969|回复: 18
收起左侧

PIC单片机语句编译的问题?

[复制链接]
ID:72649 发表于 2023-2-19 20:59 | 显示全部楼层 |阅读模式
PIC16F里面的语句上面不能编译,下面可以编译,什么原因?
        else if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)为什么不能编译?

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

使用道具 举报

ID:384109 发表于 2023-2-19 22:13 | 显示全部楼层
两个是不同的语法,不同的指令,即使能编译通过,也是执行不同的功能,查查C语言的编程资料
回复

使用道具 举报

ID:883242 发表于 2023-2-19 22:20 | 显示全部楼层
上面那种写法即使能通过编译也不可能正常执行,有严重的逻辑问题,楼主回家查教材吧。
回复

使用道具 举报

ID:72649 发表于 2023-2-20 08:48 来自触屏版 | 显示全部楼层
人中狼 发表于 2023-2-19 22:13
两个是不同的语法,不同的指令,即使能编译通过,也是执行不同的功能,查查C语言的编程资料

        else if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)  在51编译器可以编译,但是在pic编译器不能编译,是什么原因
回复

使用道具 举报

ID:72649 发表于 2023-2-20 08:50 来自触屏版 | 显示全部楼层
Hephaestus 发表于 2023-2-19 22:20
上面那种写法即使能通过编译也不可能正常执行,有严重的逻辑问题,楼主回家查教材吧。

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

使用道具 举报

ID:69038 发表于 2023-2-20 09:17 | 显示全部楼层
hjx5548 发表于 2023-2-20 08:50
else if(L_KEY1==0 && M_KEY1==1 && H_KEY1 ==1)这样就可以编译了
但是在51单片机可以编译

编译器只是对你代码进行语法过行校验合不合法,对你的逻辑是否合理就不管不顾了。
回复

使用道具 举报

ID:879348 发表于 2023-2-20 11:50 | 显示全部楼层
一个&是位操作,和&&是2回事,对于C语言没有规定行不行,报错是编译器决定是否报这个错误
回复

使用道具 举报

ID:72649 发表于 2023-2-20 14:47 来自触屏版 | 显示全部楼层
wufa1986 发表于 2023-2-20 11:50
一个&是位操作,和&&是2回事,对于C语言没有规定行不行,报错是编译器决定是否报这个错误

我把代码发出来给你看看,看看哪里出了问题
回复

使用道具 举报

ID:72649 发表于 2023-2-20 15:15 | 显示全部楼层
hjx5548 发表于 2023-2-20 14:47
我把代码发出来给你看看,看看哪里出了问题
http://www.51hei.com/bbs/dpj-226936-1.html
回复

使用道具 举报

ID:72649 发表于 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)
回复

使用道具 举报

ID:213173 发表于 2023-2-20 16:46 | 显示全部楼层
hjx5548 发表于 2023-2-20 14:47
我把代码发出来给你看看,看看哪里出了问题

&是位运算符,&&是逻辑运算符,差之毫厘,谬以千里。
回复

使用道具 举报

ID:72649 发表于 2023-2-20 23:53 来自触屏版 | 显示全部楼层
wulin 发表于 2023-2-20 16:46
&是位运算符,&&是逻辑运算符,差之毫厘,谬以千里。

两个运算符我知道,我现在用的是位运算符,想要实现代码的功能,但是就是不能编译。
回复

使用道具 举报

ID:1063136 发表于 2023-2-21 11:13 | 显示全部楼层
不熟悉优先级的话可以用括号
回复

使用道具 举报

ID:962286 发表于 2023-2-21 11:38 | 显示全部楼层
hjx5548 发表于 2023-2-20 23:53
两个运算符我知道,我现在用的是位运算符,想要实现代码的功能,但是就是不能编译。

你是想要判断按键L_KEY1有按下同时M_KEY1和H_KEY1无按下吗?
回复

使用道具 举报

ID:72649 发表于 2023-2-24 05:37 来自触屏版 | 显示全部楼层
wufa1986 发表于 2023-2-20 11:50
一个&是位操作,和&&是2回事,对于C语言没有规定行不行,报错是编译器决定是否报这个错误

MPLAB-IDE编译器
回复

使用道具 举报

ID:72649 发表于 2023-2-24 05:38 来自触屏版 | 显示全部楼层
MCU_FANS 发表于 2023-2-21 11:38
你是想要判断按键L_KEY1有按下同时M_KEY1和H_KEY1无按下吗?

满足三个开关后,才能执行下面的功能。不是按钮,是开关。
回复

使用道具 举报

ID:962286 发表于 2023-2-24 15:03 | 显示全部楼层
hjx5548 发表于 2023-2-24 05:38
满足三个开关后,才能执行下面的功能。不是按钮,是开关。

那你应该用 && 而不是用 & 。
回复

使用道具 举报

ID:72649 发表于 2023-2-24 18:18 来自触屏版 | 显示全部楼层
MCU_FANS 发表于 2023-2-24 15:03
那你应该用 && 而不是用 & 。

用&&功能不能实现
回复

使用道具 举报

ID:1034262 发表于 2023-2-24 18:45 | 显示全部楼层
这种情况一定要多加括号。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表