完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
首先,我用PIC16F86单片机开发了交流稳压器。我用7个抽头自动变压器电压加/减,所以我用7个继电器来改变抽头。一切工作正常,电压感应,负载电流感应,显示等。但在稳定(开关继电器)时,单片机不遵循程序。特别是C端口输出根据程序,所有继电器都要接通,但只有三接通,其他继电器总是断开。当我删除了整个代码和程序MCU,使所有继电器,然后这工作。首先我认为这是PIC的RMW问题,然后正如在论坛上建议的,我使用“影子”寄存器为PORT C输出赋值,但是这没有帮助。然后,我在数据表中看到“需要延迟来改变PORT位在同一PORT中的位置”,因此我延迟了每次100us的交换,但这同样没有帮助。也许我犯了一些编程错误。我正在使用的编译器是MikroC。下面是我的代码:请各位专家指导我。
|
|
相关推荐
7个回答
|
|
我同意这可能是“RMW”问题。这只是带有延迟的版本,没有迹象表明您试图在这里使用影子寄存器。您能寄出影子寄存器版本吗?我怀疑你没有正确地执行它。你可以通过使用16F1xxx芯片来避免所有的麻烦,以避免RMW。
|
|
|
|
在代码中,我使用了影子寄存器。请在代码开头的声明中查看。实际上,在结束时,与s一起使用的比特是各自的SIT的影子寄存器。我的开关继电器开/关方法在电压稳定程序中是正确的吗?
|
|
|
|
请参阅RMW及其解决方案以获得详细的解释和可能的C解决方案。您必须将整个端口隐藏为一个字节,然后在一次操作中将其复制到端口,而不是这种混乱:这意味着您将需要将sPORTC声明为无符号char,并且需要将其中的许多位定义为Mikro。C支持点位访问,就像未签名的CHAR变量是一个带有BITFEAR结构的联盟(例如SCORTC。B3)。当输出操作*ALL*必须*经过阴影时,为输出引脚定义直接端口***it名称绝对没有意义。OTHH输入操作必须使用实际端口。
|
|
|
|
嗨,伊恩。M,现在看起来更好,除了RC0,RC1总是关闭。这是我更新的代码:
|
|
|
|
我看不出代码是如何工作的。你永远不会复制你的影子寄存器到真正的端口。如果你一次写所有的8位,就不需要使用影子寄存器,除非你想在代码中的其他地方访问一个单独的位。
|
|
|
|
我看不出这有什么用。每当希望管脚更改生效时,您需要将PORTCS复制到PORTC,但是代码中没有PORTC=PORTCS;*.here*,除非在开关之前()。用于下面的位及其阴影并使用:,以实现阴影。在*每个引脚改变或一组引脚改变之后,执行:在您希望更改实际发生的点上。N.B。您在LCD处理代码中也有潜在的RMW问题——我不会为您排序,但是它必须DS正在做。为了高效率,如果您还没有订购PCB,您应该将4位LCD数据总线保持与驱动它的端口相同的位顺序,并将其置于端口的高位或低位,而不是在中间。
|
|
|
|
哦。谢谢你指点我的过错。现在它的工作正常,所有端口都正确地开/关。在之前的代码中,我以为只要将整个PORTCS复制到PORTC一次,就会改变引脚的状态,但这个想法是错误的,而且代码中还有一个错误是位T1CON.这里是更新的代码:
|
|
|
|
只有小组成员才能发言,加入小组>>
5237 浏览 9 评论
2027 浏览 8 评论
1950 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3202 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2253 浏览 5 评论
772浏览 1评论
662浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
590浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
672浏览 0评论
572浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 18:39 , Processed in 1.214882 second(s), Total 87, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号