PIC10F200 编码/设置问题

问题描述 投票:0回答:2

我用什么

  1. Arduino Uno(作为电源)
  2. PicKit 5
  3. MPLAB X IDE 6.15
  4. PIC10F200

我所知道的:

  1. 某些引脚上的选项可以覆盖 TRIS 状态(我读过一些数据表,但来回跳动让我很累);
  2. 0b00001000 的含义(某种程度上)。

项目

我正在尝试为一个简单的项目对 PIC10F200 进行编程,基本上: GP1 是否有电流流入,根据该信息 GP0 要么打开 LED 要么保持关闭。

我已经使用此代码来检查引脚是否短路:

check code

我需要什么帮助

  • 由于我缺乏嵌入式知识,解释一些更基本的命令;
  • 可能电路搭建错误,建议选择。

所以在检查之后,这是我创建的代码(我也不明白发布代码时出了什么问题,所以......我很抱歉。):

code

Attempt of diagram

背景(如果你问自己为什么我这么不聪明......)

  • 缺乏电子知识;
  • 物理生疏;
  • 学习大学(电气工程 - 讽刺……你可能会说……);
  • 老师不是很聪明,也没有帮助(“你应该担心考试失败,而不是这个”);
  • 不能花额外的时间工作和赚钱(至少我会做一些富有成效的事情,这样可以帮助我生活?);
  • 无法花额外的时间进行研究或大量阅读(我每天会损失 5~6 小时的旅行时间 - 不,我无法观看 YouTube 或收听音频日志);
  • 大多数 YouTube 视频没有帮助(过时的又名:3 年前 - 组装/其他微控制器);
  • 没有开始学习汇编(而且编译器不再支持汇编语言?! - 我认为)。

尝试工作项目,没有工作项目。

[编辑]

#include <stdio.h>
#include <stdlib.h>
#include <PIC10F200.h>

// CONFIG
#pragma config WDTE = OFF 
#pragma config CP = OFF 
#pragma config MCLRE = OFF
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
#define _XTAL_FREQ 4000000

void main() {
  OPTION = 0b11011111;
  TRISGPIO = 0b00000010;
  GPIO = 0b00000000;
  while (1) {
    if (GP1 == '1') {
      GP0 = '0'; // Turn off the LED
    } else {
      GP0 = '1'; // Turn on the LED
    }
  }
} 
c embedded microcontroller mplab
2个回答
0
投票

GP1 == '1'
都是废话。

  • 你们真的有宏
    GP0
    /
    GP1
    提供位写入和读取吗?我对此表示怀疑。
  • '1'
    是字符文字(“ASCII”),相当于二进制 00110001,因此是无意义的。使用
    1

假设您有一个已声明的寄存器

GPIO
,那么您应该具有如下所示的位掩码:

#define GP0 (1u << 0)
#define GP1 (1u << 1)

或者更好地命名它们

GPIO_GP0
等以记录它们属于哪个寄存器。


读取寄存器则变为:

if((GPIO & GPIO_GP0) > 0)
...
if((GPIO & GPIO_GP1) > 0)

> 0
部分是必要的,因为当位屏蔽位0时,我们得到0x01或0x00。但是当位掩码位 1 时,我们得到 0x02 或 0x00。我们不会直接从寄存器中得到 1 或 0。


写入寄存器:

GPIO |= GPIO_GP0;  // set pin GP0 to 1
GPIO &= ~GPIO_GP0; // set pin GP0 to 0

所有这些都应该包含在平均按位运算符书籍/教程中。更多详细信息请参见:如何从固件访问硬件寄存器?


0
投票

主要错误是使用字符文字(带撇号)而不是数字文字(不带撇号)。

'1'
0x31
=
0x00110001
,以 ASCII 编码,但您想要
1

删除撇号:

    if (GP1 != 0) {
      GP0 = 0; // Turn off the LED
    } else {
      GP0 = 1; // Turn on the LED
    }

有关硬件和设置的附加说明:

引脚

GP1
不测量“是否有功率流入其中”,而是感测其上的电压。但除了“浮动”(开关打开)或“低”(开关关闭)之外,您不提供任何其他级别。最有可能的是,“浮动”由于其所带电荷而被感知为“低”。请注意,它可以感应任何其他电平,甚至可以捕获电源等电场。

有两种可能的解决方案:

  • 您将
    GPPU
    寄存器中的
    OPTION
    设置为
    0
    。这会启用内置弱上拉电阻。这使浮动引脚处于“高”电平。
  • 你加一个外部上拉电阻,几千欧的值就足够了。
© www.soinside.com 2019 - 2024. All rights reserved.