1、include
2、[] = {0xFB,0xFD,0xFE}; BYTE idata BCD_ZH[3]; BYTE idata tt=0; BYTE idata t=0; WORD idata XIANSHI_JISHU=0; //********************************************* sfr DM = 0xA0; sfr WM = 0x80; //********************************************** bit XIANSHI_BIT = 0; bit FUHAO_BIT = 0; bit XIANSHI_BIT_
3、1; //******************************************** void CONFIG(){ //看门狗禁止,以方便调试 PCA0MD = 0x00; //看门狗禁止 REG0CN = 0x10; //内部LDO使能 PFE0CN = 0x20; //预取指令允许位置'1' //--------------------------------------- //交叉开关配置 XBR0 = 0x00; XBR1 = 0x40; P1MDIN =
4、 0x7f; P1MDOUT = 0; //--------------------------------------- //系统时钟配置,采用内部晶振 CLKSEL = 0x00;//时钟乘法器 OSCICN = 0x87;//振荡器使能不分频 //---------------------------------------- //T2初始化 //T2工作于自动重装载定时方式,定时时间ms,PID运算时间最短为ms TMR2CN = 0x04;//开定时器 TMR2RLH = 0xe0;//定时器重装载高字节 TMR2RLL =
5、0x18;//低字节 TMR2H = 0xe0;//定时器高字节 TMR2L = 0x18;//低字节 IE |= 0x20;//允许TF2L或TF2H标志中断请求 //------------------------------------- //VREF初始化 REF0CN = 0x13;//基准电压.2v //-------------------------------------- //ADC0初始化 ADC0CN = 0x80;//ASC0处于使能状态,可以进行转换数据 ADC0CF = 0xf0; //------
6、 EA = 1;//开启全局中断 }//************************************************************************* void T2_INT()interrupt 5 { //PID采样时间,最小间隔ms TMR2CN &= 0x7f;//清除TF2中断标志 XIANSHI_BIT = 1; if(tt<2){tt++;} else{tt=0;} WM = 255; DM = BCD_tab[BCD_ZH[tt]];
7、 WM = WM_tab[tt]; XIANSHI_JISHU++; if(XIANSHI_JISHU<100){ XIANSHI_JISHU++; } else { XIANSHI_JISHU = 0; XIANSHI_BIT_ = 1; } } //AD转换函数 //************************************************************************** WORD ADC0(){ BYTE x; WORD y; ADC0MX =
8、 AD_LU; ADC0CN |=0x10; x = ADC0CN&0x20; while(x==0){ x = ADC0CN&0x20; } ADC0CN = ADC0CN&0xdf; y = 256*ADC0H+ADC0L; return y; } //转换函数 //************************************************************* void BCD_ZHUANHUAN(int x){ if(x<0){ x = -x; FUHAO_BIT
9、 1; } else{ FUHAO_BIT = 0; } BCD_ZH[0] = x%10; BCD_ZH[1] = x/10%10; BCD_ZH[2] = x/100; } //***************************************************************** float U_JISUAN(WORD x){ return (2.200*(float)(x)/4095); } float R_JISUAN(float x){ return 3600.0*x/(2.58-x); } f
10、loat T_JISUAN(float x) { float T; T = (1/(log(x/10000)/2800+1/298.15)); return T; } //***************************************************************** //主函数 void mian(){ CONFIG(); while(1){ AD = ADC0(); DIANYA =U_JISUAN(AD); R=R_JISUAN(DIANYA); T_=T_JISUAN(R)-273.15; if(XIANSHI_BIT_==1){ BCD_ZHUANHUAN(T_*10); XIANSHI_BIT_=0; } } }
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818