⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temperature.c

📁 msc1201 编程5
💻 C
字号:
#include <REG1210.H>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
// Vref=1.25V, bipolar results give 1.25*2/2^24
#define LSB 		(1.25/8388608)
#define M0			2586.67098545498
#define C0			-271.7529
#define A1			-1.08436244851484e3
#define B1			2.83158996601634e3
#define C1			-285.1293
#define WINDOWSIZE	16
signed long summer(void);
extern void putspace4(void);
extern void tx_byte(char);
// Print a message
void putstr(char code * data msg)
{
	while (*msg != 0) {
		tx_byte((unsigned char) *msg);
		if( *msg=='\n') tx_byte('\r');
		msg++; 
		}
}		
// recursive digit display routine
void prt_digit(unsigned long int i, signed char d) reentrant
{	unsigned long int j; char c;
	j=i/10; c=i-j*10; d--;
	if (j!=0 || !(d &0x80)) prt_digit(j,d);
	if (d==0) tx_byte('.');
	tx_byte(c+48);
}
// Display long integer number with sign and decimal
void print(signed long int i, unsigned char d) 
{
	if (i<0) { tx_byte('-'); i*=-1;}
	prt_digit(i,d); putspace4();		
}
void main(void)
{
	signed long int data sum;
	float data window[16]={0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0};
	float data adres=0, vt, tc_lin, tc_poly;
	unsigned char fill_ptr=1, mod_ptr=0; 
   T2CON  = 0x34;   // T2 as baudrate generator 
   RCAP2  = 65535;  // 57600 Baud @ 1.8432MHz
   SCON   = 0x52;   // Async mode 1, 8-bit UART, enable rcvr, TI=1, RI=0
	putstr("\x1b[1;33;46m\x1b[2J\x1b[12CTemperature Sensor\n");
	PDCON &= 0x0f7;			//turn on adc
	PASEL=0xff;
	ACLK=1;						// ACLK = 1.8432MHz/(1+1)= 0.9216MHz
	DECIMATION = 0x7ff;	
	ADCON0 = 0x20;			   // Vref on 1.25V, Buff off, BOD off, PGA 1
	ADMUX=0xff;
	ADCON1 = 0x01;				// bipolar, auto, self calibration, offset, gain
	SSCON=0;						// Clear SUMR0~3
	SSCON=0xe4;					// Set SSCON for ADC 32 summations and div by 32
	sum=summer();				// Discard 1st summation result
	SSCON=0;						// Clear SUMR0~3
	SSCON=0xe4;					// Set SSCON for ADC 32 summations and div by 32
	while(1){
		sum=summer();		
		SSCON=0;					// Clear SUMR0~3
		SSCON=0xe4;				// Set SSCON for ADC 32 summations and div by 32
		adres=adres-window[mod_ptr];		// Moving Window of 10 results
		window[mod_ptr]=(float) sum;
		adres=adres+ window[mod_ptr];
		vt=adres/(float)fill_ptr*LSB; 
		print((signed long int)(vt*1000000),3); 
		tc_lin=M0*vt + C0; 
		print((signed long int)(tc_lin*1000),3); 
		tc_poly=A1*vt*vt + B1*vt +C1;
		print((signed long int)(tc_poly*1000),3); 
		if (fill_ptr==WINDOWSIZE) fill_ptr=WINDOWSIZE; else fill_ptr++;
		if (mod_ptr==(WINDOWSIZE-1)) mod_ptr=0; else mod_ptr++; 
		putstr("\n");
		if (RI==1){	// Any key will pause, any key again to start
				putstr("Pause....");
				RI=0;
			while(RI==0) {;}
				putstr("Continue\n");
				RI=0;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -