This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我有关于 MSP430代码的一些问题、我使用 p1.0连接了红外传感器、所以我只想确定 p1.0是高电平还是低电平、然后让 p1.7生成不同的占空比 PWM、即高电 平下为7.5%、低电平下为13%。
但结果是、即使传感器产生0和1个输出、P1.7也只产生7.5%的 PWM。
这是我的代码、
#include
空 main (void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器
//将 P1.0配置为启用下拉电阻的输入模式
P1DIR &&~BIT0; // P1.0输入模式
P1REN |= BIT0; // P1.0上拉/下拉电阻已启用
P1OUT &=~Ω BIT0; // P1.0下拉电阻器被启用
//将 P1.7配置为输出模式
P1DIR |= BIT7; // P1.7输出模式
P1SEL |= BIT7;
//设置 Timer_A0
TA0CCR0 = 20000; //设置 Timer_A0上限值
TA0CTL = TASSEL__SMCLK + MC__UP + TACLR; //选择 SMCLK 作为时钟源、向上计数模式、清除 Timer_A0计数器
TA0CCTL1 = OUTMOD_7; //设置 PWM 的输出模式7
while (1)
{
IF (P1IN 和 BIT0)// P1.0高输入状态
{
TA0CCR1 = 2600;// 13%占空比
}
否则// P1.0低输入状态
{
TA0CCR1 = 1600;// 8%占空比
}
}
}
谢谢
1)如果您的传感器是 TSOP38型解调器、我建议您不要设置 REN 下拉。 其中许多/大多数通过内部上拉电 阻器提供高电平、而您的 REN 下拉电阻器(通常为~20k)正在与之对抗、并且可能取得胜利。 此外、IDLE 为高电平、因此如果您需要任何 REN 上拉电阻器、
2) 2)通常、设置占空比不像每个 PWM 周期那样频繁。 红外协议通常会生成1ms 至2ms 范围内的脉冲、因此您将在20ms 周期内看到许多转换;PWM 周期可能大约应为1ms。
3) 3)如果您使用的是 Launchpad、P1.0连接到 LED1 (JP1)和反向通道 UART (J101/TXD)、这两个连接都可能会遇到问题。 从长远来看、您可能不需要 P1.0、而是需要能够进行计时器捕获的引脚、例如 P8.3是 TA1.CCI2A、因此现在可能是一个不错的时机。
您好、非常感谢您的答复、我只是想知道如果我拒绝内部下拉电阻器、应该怎么做。
此外、当我连接到 p1.0时、红外传感器可以控制 LED1、即某些东西会封锁光线、关闭光线、不进行任何开启。 这意味着红外传感器的输出可以被 MSP430接收。
我只是想让 p1.0能够识别何时为高电平、p1.7能够生成8%的占空比 PWM、而当为低电平时、p1.7能够生成13%的 PWM
您在使用什么传感器?
此外、对于 FR 系列器件、您需要添加:
> PM5CTL0 &=~LOCKLPM5; //启用 GPIO 设置
这是红外传感器
现在的问题是、p1.7仅生成一个 PWM、如果我设置上拉电阻器、p1.0始终为高电平、P1.7生成7.5%PWM、即使我不使用上拉和下拉电阻器、p1.7也仅生成13%的 PWM
原来我在抽屉里有一个类似的装置。 我尝试了您的代码(+LOCKLPM5修复)、并在移除 JP1后、我得到了一致的结果。 安装 JP1后、当 OUT 为高电平时、它读数约为1.8V (不确定逻辑电平)、大概由 LED1下拉。 上拉/下拉似乎没有什么不同,但我怀疑你不希望他们在任何情况下。
您是否在移除 JP1的情况下尝试过实验?
是的、移除 JP1后问题已解决
非常感谢