完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
大家好,问题:我如何使用C编译器和MPLAB代码配置器实现以下组合逻辑函数?RB0=(RA0)(RA1)(!RA2)RB1 =(!)RA2)(!RA1+[(RA1)]背景:我绝对是个PIC新手,不过是个电气工程师,我只是想用最可靠的方式实现一些简单的代码。这是我第一次涉足数字电子学,我使用PIC16F1938和28引脚演示板…一个出发的好地方。我对体系结构和指令集还不够熟悉,无法对底层PIC命令执行任何有用的操作,所以我使用C编译器在MPLAB IDE中创建代码。如果可能的话,我希望尽可能地保持高水平。所有解释过的,我试图将上面的公式实现为一系列嵌套的if-else语句,这些语句非常慢,并且逻辑没有按照我希望的方式工作。实际工作的唯一部分就是!RA2我甚至把时钟速度拨到16兆赫,但我可以判断出代码很慢,只是基于它对输入电压变化的响应。一般来说,我认为这可能是在微控制器中实现逻辑的一种危险方式。请帮助我朝正确的方向走,用正确的方法来实现这个逻辑块。非常感谢。戴夫
|
|
相关推荐
19个回答
|
|
|
如果我正确地阅读了你的公式,你所追求的是这样的:RB0=(RA0)(RA1)(!)RA2 RAF RA1 RA1 RA2 RB0 f f f f f f f f f f f f f t f f f f t f f t f f t t f t t t ft看起来正确吗?如果是这样,那么也许你实现了这样的IF树:RB0= false;if(RA0){if(RA1){if()!RA2){RB0= TRUE;}}可能?最好在if树中设置一个临时变量,然后将RB0设置为该临时变量,这样RB0就不会改变,除非在评估输入之后。同样,假设是这种情况,可以这样写:RB0=(RA0&&RA1)&&(!在对你的第二个公式做同样的事情之后,我得到一个这样的线://RB1=(!)RA2)(!RA1+[(RA1)]RA1)Rb1=!RA2 & &;RA1+(RA1和放大器);我想是RA0。很长一段时间以来,我做组合数学。注意:我使用了和(&&;)运算符,因为我更舒服。假设所有的变量都定义为bool类型,您可能只需要用乘法和加法直接翻译函数即可。如果我假设有错误,请随时纠正我,我会试着调整我的答案。
|
|
|
|
|
|
你有C参考吗?RB0=(RA0)*(RA1)*(!)RA2)和位和&&逻辑和Bitwoise或逻辑或!不是
|
|
|
|
|
|
+与OR不一样。试试这个:RB1=!RA2 & &;RA1*(RA1和放大器);戴夫;Ra0)
|
|
|
|
|
|
我喜欢这个项目
|
|
|
|
|
|
谢谢。时间太长了。我误解了第二个公式:RB1=(!)RA2)(!RA1+[(RA1)]Ra1)=(!)RA2)(!RA1+[(RA1)]R0)我同意,*碎片:+不是和他一样。我倾向于把+看作二进制加法,而忽略任何进位。也许它更接近于把+视为异或?但是这个公式需要的是+,不是,或者,让我看看这是否更接近,RB1=!RA2 & &;RA1 ^((RA1)和放大器;因此,表看起来更像这样:Ra0 Ra1-Ra2 RB1 f f f t t f ft t f t t f f f f FT f t FT f f tt f t t t fRB1=(!)RA2)(!RA1+[(RA1)]RA0 RA1 RA2!RA2!RA1!RA0(RA1)(!RA0)(!RA1+[(RA1)](RA0)])RB1 F F T T T F T T T T T T F T T T T T F T T T T T FT T T T T T F FT T T T F F F FT F F FT F FT F T F T FT F T FT F T T F FT F T T F FT T T F T F FT T T F FT T T F FT T F FT T F FT T T F FT T F FT T F FT T F FT T F FT T F FT T F FT T T T我记得(RA0)(RA1)==RA0*RA1==RA0&&RA1RA0+RA1==RA0异或RA1NOTE:抱歉,结尾的桌子很大。我在组合代数上真的很慢,除非我看到一个列所有的术语,我只是继续猜测自己。;)
|
|
|
|
|
|
戴夫,如果你真正想要的是组合逻辑,那么为什么不使用组合逻辑外设(AKA CLC)的一部分呢?有许多装置可供选择,例如PIC16F1718。MCC提供了一种配置它的简单方法,并且没有代码执行延迟。-WB-
|
|
|
|
|
|
在布尔代数中,“*”表示“+”,表示“+”。所以,编辑和通知;RA1+[(RA1)]“RA0”)是NAND操作,不管“+”是用OR、XOR或1位加法来计算。
|
|
|
|
|
|
简单快捷,灵活你可以用三个输入的任何函数来填充查找,我没有算出我给出的数字是随机的。所有的LATB都被写入,如果它是一个问题,则需要更多的代码来修复。
|
|
|
|
|
|
除非你能容忍可数微秒的延迟,否则CLC显然是可行的方法。对于这样简单的事情,实际的硬件可能更有效。
|
|
|
|
|
|
哇,谢谢你这么周到的回答!我会尝试一下上面的一些建议。GP可能是正确的——可能是我需要使用CLC。请注意:
|
|
|
|
|
|
…或者7400个门依赖于你所需要的传播延迟。
|
|
|
|
|
|
嗯,我有机会尝试一下,这就是我学到的:1。如果你对速度的要求不高,我的要求不高,你可以用C.MPLAB代码配置器实现布尔运算。事实上,时钟最初被拨到16MHz,现在我运行在500千赫没有问题。2。我相信戴夫Aka FractMyf赢得公式竞赛(负5分缺少括号)。这里有两行代码:(1){RB0=!RA2&AM&RAM1&AM&RA0;RB1=!RA2 & &;RA1*(RA1和放大器);Ra0);} 3。正确地接口I/O端口是必不可少的。用我的原型板,我想我只是把VDD直接输入到输入引脚,得到一些有弹性的值。最好的方法是使用上拉电阻W/open收集器为您的信号输入(逻辑高收集器打开)。我用10K电阻器绑在一个外部5V调节器上,通过开关/晶体管与PIC接地负连接。这样,当你有逻辑高的时候,它就保持不变。没有它,I/OR逻辑似乎是有缺陷的。这确实是关于管理输入信号的,现在电路按计划工作。我们将把CLC的讨论留到下一天。谢谢你的建议,我很高兴能参加这个论坛。干杯!戴夫
|
|
|
|
|
|
标准是从公式到C代码直接翻译的容易吗?否则,我相信费比菲的方法更有效。顺便说一下,总是写输出到LATX以避免臭名昭著的RMW问题。
|
|
|
|
|
|
有几个问题必须用简单的方法解决,可能导致故障。RMW及其解决方案-读-修改-写效应倾向于损坏同一端口上的其他输出引脚,如果你写到PORT位,而不是使用LAT位。解决方法是显而易见的:用相应的LAT位替换任何赋值运算符LHS上的PORT位。输入管脚RA0-2不是同时采样的,而是多次读取的。这会导致逻辑输出出现故障。例如语句RB1=!RA2 & &;RA1*(RA1和放大器);如果RA1在其读取的两次之间改变状态,则可以给出不正确的结果。同样,修复是相当明显的:将PORTA读入一个变量中,然后引用这两个表达式中的位。如果您打算在单个位上坚持使用C逻辑表达式,那么这两个问题都需要修复。
|
|
|
|
|
|
1and0,谢谢你提醒大家注意Fluby.(Fluby.)的回应——我对这个论坛界面不是很熟悉,而且我似乎错过了那个评论。Ian,我理解你们提出的问题,非常感谢你们让我意识到这一点。我将尝试使用LAT位来实现代码,看看它留给我们的地方。再次感谢您的帮助!
|
|
|
|
|
|
这里是Fluby.(Fluby.)的方法,它有正确的LUT值:输入管脚同时采样,输出管脚同时锁存。
|
|
|
|
|
|
请注意,如果LATB0或LATB1在执行期间可能被更改,那么这个窗口将失败。这听起来不太可能(因为我假设这些位被这段代码所拥有),但是如果任何一个位可以被中断或任务开关更改,那么就用中断禁用/i括号来保护最后一行。NTurrt恢复码
|
|
|
|
|
|
我花了一分钟认识查找表中的值…我的真相表中的列在你提供的桌子的对面,右边当然是LSB。我的错误。不管怎样,我试过代码,效果很好。重新排列查找表中的术语,我可以实现新的功能和操作模式。这确实是一种实现逻辑的非常聪明的方法,对于我来说,可以工作得很好。我们还消除了读写错误的风险,并获得了同步读数。感谢一百万人谁贡献了这个线程。我觉得自己就像一个刚发现火的穴居人。我很高兴我找到了这个论坛!问候,戴夫
|
|
|
|
|
|
等待,直到你使用CLC和PPSS。你会觉得你发现了氧乙炔焊接。欢迎来到Forums.GP。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475 浏览 0 评论
5795 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1125浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1098浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 01:00 , Processed in 3.552571 second(s), Total 112, Slave 95 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1513