本帖最后由 noonezero 于 2023-10-5 18:17 编辑
第十九课:NTC温度采集
1.NTC原理
NTC是指随温度上升电阻呈指数关系减小,具有负温度系数的热敏电阻现象和材料
公式
代码:记得端口配置高阻输入
我按课件送的表做的,常温显示41度多,估计是表的问题
- #include "config.h"
- #include <STC32G.H>
- #include "../COMM/stc32_stc8_usb.h"
- #include "stdio.h"
- #include "ntc.h"
-
- void sys_init();
-
- //USB调试及复位所需定义
- char *USER_DEVICEDESC = NULL;
- char *USER_PRODUCTDESC = NULL;
- char *USER_STCISPCMD = "@STCISP#";
-
-
- // ADC初始化
- void ADC_init()
- {
- ADCTIM = 0x3F; // 设置ADC内部时序
- ADCCFG = 0x2F; // 数据右对齐,方便合二为一。时钟选择为最慢
- ADC_CONTR = 0x83; // 1000 0011 选择通道0011 P1.3
- }
-
- // ADC读取
- int ADC_Read()
- {
- int res; // ADC数值保存变量
- ADC_START = 1; // 开启ADC转化
- _nop_(); // 空操作指令
- _nop_();
- while(!ADC_FLAG); // 等待ADC转换结束
- ADC_FLAG = 0; // 手动清零
- res = (ADC_RES << 8) | ADC_RESL; // 计算ADC数值
-
- return res;
- }
-
- void main()
- {
- int adcval;
- int res;
-
- P0M1 |= 0x08;
- sys_init();
- usb_init(); //USB初始化
- EA = 1;
-
- ADC_init();
- adcval = ADC_Read();
- res = Temp_Cal(adcval);
-
- while(1)
- {
- if (bUsbOutReady)
- {
- //USB_SendData(UsbOutBuffer, 64);
- usb_OUT_done();
- printf("temp \t%d\tadc \t%d\r\n", res, adcval);
- }
- }
- }
-
- void sys_init()
- {
- WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
- EAXFR = 1; //扩展寄存器(XFR)访问使能
- CKCON = 0; //提高访问XRAM速度
-
- P0M1 = 0x30; P0M0 = 0x30; //设置P0.4、P0.5为漏极开路(实验箱加了上拉电阻到3.3V)
- P1M1 = 0x32; P1M0 = 0x32; //设置P1.1、P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V), P1.1在PWM当DAC电路通过电阻串联到P2.3
- P2M1 = 0x3c; P2M0 = 0x3c; //设置P2.2~P2.5为漏极开路(实验箱加了上拉电阻到3.3V),设置开漏模式需要断开PWM当DAC电路中的R2电阻
- P3M1 = 0x50; P3M0 = 0x50; //设置P3.4、P3.6为漏极开路(实验箱加了上拉电阻到3.3V)
- P4M1 = 0x3c; P4M0 = 0x3c; //设置P4.2~P4.5为漏极开路(实验箱加了上拉电阻到3.3V)
- P5M1 = 0x0c; P5M0 = 0x0c; //设置P5.2、P5.3为漏极开路(实验箱加了上拉电阻到3.3V)
- P6M1 = 0xff; P6M0 = 0xff; //设置为漏极开路(实验箱加了上拉电阻到3.3V)
- P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口
- }
复制代码
|