请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430G2553 在“线程:LM35”中讨论的其他部件
工具/软件:Code Composer Studio
您好,TI论坛。 我一直在从事一个使用LM35热传感器的项目,并根据当前的ADC10值更改风扇(PWM)的速度。 此外,预设温度值和当前读取的温度值之间的误差值使用名为CoolTerm的程序通过TX UART成功打印到我的PC。 但是,我也想通过RX UART设置预设温度值,我唯一能做到这一点的方法是发送长度超过一个字符的命令。 在下面的代码中,我省略了大约100行代码,以显示控制通过RX UART发送数据的部分。 在运行我的完整代码时,输入r,R,g,G,1等内容, 2,3等都能完美工作。 是否有人可以查看我的代码并告诉我需要更改哪些内容才能在UART代码作出反应之前发送完整的字符串? 我非常确定,这些行:5,26-34,57,83,是需要审核的行。
同样如您所料,我如何将温度镜值设置为我从RX UART输入的数字? 例如,如果输入SET Temp =500,如何将500字符串转换为SEutemror =(RX UART编号字符串)行的整数值? 这将使我的代码更简单,而不是为每个可能的数字输入都提供case语句。
#include <msp430g2553.h>
#include <stdio.h>/***
UART相关代码***/
静态char数据;
void UARTSendArray (unsigned char *TxArray,unsigned char ArrayLength);
//省略了许多函数原型和全局初始化变量。
/***初始化温度变量***/
室内温度镜=450;
//省略了许多函数原型和全局变量。
void init_UART()
{
P1SEL = BIT1 + BIT2;// WFP 1.1 = RXD, WFP 1.2 = TXD
P1SEL2 = BIT1 + BIT2;// WFP 1.1 = RXD,1.2 = TSUCA0EL_|2=
// SMCLK
UCA0BR0 = 104; //参见UCA0BR1
= 0以上的波特率分配器;
UCA0MCTL = UCBRS0; //调制UCBRSx = 1
UCA0CTL1 &=~UCSWRST; //**初始化USCI状态机**
IE2 |= UCA0TXIE; //启用USI_A0 TX中断
}//
省略了许多函数。
void UARTSendArray (unsigned char *TxArray,unsigned char ArrayLength)
{
while (ArrayLength--){//循环到StringLength ==0,然后发布递减
while (!(IFG2 & UCA0TXIFG));//等待TX缓冲区为新数据做好准备
UCA0TXBUF =*TxArray;//在指定的位置写入字符py指针
TxArray++;//递增TxString指针以指向下一个字符
}
}
int main(void){
WDTCTL = WDTPW + WDTHOLD; //停止WDT
//省略了许多外围设备。
(;;)
{
ADC10CTL0 |= ENC + ADC10SC; //开始采样和转换
__bis_sr_register (CPUOFF + GIE); // LPM0,ADC10_ISR将强制退出
电流= ADC10MEM;
错误=上一页-设置温度镜;//计算与预设温度的误差。已删除abs()。
IE2 |= UCA0RXIE;//启用USI_A0 RX中断
//省略了多个代码
}
#pragma vector=USCIAB0RX_vector
__interrupt void USCI0RX_ISR(void)
{
数据= UCA0RXBUF;
UARTSendArray ("接收到的命令:",18);
UARTSendArray (&data,1);//长度应为14个字符
UARTSendArray ("\n\n",2);
交换机(数据){
案例'设定温度= 450':{
温度镜=450;
}
中断;
案例'设定温度= 475':{
设置错误=475;
}
中断;
案例'设定温度= 490':{
温度镜=490;
}
中断;
案例'设定温度= 500':{
温度镜=500;
}
断裂;
大小写'G':{//正常工作
温度镜=500;
}
中断;
默认值:{
UARTSendArray ("未知命令:",17);
UARTSendArray (&DATA,1);
UARTSendArray("\n\n",2);}
中断;
}
}