主题中讨论的其他器件:MSP430G2231
尊敬的所有人:
我是一名新的微控制器编程器、我发现理解微控制器寄存器的工作方式以及如何知道在使用计时器 A0时必须选择哪个引脚和 PINSEL 让我感到非常困惑、 是否有一个表显示了引脚名称及其功能之间的关系、用户指南令我感到困惑、有很多表包含大量引脚和数字、因此我的第一个问题是详细参考、并提供如何使用此微控制器的示例、 我的第二个问题是关于我的代码,我想 通过 ADC 读取9个模拟值,然后我保存了它,并被其他数字(出于某种原因)占用,将它用作9 PWM 的占空比。 此代码的主要目标是读取模拟值、对其进行处理、然后将其转换回模拟 throgh PWM+ RC 滤波器、我不确定我所做的是正确的、我只需读取一个值即可使代码保持简单、以便进行测试:
#include
//#pragma PERSISTENT (FRAM_DATA)
//#include
#define ACLK 0x0100 //计时器 ACLK 源
#define up 0x0010 //计时器启动模式
#define ENABLE_Pins 0xFFFE //需要使用输入和输出
#define ENABLE_Pins 0xFFFE //启用输入和输出
//#define BIT2 0x0F
//volatile uint16_t ADCResults = 0;
void ADC_Setup (void);//用于设置 ADC12外设
const int x1=1;
const int x2=1;
volatile int 乘以_value;
MAIN ()
{
PM5CTL0 = ENABLE_Pins;//启用输入和输出
P1DIR =BIT0;//将红色 LED 设置为输出
ADC_Setup();//设置 ADC 外设
while (1)
{
ADC12CTL0 = ADC12CTL0 | ADC12ENC;//启用转换
ADC12CTL0 = ADC12CTL0 | ADC12SC;//开始转换
MPLED_VALUE =(ADC12MEM0);
//P1OUT=MPLICE_VALUE;
如果(乘以_value > 0x800)//如果输入> 1.65V
{
P1OUT = BIT0;//打开红色 LED
}
else // else 输入<= 1.65V
{
P1OUT = 0x00;//关闭红色 LED
}
P1DIR |= BIT1;// P1.2至输出
P1SEL1 |= BIT1;// P1.2至 TA0.1
// P1SEL2 &=~BIT6;// P1.7至 TA0.1
TA0CCR0 =乘以值;// PWM 周期
TA0CCTL1 = OUTMOD_7;// CCR1复位/置位
TA0CCR1 =倍增值;// CCR1 PWM 占空比
TA0CTL = tassel_2 + MC_1;// SMCLK、向上计数模式
BIS_SR (LPM0_Bits);//输入 LPM0
}
}
void ADC_Setup (void)
{
#define ADC12_SHT_16 0x0200 //采样保持的16个时钟周期
#define ADC12_ON 0x0010 //用于打开 ADC12外设
#define ADC12_SHT_SRC_SEL 0x0200 //选择采样保持源
#define ADC12_12位0x0020 //选择12位分辨率
#define ADC12_P92 0x000A //将输入 P9.2用于模拟输入
#define ADC12_P43 0x000A
#define ADC12_P32 0x000A
#define ADC12_P93 0x000A
#define ADC12_P14 0x000A
#define ADC12_P20 0x000A
#define ADC12_P41 0x000A
ADC12CTL0 = ADC12_SHT_16 | ADC12_ON;//开启,设置采样保持时间
ADC12CTL1 = ADC12_SHT_SRC_SEL;//指定采样保持时钟源
ADC12CTL2 = ADC12_12位;// 12位转换结果
ADC12MCTL0 = ADC12_P92;// P9.2是模拟输入
ADC12MCTL1 = ADC12_P43;
}