本文共 825 字,大约阅读时间需要 2 分钟。
这个章节没得什么讲得,用的时候记得调用模块,自己配置一些寄存器。
ADC对自身芯片温度的采集:
void InitClock(void)//还是原来的味道 { CLKCONCMD &= ~0x40; //设置系统时钟源为 32MHZ晶振 while(CLKCONSTA & 0x40); //等待晶振稳定 CLKCONCMD &= ~0x47; //设置系统主时钟频率为 32MHZ } void InitSensor(void)//温度传感器初始化函数 { IEN0 = IEN1 = IEN2 = 0x00 //关闭所有中断 InitClock(); //设置系统主时钟为 32M TR0=0x01; //设置为1来连接温度传感器到SOC_ADC ATEST=0x01; //使能温度传感 } float GetTemperature(void)//获取温度传感器 AD 值 通过计算返回实际的温度值 { uint value; ADCCON3 = (0x3E); //选择1.25V为参考电压;14位分辨率;对片内温度传感器采样 ADCCON1 |= 0x30; //选择ADC的启动模式为手动 ADCCON1 |= 0x40; //启动AD转化 while(!(ADCCON1 & 0x80)); //等待 AD 转换完成 value = ADCL >> 4; //ADCL 寄存器低 2 位无效,由于他只有12位有效,ADCL寄存器低4位无效。网络上很多代码这里都是右移两位,那是不对的 value |= (((uint)ADCH) << 4); return (value-1367.5)/4.5-5; //根据 AD 值,计算出实际的温度,芯片手册有错,温度系数应该是4.5 /℃ //进行温度校正,这里减去5℃(不同芯片根据具体情况校正) } sprintf(strTemp,"%.02f", AvgTemp);//将浮点数转成字符串转载地址:http://ukdso.baihongyu.com/