首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自PIC18芯片的控制继电器

来自PIC18芯片的控制继电器
EN

Stack Overflow用户
提问于 2016-09-04 15:01:47
回答 3查看 119关注 0票数 0

我有一个PIC18F24K20微芯片,想要控制继电器。我的RasPI在GPIO上运行得很好,但我无法让它在我的微芯片上工作。

我的测试程序是:

代码语言:javascript
复制
#include <xc.h>

#define R1          LATBbits.LATB0
#define R1_TRIS     TRISBbits.RB0

#define R2          LATBbits.LATB1
#define R2_TRIS     TRISBbits.RB1

void main(void) {

    R1_TRIS = 0;
    R2_TRIS = 0;

    R1 = 1;
    R2 = 0;

    return;
}

我做错什么了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-06 10:01:38

  1. 替换return;

通过以下方式:

代码语言:javascript
复制
while(1)
{
   ClrWdt();
}
  1. 根据数据表,RB0和RB1有几个模块连接到这些引脚上,因此您应该验证它们是否关闭:模拟、ECCP、比较器。顺便问一下,为什么要用两个引脚来控制一个继电器?

3.您可能需要添加驱动程序才能操作继电器。

根据数据表,添加以下初始化代码:

代码语言:javascript
复制
CCP1CON=0;
CCP2CON=0;
ADCON0=0;
CM1CON0=0;
CM2CON0=0;

另外,配置位上的PBADEN位应该是零。

票数 0
EN

Stack Overflow用户

发布于 2016-09-04 16:47:02

在嵌入式PIC处理器中,主函数永远不应该返回。在某些实现中,它会导致软件重置,这将导致您的引脚回到高阻抗模式。尝试添加while (1);在主目录末尾添加。

票数 0
EN

Stack Overflow用户

发布于 2016-09-06 08:34:22

检查使用的引脚是否具有其他功能。典型的缺点是引脚作为模拟引脚加倍,默认情况下是启用的。

通过在数据表中查找它们对应的引脚来禁用它们,并使用如下代码禁用它们

代码语言:javascript
复制
  ANSEL.ANS0 = 0;  
  ANSEL.ANS1 = 0;

如果启用了看门狗功能,也可能需要添加

代码语言:javascript
复制
  ClrWdt(); 

(这是Mathieu的一个很好的建议)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39318278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档