主题中讨论的其他部件: MSP430G2553, MSP430G2402
工具/软件:Code Composer Studio
我有一个关于msp430g2553的代码用于ADC模拟读取,但我想使用msp430l092来制作一个项目,因此当我尝试使用与g2553相关的代码时,我遇到了一个问题。 此代码与l092冲突。 如何创建用于读取模拟传感器值(光电二极管)的代码? 有人能给我一个代码吗? 此外,我意识到l092没有UART,因此无法在控制台终端上看到我的传感器值。
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.
工具/软件:Code Composer Studio
我有一个关于msp430g2553的代码用于ADC模拟读取,但我想使用msp430l092来制作一个项目,因此当我尝试使用与g2553相关的代码时,我遇到了一个问题。 此代码与l092冲突。 如何创建用于读取模拟传感器值(光电二极管)的代码? 有人能给我一个代码吗? 此外,我意识到l092没有UART,因此无法在控制台终端上看到我的传感器值。
您好,
您是否查看 了MSP430Ware中的示例? 以下示例显示了如何在MSP430L092上正确使用ADC。 关于“查看”ADC结果,您可以在CCS中使用调试器和断点来查看相关点的代码并查看变量的值。 请看一下这些示例,如果您需要更多帮助,请告诉我。
此致,
Caleb Overbay
我意识到l092没有UART[/QUOT]
如果您需要在终端程序中输出数据,可以尝试编写基于计时器的软件UART,这些 代码示例中提供了示例:
Dennis
ACLK MCLK和SMCLK是msp430l092的时钟。 在我从 msp430g2xxS中获取代码之后,我更换了适用于msp430l092的寄存器 ,但我没有准备时钟代码。 我已在 终端控制台上检查了我的代码。 没有任何消息。
*--/copyright--*/
//************************************************************************************************
// MSP430G2xx2演示- Timer_A,超低功耗UART 9600回波,32kHz ACLK
//
//说明:使用Timer_A CCR0硬件输出模式和SCCI数据锁存器
//实现UART功能@ 9600波特。 软件不能直接读取和
//写入RX和TX引脚,而不是正确使用输出模式和SCCI数据
//演示了闩锁。 使用这些硬件功能可消除ISR
//延迟效应,因为硬件可确保输出和输入位锁定和
//计时与Timer_A完全同步,与其他计时器无关
//软件活动。 在Mainloop中,UART功能使UART准备就绪
//接收一个字符并在LPM3中等待所有活动中断驱动。
//收到字符后,UART接收功能强制退出
//来自Mainloop中的LPM3,用于配置基于端口引脚(P1和P2)的端口
//在收到的字节的值上(即,如果设置了BIT0,则打开WFP 1.0)。
// ACLK = TALK = LFXT1 = 3.2768万Hz,MCLK = SMCLK =默认DCO
/////*对于ACLK,XIN XOUT需要外部水晶表片*//
//
// MSP430G2xx2
//-----------
///|\\| Xin|-
//||| 32kHz
//--|RST XOUT|-
//||
//| CCI0B/TXD/WFP 1.1 >
//|| 9600 8N1
//| CCI0A/RXD/WFP 1.2 |<!----
//
// D. Dang
//德州仪器(TI)
// 2010年12月
//使用CCS版本4.2 0和IAR嵌入式工作台版本:5.10 构建
//************************************************************************************************
#include <MSP4S.h>
//------------------
//硬件相关定义
//------------------
#define UART_TXD 0x02 //在WFP 1.1 上使用TXD (Timer0_A.OUT0)
#define UART_RXD 0x04 //在WFP 1.2 上为RXD (Timer0_A.CCI1A)
//------------------
// 9600波特SW UART的条件,SMCLK = 1MHz
//------------------
#define UART_TBIT_DIV_2 (100万 /(9600 * 2))
#define UART_TBIT (100万 / 9600)
//------------------
//用于全双工UART通信的全局变量
//------------------
unsigned int txData;//用于TX的UART内部变量
unsigned char rxBuffer;//接收到UART字符
//------------------
//函数原型
//------------------
void TimerA_UART_INIT(void);
void TimerA_UART_TX (无符号字符字节);
void TimerA_UART_PRINT (CHAR *STRING);
//------------------
//主()
//------------------
内部主(无效)
{
WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器
/*
IF (CALBC1_1MHz=0xFF)// If calibration constants.
{
while (1);//不加载,捕获CPU!!
}
*/
/*
DCOCTL = 0;//选择最低DCOx和MODx设置
BCSCTL1 = CALC1_1MHz;
DCOCTL = CALDCO_1MHz;
*/
/**************** /
/*设置CCS */
/* ACLK = CLKIN/1 */
/* MCLK = CLKIN/1 */
/* SMCLK = CLKIN/1 */
/**************** /
CCSCTL0 = CCSKEY;//解锁CCS
While (SFRIFG1和OFIFG)//振荡器标志?
{
CCSCTL7 = 0;//清除HF和LF OSC故障标志
SFRIFG1 = 0;//清除OFIFG
}
CCSCTL5 = DIVA_0 + DIVM_0 + DIVS_0;//将ACLK,MCLK和SMCLK的分禾器设置为1
CCSCTL4 |=拉美经济体系2 + SELM_2 + SELS_2;//选择CLKIN/XOSC作为ACLK,MCLK和SMCLK的源代码
CCSCTL0_H |= 0xFF;//锁定CCS
/*通过写入高位字节锁定*/
同时(1);
P1OUT = 0x00;//初始化所有GPIO
P1SEL0 = UART_TXD + UART_RXD;// TXD/RXD引脚的计时器功能
P1DIR = 0xFF &~UART_RXD;//设置除RXD以外的所有引脚以输出
P2OUT = 0x00;
P2SEL0 = 0x00;
P2DIR = 0xFF;
__enable_interrupit();
TimerA_UART_INIT();//开始计时器_A UART
TimerA_UART_PRINT ("G2xxS TimerA UART\r\n");
TimerA_UART_PRINT ("就绪。\r\n");
(;;)
{
//等待输入字符
__bis_sr_register (LPM0_bits);
//根据收到的字节更新板输出
IF (rxBuffer & 0x01) P1OUT |= 0x01;否则P1OUT &=~0x01;// WFP 1.0
IF (rxBuffer & 0x02) P1OUT |= 0x08;否则P1OUT &=~0x08;// WFP 1.3
IF (rxBuffer & 0x04) P1OUT |= 0x10;否则P1OUT &=~0x10;// WFP 1.4
IF (rxBuffer & 0x08) P1OUT |= 0x20;否则P1OUT &=~0x20;// WFP 1.5
IF (rxBuffer & 0x10) P1OUT |= 0x40;否则P1OUT &=~0x40;// WFP 1.6
IF (rxBuffer & 0x20) P1OUT |= 0x80;否则P1OUT &=~0x80;// WFP 1.7
IF (rxBuffer和0x40) P2OUT |= 0x40;否则P2OUT &=~0x40;// WFP 2.6
IF (rxBuffer和0x80) P2OUT |= 0x80;否则P2OUT &=~0x80;// WFP 2.7
//回显接收到的字符
TimerA_UART_TX (rxBuffer);
}
}
//------------------
//功能配置Timer_A以进行全双工UART操作
//------------------
void TimerA_UART_INIT (void)
{
TA0CCTL0 =输出;//将TXD空闲设置为标记='1'
TA0CCTL1 = SCS + CM1 + CAP + CCIE;//同步,负极边缘,捕获,内部
TA0CTL = tassel_2 + MC_2;// SMCLK,在连续模式下启动
}
//------------------
//使用Timer_A UART输出一个字节
//------------------
void TimerA_UART_TX (无符号字符字节)
{
while (TA0CCTL0和CCIE);//确保最后一个字符获得TX
TA0CCR0 = TA0R;// TA计数器的当前状态
TA0CCR0 += UART_TBIT;//第一位之前的一位时间
TA0CCTL0 = OUTMOD0 + CCIE;//在EQU0,Int上设置TXD
txData = byte;//加载全局变量
txData |= 0x100;//向TXData添加标记停止位
txData <<= 1;//添加空格起始位
}
//------------------
//使用Timer_A UART打印字符串
//------------------
void TimerA_UART_PRINT (CHAR *STRING)
{
同时(*string){
TimerA_UART_TX(*STRING+);
}
}
//------------------
// Timer_A UART -发射中断处理程序
//------------------
#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
#pragma vector = TIMER0_A0_vector
__interrupt void Timer_A0_ISR(void)
#Elif已定义(__GMNU__)
void __attribute__((interrupt (TIMER0_A0_vector)) Timer_A0_ISR (void)
#否则
错误编译器不受支持!
#endif
{
静态无符号字符txBitCnt =10;
TA0CCR0 += UART_TBIT;//向CCRx添加偏移
如果(txBitCnt == 0){//所有位TXed?
TA0CCTL0 &=~CCIE;//所有位TXED,禁用中断
txBitCnt =10;//重新加载位计数器
}
否则{
如果(txData和0x01){
TA0CCTL0 &=~OUTMOD2;// TX标记'1'
}
否则{
TA0CCTL0 |= OUTMOD2;// TX空间'0'
}
txData >=1;
txBitcn--;
}
}
//------------------
// Timer_A UART -接收中断处理程序
//------------------
#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
#pragma vector = TIMER0_A1_vector
__interrupt void Timer_A1_ISR(void)
#Elif已定义(__GMNU__)
void __attribute__((interrupt (TIMER0_A1_vector)) Timer_A1_ISR (void)
#否则
错误编译器不受支持!
#endif
{
静态无符号字符rxBitCnt =8;
静态无符号字符rxData =0;
开关(__偶 数_IN_RANGE (TA0IV,TA0IV_TAIFG)){//使用计算的分支
CASE TA0IV_TACCR1:// TACCR1 CCIFG - UART RX
TA0CCR1 += UART_TBIT;//向CCRx添加偏移
如果(TA0CCTL1 & CAP){//捕获模式=起始位边缘
TA0CCTL1 &=~cap;//切换捕获以比较模式
TA0CCR1 += UART_TBIT_DIV_2;//点CCRx到D0的中间
}
否则{
rxData >>=1;
如果(TA0CCTL1 & SCCI){//在接收锁中获取等待位
rxData |= 0x80;
}
rxBitCnt--;
如果(rxBitCnt == 0){//所有位RXed?
rxBuffer = rxData;//存储在全局变量中
rxBitCnt =8;//重新加载位计数器
TA0CCTL1 || CAP;//切换与捕获模式进行比较
__BIC_SR_REGISTER_ON_EXIT (LPM0_bits);//从0 (SR)清除LPM0位
}
}
中断;
}
}