原创 CC2430基础实验——片内温度

2009-9-20 17:56 2580 4 4 分类: MCU/ 嵌入式
这个实验主要是取片内温度传感器作为AD源,并将转换得到的温度通过串口发送到电脑

    实验共用到CLOKCON、SLEEP、PERCFG、U0CSR、U0GCR、U0BAUD、IEN0、U0BUF、ADCCON1、ADCCON3、ADCH和ADCL几个个寄存器。其中CLOKCON为时钟控制寄存器,SLEEP为睡眠模式控制寄存器,PERCFG为外设控制寄存器,U0CSR为串口0控制状态寄存器,U0CSR为串口0常规控制寄存器,U0BAUD为串口0波特率控制寄存器,U0BUF为串口0收发缓冲。


    这个实验的程序真的是十分麻烦,在我看来主要是分成两个部分——串口部分和测温部分,首先说一下串口部分的程序吧。主要包括下面的几个函数:


void initUARTtest(void); 串口初始化函数
void UartTX_Send_String(char *Data,int len); 向串口发送字符串函数


void UartTX_Send_word(char word); 向串口发送字函数


    以上这些就是这个实验里要用的了,因为这个实验是通过串口向上显示数据的,所以主要是用到的串口的发送功能(数据通过串口由芯片向上位机发送),前面我写的文章讲串口的已经是不少了感觉,所以这里就不再一一解释这写程序了。但是要说明的一点就是串口发送的时候是不能够用中断的,要使用查询模式,所以要从初始化串口开始一步一步的进行。这个实验里设置的波特率是57600。


   接着说一下这个实验的测温部分。测温部分用到的函数有一下几个:


   initTempSensor(); 初始化温度传感器函数


   getTemperature(); 获取温度函数


   其中initTempSensor()的程序是


   void initTempSensor(void)


  {
   DISABLE_ALL_INTERRUPTS();  //关掉中断


   SET_MAIN_CLOCK_SOURCE(0);  //设置时钟频率


   *((BYTE __xdata*) 0xDF26) = 0x80; //设AD目标为片机温度传感器(这个我不是很明白,55)
   }


   getTemperature()的程序在这就不给出了,主要是看一下几个与他有关的宏定义:


  //ADC信号转换宏定义


   #define ADC_SINGLE_CONVERSION(settings) do{ ADCCON3 = (settings); }while(0)


   //ADC采样信号宏定义


   #define ADC_SAMPLE_SINGLE() do { ADC_STOP(); ADCCON1 |= 0x40;  } while (0)


   //采样就绪宏定义


   #define ADC_SAMPLE_READY()  (ADCCON1 & 0x80)


   //数值计算宏定义


   #define ADC14_TO_CELSIUS(ADC_VALUE)    ( ((ADC_VALUE) >> 4) - 315)


   在getTemperature()这个函数里一共是连续进行了四次AD转换,将得到的结果求均值后将AD转换为温度返回。这样我们就可以看见片内温度了(见下图)。


  4c82872345699ec756a91


   


  本文转载自:http://blog.sina.com.cn/s/blog_4c8287230100dd1a.html

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条